CreateProcessAsUser在Windows服务中不起作用

时间:2018-04-16 03:00:31

标签: c++ windows winapi service

我希望用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中放置命令行,但没有任何反应

1 个答案:

答案 0 :(得分:0)

我在函数中使用CREATE_UNICODE_ENVIRONMENT作为创建标志,问题解决了