【发布时间】:2013-09-05 06:14:00
【问题描述】:
我正在尝试使用我的服务启动 GUI 应用程序。我在 VS2012 上开发了该服务并在 Windows 7 上运行。但是 CreateProcessAsUser 函数即使返回成功也不会启动应用程序。以下是我的代码:
PHANDLE hToken = NULL;
WTSQueryUserToken (WTSGetActiveConsoleSessionId (), hToken) ;
if( !CreateProcessAsUser( hToken,
NULL, // No module name (use command line)
pPath, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi ) // Pointer to PROCESS_INFORMATION structure
)
可能是什么问题?
谢谢, 公里。
【问题讨论】:
-
建议你扩展 sn-p 以显示 hToken、pPath、si 和 pi 是什么
-
当某个系统功能失败时,您应该使用
GetLastError找出问题所在。请参阅here for lists of error codes,了解它们的含义。 -
MSDN 说“注意函数在进程完成初始化之前返回。如果找不到所需的DLL或初始化失败,则终止进程”,这可能值得考虑。
-
WTSQueryUserToken是否成功并为您提供具有所需访问权限的有效令牌? -
你初始化结构了吗?
ZeroMemory(&si, sizeof(si));和ZeroMemory(&pi, sizeof(pi));