0

我有一个简单的程序,只是一个空的 GUI,它通过以下方式从 SYSTEM 服务(我的)启动:

    DWORD creationFlags = CREATE_NEW_PROCESS_GROUP | CREATE_UNICODE_ENVIRONMENT | DETACHED_PROCESS | EXTENDED_STARTUPINFO_PRESENT;

    auto returnCode = ::CreateProcessAsUser(
        *m_userToken,
        nullptr,
        LPWSTR(commandLineUtf16),
        nullptr,
        nullptr,
        FALSE, // lets not inherit any handles from the service!
        creationFlags,
        environmentBuffer,
        LPWSTR(effectiveWorkingDirectory.utf16()),
        reinterpret_cast<LPSTARTUPINFO>(&startupInfo),
        &processInformation
    );

如果程序的清单有一个requestedExecutionLevel="asInvoker"一切都很好。它可以从管理员和非管理员用户启动。否则,如果不是“asInvoker”,则CreateProcessAsUser(...)返回 FALSE 并且GetLastError()为 0。

我完全被困住了。如果没有错误,为什么会失败?如果我直接运行程序,它总是可以工作(管理员、非管理员、asInvoker、requireAdministrator ...)。

如何找到失败的原因?

在 Windows 10 企业评估版 64 位 VM 上运行,UAC 已满

4

0 回答 0