我有一个简单的程序,只是一个空的 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 已满