我希望用c ++创建一个Windows服务,以便每次用户登录时都以管理员身份启动我的程序,而不会弹出UAC窗口
因为这是我第一次这样做,所以我从这里使用了这个项目: https://code.msdn.microsoft.com/windowsapps/CppWindowsService-cacf4948/view/SourceCode
我在CppWindowsService.cpp中编辑了第74行:
InstallService(
SERVICE_NAME, // Name of service
SERVICE_DISPLAY_NAME, // Name to display
SERVICE_AUTO_START, // Service start type
SERVICE_DEPENDENCIES, // Dependencies
0, // Service running account
SERVICE_PASSWORD // Password of the account
);
并在SampleService.cpp第101行的工作线程中添加了一些代码,如下所示:
void CSampleService::ServiceWorkerThread(void)
{
// Periodically check if the service is stopping.
while (!m_fStopping)
{
// Perform main service function here...
HANDLE hToken = NULL, dToken;
WTSQueryUserToken(WTSGetActiveConsoleSessionId(), &hToken);
DuplicateTokenEx(hToken, MAXIMUM_ALLOWED, 0, SecurityIdentification, TokenPrimary, &dToken);
STARTUPINFO stinfo = { 0 };
PROCESS_INFORMATION pinfo = { 0 };
stinfo.cb = sizeof(stinfo);
stinfo.lpDesktop = L"winsta0\\default";
LPVOID pEnv = 0;
CreateEnvironmentBlock(&pEnv, dToken, 0);
CreateProcessAsUserW(dToken, L"F:\\test.exe",0, 0, 0, 0,CREATE_NEW_CONSOLE, pEnv, 0, &stinfo, &pinfo);
::Sleep(2000); // Simulate some lengthy operations.
}
// Signal the stopped event.
SetEvent(m_hStoppedEvent);
}
位于F盘中的test.exe显示一个消息框,但是当我尝试从服务运行它时,虽然我可以轻松地使用CreateProcess从普通程序执行它,但没有任何事情发生
编辑:我也尝试在CreateProcessAsUser中放置命令行,但没有任何反应
答案 0 :(得分:0)
我在函数中使用CREATE_UNICODE_ENVIRONMENT作为创建标志,问题解决了