2010-09-02 4 views
1

J'ai créé un service Win32 en C++ et installé avec succès les services.Erreur de service C++ lors du démarrage: Impossible de démarrer le service sur l'ordinateur local

Maintenant que j'essaye de démarrer le service à partir de Services.msc, j'obtiens l'erreur: Impossible de démarrer le service sur l'ordinateur local. Erreur 2: Le système ne trouve pas le fichier spécifié.

Voici l'extrait de code que je suis la définition dans le service Point d'entrée:

#include "stdafx.h" 
#include "iostream" 
#include "Windows.h" 
#include "Winsvc.h" 
#include "time.h" 


SERVICE_STATUS m_ServiceStatus; 
SERVICE_STATUS_HANDLE m_ServiceStatusHandle; 
BOOL bRunning=true; 
void WINAPI ServiceMain(DWORD argc, LPTSTR *argv); 
void WINAPI ServiceCtrlHandler(DWORD Opcode); 
BOOL InstallService(); 
BOOL DeleteService(); 
void main(int argc, char* argv[]) 
{ 

    if(argc>1) 
    { 
    if(strcmp(argv[1],"-i")==0) 
    { 
     if(InstallService()) 
     printf("\n\nService Installed Sucessfully\n"); 
     else 
     printf("\n\nError Installing Service\n"); 
    } 
    else if(strcmp(argv[1],"-u")==0) 
    { 
     if(DeleteService()) 
     printf("\n\nService UnInstalled Sucessfully\n"); 
     else 
     printf("\n\nError UnInstalling Service\n"); 
    } 
    else 
    { 
     printf("\n\nUnknown Switch Usage\n\nFor Install use WindowService -i\n\nFor UnInstall use WindowService -u\n"); 
    } 
    } 
    else 
    { 
    SERVICE_TABLE_ENTRY DispatchTable[]= 
       {{"myService",ServiceMain},{NULL,NULL}}; 
    StartServiceCtrlDispatcher(DispatchTable); 
    } 
// DeleteService(); 
    //return 0; 
} 

void WINAPI ServiceMain(DWORD argc, LPTSTR *argv) 
{ 
    DWORD status; 
    DWORD specificError; 
    m_ServiceStatus.dwServiceType = SERVICE_WIN32; 
    m_ServiceStatus.dwCurrentState = SERVICE_START_PENDING; 
    m_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP; 
    m_ServiceStatus.dwWin32ExitCode = 0; 
    m_ServiceStatus.dwServiceSpecificExitCode = 0; 
    m_ServiceStatus.dwCheckPoint = 0; 
    m_ServiceStatus.dwWaitHint = 0; 

    m_ServiceStatusHandle = RegisterServiceCtrlHandler("myService", 
              ServiceCtrlHandler); 
    if (m_ServiceStatusHandle == (SERVICE_STATUS_HANDLE)0) 
    { 
    return; 
    } 
    m_ServiceStatus.dwCurrentState = SERVICE_RUNNING; 
    m_ServiceStatus.dwCheckPoint = 0; 
    m_ServiceStatus.dwWaitHint = 0; 
    if (!SetServiceStatus (m_ServiceStatusHandle, &m_ServiceStatus)) 
    { 
    } 
system("start c:\\progra~1\\intern~1\\iexplore.exe http://www.google.com"); 
    //strcat("Win1", "1.exe"); 
    /*bRunning=true; 
    while(bRunning) 
    { 
    //Sleep(3000); 
    //Place Your Code for processing here.... 
     //printf("\nThe Service is Running Now...\n"); 


    }*/ 
    return; 
} 

void WINAPI ServiceCtrlHandler(DWORD Opcode) 
{ 
    switch(Opcode) 
    { 
    case SERVICE_CONTROL_PAUSE: 
     m_ServiceStatus.dwCurrentState = SERVICE_PAUSED; 
     break; 
    case SERVICE_CONTROL_CONTINUE: 
     m_ServiceStatus.dwCurrentState = SERVICE_RUNNING; 
     break; 
    case SERVICE_CONTROL_STOP: 
     m_ServiceStatus.dwWin32ExitCode = 0; 
     m_ServiceStatus.dwCurrentState = SERVICE_STOPPED; 
     m_ServiceStatus.dwCheckPoint = 0; 
     m_ServiceStatus.dwWaitHint = 0; 

     SetServiceStatus (m_ServiceStatusHandle,&m_ServiceStatus); 
     bRunning=false; 
     break; 
    case SERVICE_CONTROL_INTERROGATE: 
     break; 
    } 
    return; 
} 

BOOL InstallService() 
{ 
    char strDir[1024]; 
    HANDLE schSCManager,schService; 
    GetCurrentDirectory(1024,strDir); 
    strcat(strDir,"\\Debug\\WindowService.exe"); 
    schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); 

    if (schSCManager == NULL) 
    return false; 
    LPCTSTR lpszBinaryPathName=strDir; 

    schService = CreateService(schSCManager,"myService", 
     "my_Service", // service name to display 

    SERVICE_ALL_ACCESS, // desired access 

    SERVICE_WIN32_OWN_PROCESS, // service type 

    SERVICE_DEMAND_START, // start type 

    SERVICE_ERROR_NORMAL, // error control type 

    lpszBinaryPathName, // service's binary 

    NULL, // no load ordering group 

    NULL, // no tag identifier 

    NULL, // no dependencies 

    NULL, // LocalSystem account 

    NULL); // no password 


    if (schService == NULL) 
    return false; 

    CloseServiceHandle(schService); 
    return true; 
} 

BOOL DeleteService() 
{ 
    HANDLE schSCManager; 
    SC_HANDLE hService; 
    schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); 

    if (schSCManager == NULL) 
    return false; 
    hService=OpenService(schSCManager,"myService",SERVICE_ALL_ACCESS); 
    if (hService == NULL) 
    return false; 
    if(DeleteService(hService)==0) 
    return false; 
    if(CloseServiceHandle(hService)==0) 
    return false; 

return true; 
} 

J'ai pris cet exemple de code de codeproject.

Répondre

1

Vérifiez les propriétés de votre service dans services.msc pour voir d'où votre exe est attendu et assurez-vous que cela correspond au chemin physique du fichier EXE. Assurez-vous que le fichier EXE est réellement là. Vérifiez la visionneuse d'événement pour voir si plus d'information est présente au sujet de l'erreur. Assurez-vous que le code s'exécute correctement lorsqu'il n'est pas exécuté en tant que service. Si vous exécutez votre code en tant que service et non en tant que service, cela peut être très utile à cet égard. Exécutez l'installation du service dans le débogueur pour vous assurer de ne pas manquer un code d'erreur quelque part. L'installation du service a-t-elle fonctionné correctement?

1

Où se trouve l'emplacement où vous avez installé votre service. DId vous vérifiez que le service existe à cet endroit. Etes-vous en train d'essayer de l'exécuter en tant que service réseau ou service d'utilisateur local?

+0

Installation du service dans mon dossier de débogage (C: \ Program Files \ Microsoft Visual Studio \ MyProjects \ WindowService \ Debug) et exécution en tant qu'utilisateur local. Je ne suis pas sûr de tous vos appels, donc mis à jour le post avec un extrait entier – Simsons

Questions connexes