Я пишу приложение C, которое создает службу Windows. Я хочу проверить, установлена ли служба, прежде чем пытаться вызвать функцию установки, но мне не удается найти, как ее проверить.Проверьте, установлены ли службы с помощью C
Я написал код, чтобы попробовать:
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;
}
Но этот код не обнаружить, если услуга еще существует или нет. У кого-то есть идея, какую функцию вызывать? Я нашел много сообщений об этом, но не в C, только в C# или VB.
спасибо.
Что неисправного? Это вызов «OpenSCManager» или вызов «GetServiceKeyName»? – ChrisF
Кажется, только когда служба все еще создана, сбой OpenSCManager. –
Вы сами устанавливаете программное обеспечение? Почему бы не создать раздел реестра, который говорит вам, установлен ли он или нет? Я не думаю, что вы можете запросить установку специально. Вы можете попробовать открыть службу с помощью «OpenService», и если это не удается, это индикатор того, что служба не установлена, но также может означать, что она настроена неправильно. – RedX