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