installiert ist. Ich schreibe eine C-Anwendung, die einen Windows-Dienst erstellt. Ich möchte prüfen, ob der Dienst installiert ist, bevor ich versuche, die Installationsfunktion aufzurufen, aber ich kann nicht herausfinden, wie ich ihn überprüfen kann.Überprüfen Sie, ob ein Dienst mit C
Ich habe den Code oben, um zu versuchen geschrieben:
DWORD InstallMyService()
{
char strDir[1024 + 1];
SC_HANDLE schSCManager;
SC_HANDLE schService;
LPCTSTR lpszBinaryPathName;
if (GetCurrentDirectory(1024, strDir) == 0)
{
aff_error("GetCurrentDirectory");
return FALSE;
}
strcat(strDir, "\\"MY_SERVICE_BIN_NAME);
if ((schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) == NULL)
{
printf("Error OpenSCManager : %d\n", GetLastError());
return FALSE;
}
lpszBinaryPathName = strDir;
schService = CreateService(schSCManager, MY_SERVICE_NAME, MY_SERVICE_DESCRIPTOR,
SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL,
lpszBinaryPathName, NULL, NULL, NULL, NULL, NULL);
if (schService == NULL)
{
printf("Error CreateService : %d\n", GetLastError());
return FALSE;
}
CloseServiceHandle(schService);
return TRUE;
}
Aber dieser Code nicht erkennt, wenn der Dienst noch vorhandenen ist oder nicht. Hat jemand eine Idee, welche Funktion er anrufen soll? Ich habe viele Beiträge darüber gefunden, aber nicht in C, nur in C# oder VB.
Vielen Dank.
Was versagt hat? Es ist der 'OpenSCManager' Aufruf oder der' GetServiceKeyName' Aufruf? – ChrisF
Es scheint nur, wenn der Dienst noch erstellt wird, dass der OpenSCManager fehlschlägt. –
Installieren Sie die Software selbst? Warum nicht einen Registrierungsschlüssel erstellen, der Ihnen sagt, ob er installiert ist oder nicht? Ich glaube nicht, dass Sie nach speziell installierten suchen können. Sie können versuchen, den Dienst mit "OpenService" zu öffnen, und wenn dies fehlschlägt, ist dies ein Anzeichen dafür, dass der Dienst nicht installiert ist, aber auch bedeutet, dass er nicht korrekt konfiguriert ist. – RedX