私はWindowsサービスを作成するCアプリケーションを作成しています。インストール機能を呼び出す前にサービスがインストールされているかどうか確認したいが、チェックする方法は見つけられない。サービスが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