我有一个aaa.exe为NT的Service程序,服务名为aaa, 我要实现:1、以Service运行的时候显示“Service” 即:执行net start aaa
2、以Application运行的时候显示“Application”,即执行c:\>aaa.exe目前我有两种方法实现:1、判断aaa.exe的父进程是否为services.exe, 是则为从service启动运行的,否则就是以application方式启动运行的,但感觉比较麻烦。
2、在WinMain函数执行StartServiceCtrlDispatcher,成功则为service方式,失败则为application方式,但此过程要延迟30秒,令人难以忍受。现在请大家讨论一下更简单的实现方法?
2、以Application运行的时候显示“Application”,即执行c:\>aaa.exe目前我有两种方法实现:1、判断aaa.exe的父进程是否为services.exe, 是则为从service启动运行的,否则就是以application方式启动运行的,但感觉比较麻烦。
2、在WinMain函数执行StartServiceCtrlDispatcher,成功则为service方式,失败则为application方式,但此过程要延迟30秒,令人难以忍受。现在请大家讨论一下更简单的实现方法?
...
if(_Module.m_bService)
{
OutputDebugString("m_bService");
}
else
{
OutputDebugString("!m_bService");
}
_Module.Start();
...
main() for application
ServiceMain for service
就不用判断了
CreateToolhelp32Snapshot+Process32First+Process32Next
一个循环而已呀
{
char str[1024];
DWORD len;
HANDLE hsavewinsta = GetProcessWindowStation();
if(!hsavewinsta || hsavewinsta == INVALID_HANDLE_VALUE) return 0;
if(!GetUserObjectInformation(hsavewinsta, UOI_NAME, str, sizeof(str), &len)) return 0;
if (strnicmp(str, "Service-", 8) == 0) return 1;
return 0;
}