chr*_*xor 4 c++ winapi windows-services
我有一个程序,可以作为简单的控制台应用程序运行,也可以注册为 Windows 服务。我想在main()函数中检测当前运行上下文:
#include <windows.h>
BOOL IsWindowsService()
{
???
}
int main(int argc, char** argv)
{
if (IsWindowsService())
{
// Running as Windows Service...
RunService();
return;
}
// Running as console application...
return 0;
}
Run Code Online (Sandbox Code Playgroud)
主要用例是拥有一个 exe 文件,可以使用“--install”和“--start”参数作为 Windows 服务安装和运行,或者在控制台模式下不带任何参数执行(例如从 VS 调试器)。
你能帮我实现一个可能的IsWindowsService()功能吗?
int __stdcall wWinMain(HINSTANCE, HINSTANCE, LPWSTR, int)
{
SERVICE_TABLE_ENTRY ServiceTable[] =
{
{ SERVICE_NAME,(LPSERVICE_MAIN_FUNCTION)ServiceMain },
{ NULL,NULL }
};
if (StartServiceCtrlDispatcher(ServiceTable))
//service
else app; // last error ERROR_FAILED_SERVICE_CONTROLLER_CONNECT
}
VOID WINAPI ServiceMain(DWORD argc, LPTSTR *argv)
{...}
Run Code Online (Sandbox Code Playgroud)
文档https://learn.microsoft.com/en-us/windows/desktop/api/winsvc/nf-winsvc-startservicectrldispatchera
| 归档时间: |
|
| 查看次数: |
2044 次 |
| 最近记录: |