none
Compilation d'une appli qui donne un écran bleu RRS feed

  • Discussion générale

  • Bonjour,

    Je travail sur un agent qui me retourne diverses informations une fois installé sur un serveur, dont ses taches planifiées. Cette dernière partie a été en partie développée par une tierce personne, que je dois reprendre pour l'adapter à mes besoins. Cette personne est sous winXP, elle comppile et execute l'appli sans problème.

    Moi je suis avec win7, impossible de compiler le projet sans avoir un écran bleu. En revanche, en lancant l'.exe généré par mon collègue, ca fonctionne bien.

    Extrait du journal de log de windows :

     

    Nom du journal :Application
    Source :  Application Error
    Date :   12/04/2011 11:11:09
    ID de l’événement :1000
    Catégorie de la tâche :(100)
    Niveau :  Erreur
    Mots clés : Classique
    Utilisateur : N/A
    Description :
    Nom de l’application défaillante winTestSeeker.exe, version : 1.0.0.0, horodatage : 0x4da416f6
    Nom du module défaillant : KERNELBASE.dll, version : 6.1.7600.16385, horodatage : 0x4a5bdfe0
    Code d’exception : 0xe0434352
    Décalage d’erreur : 0x000000000000aa7d
    ID du processus défaillant : 0xbf8
    Heure de début de l’application défaillante : 0x01cbf8f18ff96aab
    Chemin d’accès de l’application défaillante : C:\Users\testdri\Documents\winTestSeeker\winTestSeeker.exe
    Chemin d’accès du module défaillant: C:\Windows\system32\KERNELBASE.dll

     

    Une simple winForm de test (winTestSeeker) appel et utilise une DLL en C++, c'est cette dernière qui récupère les tâches planifiées.

    On utilise tout deux VS2010 et le tout est développé en C# (hormis cette dll).

     

    D'avance merci pour votre aide.

     


    • Type modifié Ciprian Duduiala jeudi 12 mai 2011 06:33 pas de réponse de l'utilisateur qui a lancé la question
    jeudi 5 mai 2011 09:54

