2017-04-01 100 views
0

我一直在尝试从我的代码中运行一个很小的可执行文件,其成功率几乎为0。如果我将.exe放在主目录(以及它需要的文件)中,它确实很好。但是这很麻烦,因为那里已经有好几个文件了。从程序内运行exe

这是我想它的目录:

C:\\Users\\Alex\\Desktop\\GSP381 iLab\\GSP381 iLab\\Models\\ModelLoader.exe 

我一直在使用ShellExecutesystem("")以及CreateProcess()尝试。每次我尝试将确切的文件路径放入时,都会失败。 ./ModelLoader.exeModelLoader.exe,甚至./Models/ModelLoader.exe也是如此。

它变得很烦人。我的研究告诉我,system()不是要走的路,但我对安全性或运行时100%毫不关心,因为这对我来说只是一种学习体验。我只想得到一些现在可以运作的东西。

编辑: 目前我刚刚评论过所有的东西。它只运行这个。至于失败,程序运行,但可执行文件不。可执行文件100%有效。经过多次验证。所以这不是问题。

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pScmdline, int iCmdshow) 
    { 
     system("ModelLoader.exe"); 
    } 
+3

定义*“它失败”* - 你有错误(哪一个),你的程序崩溃了,...?还提供了您尝试的实际代码 – UnholySheep

+0

默认情况下,使用'system()'或'CreateProcess()'执行的程序位于父程序(相同环境变量,相同工作目录等)的环境中。您需要设置环境以适应生成的程序的需求。用'system()',你需要在调用'system()'之前做到这一点。 'CreateProcess()'提供了一些影响的选项,但是你必须使用它们。另外,这个问题实际上是一个Windows编程问题,而不是C++。 – Peter

+1

您的完整路径中有空格。当您将它传递给任何需要*命令行*的函数时,您需要引用进程路径。例如, 'system()'或'CreateProcess()'参数'lpCommandLine'。当你将进程路径传递给'ShellExecute()'参数'lpFile'时,你不需要引号。 – zett42

回答

-1

尝试SetCurrentDirectory。如果可执行文件依赖于本地文件,那么它将在当前工作目录中查找它们,在该目录中执行主机程序。更改工作目录允许新运行的程序在那里搜索其本地文件。

+0

不知道是谁给了你们倒票,但是这完全奏效了。从我+1,因为它很简单,重点。我可以通过100x容易的方式解决这个问题,但我想要这个挑战。我感谢帮助! – abyssmu

+0

如果它适合你,你能接受它作为答案吗? – Jay