【发布时间】:2009-07-11 16:08:22
【问题描述】:
我需要在下载更新后重新启动我正在处理的程序,除非我遇到了一些问题。
如果我使用 CreateProcess 没有任何反应,如果我使用 ShellExecute 我会收到 0xC0150002 错误,如果我使用带有命令“runas”的 ShellExecute 它工作正常。我可以使用 CreateProcess 和 ShellExecute 很好地启动命令提示符,只是再次使用不同的 exe,并且不想使用 runas,因为这会提升 exe。
有什么想法吗?
Windows 7、Visual Studio 2008 C++
alt text http://lodle.net/shell_error.jpg
创建过程:
char exePath[255];
GetModuleFileName(NULL, exePath, 255);
size_t exePathLen = strlen(exePath);
for (size_t x=exePathLen; x>0; x--)
{
if (exePath[x] == '\\')
break;
else
exePath[x] = '\0';
}
char name[255];
GetModuleFileName(NULL, name, 255);
PROCESS_INFORMATION ProcInfo = {0};
STARTUPINFO StartupInfo = {0};
BOOL res = CreateProcess(name, "-wait", NULL, NULL, false, 0, NULL, exePath, &StartupInfo, &ProcInfo );
Shell 执行:
char exePath[255];
GetModuleFileName(NULL, exePath, 255);
size_t exePathLen = strlen(exePath);
for (size_t x=exePathLen; x>0; x--)
{
if (exePath[x] == '\\')
break;
else
exePath[x] = '\0';
}
char name[255];
GetModuleFileName(NULL, name, 255);
INT_PTR r = (INT_PTR)ShellExecute(NULL, "runas", name, "-wait", exePath, SW_SHOW);
【问题讨论】: