我一直在尝试从我的代码中运行一个很小的可执行文件,其成功率几乎为0。如果我将.exe放在主目录(以及它需要的文件)中,它确实很好。但是这很麻烦,因为那里已经有好几个文件了。从程序内运行exe
这是我想它的目录:
C:\\Users\\Alex\\Desktop\\GSP381 iLab\\GSP381 iLab\\Models\\ModelLoader.exe
我一直在使用ShellExecute
和system("")
以及CreateProcess()
尝试。每次我尝试将确切的文件路径放入时,都会失败。 ./ModelLoader.exe
,ModelLoader.exe
,甚至./Models/ModelLoader.exe
也是如此。
它变得很烦人。我的研究告诉我,system()
不是要走的路,但我对安全性或运行时100%毫不关心,因为这对我来说只是一种学习体验。我只想得到一些现在可以运作的东西。
编辑: 目前我刚刚评论过所有的东西。它只运行这个。至于失败,程序运行,但可执行文件不。可执行文件100%有效。经过多次验证。所以这不是问题。
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pScmdline, int iCmdshow)
{
system("ModelLoader.exe");
}
定义*“它失败”* - 你有错误(哪一个),你的程序崩溃了,...?还提供了您尝试的实际代码 – UnholySheep
默认情况下,使用'system()'或'CreateProcess()'执行的程序位于父程序(相同环境变量,相同工作目录等)的环境中。您需要设置环境以适应生成的程序的需求。用'system()',你需要在调用'system()'之前做到这一点。 'CreateProcess()'提供了一些影响的选项,但是你必须使用它们。另外,这个问题实际上是一个Windows编程问题,而不是C++。 – Peter
您的完整路径中有空格。当您将它传递给任何需要*命令行*的函数时,您需要引用进程路径。例如, 'system()'或'CreateProcess()'参数'lpCommandLine'。当你将进程路径传递给'ShellExecute()'参数'lpFile'时,你不需要引号。 – zett42