Toutes les réponses

  • Bonjour,

    Pourriez-vous nous montrer le code qui accède à

    KERNELBASE.dll ?

    fred
    jeudi 5 mai 2011 20:41
  • Bonjour,

     

    Le hic c'est que je ne sais pas lequel est-ce, je soupçonne que se soit la dll en c++ qui embête.

    En voici un bout :

     

    TaskSchedulerDRI.h

    // TaskSchedulerDRI.h
    
    //#define _WIN32_DCOM
    #include "stdafx.h"
    #include <windows.h>
    #include <iostream>
    #include <taskschd.h>
    #include <stdio.h>
    #include <comdef.h>
    
    
    using namespace std;
    
    # pragma comment(lib, "taskschd.lib")
    # pragma comment(lib, "comsupp.lib")
    
    // Include the task header file.
    
    
    extern "C" __declspec(dllexport) int DonneListTask()
    {
      // ------------------------------------------------------
      // Create an instance of the Task Service. 
      ITaskService *pService = NULL;
      HRESULT hr = CoCreateInstance( CLSID_TaskScheduler,
                  NULL,
                  CLSCTX_INPROC_SERVER,
                  IID_ITaskService,
                  (void**)&pService ); 
      if (FAILED(hr))
      {
         CoUninitialize();
         return -1;
      }
        
      // Connect to the task service.
      hr = pService->Connect(_variant_t(), _variant_t(),
        _variant_t(), _variant_t());
      if( FAILED(hr) )
      {
        pService->Release();
        CoUninitialize();
        return -1;
      }
    
      // ------------------------------------------------------
      // Get the pointer to the root task folder.
      ITaskFolder *pRootFolder = NULL;
      hr = pService->GetFolder( _bstr_t( L"\\") , &pRootFolder );
      
      pService->Release();
      if( FAILED(hr) )
      {
        CoUninitialize();
        return -1;
      }
      
      // -------------------------------------------------------
      // Get the registered tasks in the folder.
      IRegisteredTaskCollection* pTaskCollection = NULL;
    	
      hr = pRootFolder->GetTasks( NULL, &pTaskCollection );
    
      pRootFolder->Release();
      if( FAILED(hr) )
      {
        CoUninitialize();
        return -1;
      }
    
      LONG numTasks = 0;
      hr = pTaskCollection->get_Count(&numTasks);
    
      if( numTasks == 0 )
       {
        pTaskCollection->Release();
        CoUninitialize();
        return -1;
       }
    
      //printf("\nNumber of Tasks : %d", numTasks );
    
      pTaskCollection->Release();
      CoUninitialize();
      return numTasks;
    }<br/>
    

     

    Structure.cpp

    //#define _WIN32_DCOM
    #include "stdafx.h"
    #include <windows.h>
    #include <iostream>
    #include <stdio.h>
    #include <comdef.h>
    #include <taskschd.h>
    # pragma comment(lib, "taskschd.lib")
    # pragma comment(lib, "comsupp.lib")
    
    using namespace std;
    
    typedef struct
    {
    	wchar_t *nomTask;
    	wchar_t *xmlTask;
    	int Count;
    } TASK;
    
    extern "C" __declspec(dllexport) TASK * DonneTask(LONG i)
    {
    
    	TASK *maTask = new TASK;
    	
    
    	// ------------------------------------------------------
    	// Create an instance of the Task Service. 
    	ITaskService *pService = NULL;
    	HRESULT hr = CoCreateInstance( CLSID_TaskScheduler,
    							NULL,
    							CLSCTX_INPROC_SERVER,
    							IID_ITaskService,
    							(void**)&pService );
    	if (FAILED(hr))
    	{
    			CoUninitialize();
    	}
        
    	// Connect to the task service.
    	hr = pService->Connect(_variant_t(), _variant_t(),
    		_variant_t(), _variant_t());
    	if( FAILED(hr) )
    	{
    		pService->Release();
    		CoUninitialize();
    	}
    
    	// ------------------------------------------------------
    	// Get the pointer to the root task folder.
    	ITaskFolder *pRootFolder = NULL;
    	hr = pService->GetFolder( _bstr_t( L"\\") , &pRootFolder );
      
    	pService->Release();
    	if( FAILED(hr) )
    	{
    		CoUninitialize();
    	}
      
    	// -------------------------------------------------------
    	// Get the registered tasks in the folder.
    	IRegisteredTaskCollection* pTaskCollection = NULL;
    	
    	hr = pRootFolder->GetTasks( NULL, &pTaskCollection );
    
    	pRootFolder->Release();
    	if( FAILED(hr) )
    	{
    		CoUninitialize();
    	}
    
    	LONG numTasks = 0;
    	hr = pTaskCollection->get_Count(&numTasks);
    
    	if( numTasks == 0 )
    		{
    		pTaskCollection->Release();
    		CoUninitialize();
    		}
    
    	maTask->Count = numTasks;
    		
    	IRegisteredTask* pRegisteredTask = NULL;
    	hr = pTaskCollection->get_Item( _variant_t(i), &pRegisteredTask );
    			
    		if( SUCCEEDED(hr) )
    		{
    			BSTR taskName = NULL;
    			BSTR TaskXml = NULL;
    			hr = pRegisteredTask->get_Name(&taskName);
    			if( SUCCEEDED(hr) )
    			{
    				maTask->nomTask = new wchar_t[SysStringLen(taskName)];
    				maTask->nomTask = taskName;
    				SysFreeString(taskName);
    
    				pRegisteredTask->get_Xml(&TaskXml);
    				maTask->xmlTask = new wchar_t[SysStringLen(TaskXml)];
    				maTask->xmlTask = TaskXml;
    				SysFreeString(TaskXml);
    			}					
    			pRegisteredTask->Release();
    		}				
    	pTaskCollection->Release();
    	CoUninitialize();
    	return maTask;
    }
    

     

    vendredi 6 mai 2011 08:23
  • Bonjour,

    J’ai trouvé un post avec une erreur similaire. Vérifiez la compatibilité des versions de .NET Framework de votre Windows 7 et de l’application et essayez aussi d’ajouter un UnhandledExceptionEventHandler à votre application pour obtenir plus des infos sur la source de votre erreur.

    Sur un autre post, un utilisateur dit que le code d’erreur 0xE0434352 semble être un code d'exception pour SEH, mais je ne sais pas si cette information vous aide.

    Cordialement,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    mardi 10 mai 2011 08:32