如何使用createProcess()启动dx app

时间:2013-12-30 09:02:09

标签: c++ process directx

使用此代码段:

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示例应用

1 个答案:

答案 0 :(得分:0)

要将simplesample.exe的目录传递到CreateProcess()lpCurrentDirectory参数。可能这个程序在当前文件夹中搜索资产,着色器或DLL,但是接收调用进程的目录,因此无法找到它们。

来自docs

  

lpCurrentDirectory [in,optional]

     

进程当前目录的完整路径。该字符串还可以指定UNC路径。

     

如果此参数为NULL,则新进程将具有与调用进程相同的当前驱动器和目录。 (此功能是   主要为需要启动应用程序的shell提供   指定其初始驱动器和工作目录。)