使用此代码段:
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
char szExe[] = "C:\\Apps\\Desktop\\Release\\simplesample.exe";
//char szExe[] = "C:\\Windows\\System32\\notepad.exe";
if(CreateProcess(0, szExe, 0, 0, 0, 0, 0, 0, &si, &pi))
{
// optionally wait for process to finish
WaitForSingleObject(pi.hThread, 0);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
return 0;
当我使用notepad.exe时,记事本会启动。
但是,当我使用simplesample.exe的路径时,它会立即启动simplesample并崩溃。我无法理解为什么simplesample无法从createProcess正确启动。
我可以按命令从命令提示符启动simplesample.exe。
PS:Simplesample
是使用winmain的dx示例应用
答案 0 :(得分:0)
要将simplesample.exe
的目录传递到CreateProcess()
的lpCurrentDirectory
参数。可能这个程序在当前文件夹中搜索资产,着色器或DLL,但是接收调用进程的目录,因此无法找到它们。
来自docs:
lpCurrentDirectory [in,optional]
进程当前目录的完整路径。该字符串还可以指定UNC路径。
如果此参数为NULL,则新进程将具有与调用进程相同的当前驱动器和目录。 (此功能是 主要为需要启动应用程序的shell提供 指定其初始驱动器和工作目录。)