在C++(Windows)中调用一个exe

3

我正在使用VS2010,想要调用在另一个目录中创建的exe文件。我尝试了以下方法:

int main(){

 system("C:\\Users\\Li\\Desktop\\Debug\\modelExample_4pcs.exe");     
     return 0;
};

但是我遇到了“系统找不到指定的文件”错误。我尝试从命令行直接运行exe文件,只有当我在其目录内时才能正常工作。请问如何从不同的目录运行它?(我正在使用win7)谢谢,Li。

4
ه°‌试ن½؟用SetCurrentDirectoryA("C:\\Users\\Li\\Desktop\\Debug"),然هگژو‰§è،Œsystem("modelExample_4pcs.exe")م€‚请و³¨و„ڈ,systemه‡½و•°çڑ„ه®‍çژ°و–¹ه¼ڈه› ç³»ç»ں而ه¼‚م€‚ - dirkgently
如果你已经尝试过在命令行中运行,但只有在当前目录下才能正常工作,那么这可能意味着你正在使用错误的绝对或相对路径。 - Martin York
9个回答

5

3

尝试打开文件以进行阅读,只是为了检查您是否有正确的路径:

char* filename = "C:\\Users\\Li\\Desktop\\Debug\\modelExample_4pcs.exe" ;
FILE* fp = fopen (filename, "rb") ; // Open for reading, binayr mode
if (fp == 0) {
  printf ("Duh! File not found\n") ;
  exit (0) ;
  }
printf ("File found\n") ;
fclose (fp) ;

// Now try the system call, as before:
system(filename);

发生了什么?


2
您应该能够像这样使用ShellExecute:(根据您的情况调整发送到ShellExecute的参数)http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx?ppud=4
HINSTANCE hinst = ShellExecute( NULL, _T("open"), commandLine.c_str(), additionalParams.c_str(), NULL, SW_RESTORE );

if(hinst <= (HINSTANCE)SHELLEXERROR)// see: http://msdn2.microsoft.com/en-us/library/bb762153.aspx for further info on the return values

现在假设你正在使用Win7,你可能会遇到权限问题,需要以提升的权限(即管理员)运行,你可以通过以管理员身份打开cmd并从另一个目录运行exe来测试。

正如Steve上面提到的,你当然可以使用CreateProcess。

希望对你有所帮助,

EB


1

System()可能无法找到cmd.exe来打开您的环境。 尝试使用cmd.exe通过/C选项来执行您的应用程序。

System("C:\\WINDOWS\\system32\cmd.exe /C \"C:\\Users\\Li\\Desktop\\Debug\\modelExample_4pcs.exe\"");

-1,缺少CMD.EXE的故障模式已记录。引用微软的话,“如果找不到命令解释器,则返回0并将'errno'设置为'ENOENT'。”报告的错误“系统找不到指定的文件”是不同的。 - MSalters

1

0

请检查您的路径,并确保转义所有字符:C:\\Users\Li..


我的路径没问题。我已经按原样复制并从命令提示符中进入它了。我只是无法运行exe文件。 - user429400

0

错误来自于运行主程序,而不是启动modelExample_4pcs.exe吗?尝试注释掉system()调用,看看是否会出现相同的错误。

当您在其文件夹外部时,主程序不在路径上...


错误来自我的主程序。我只是想从一个程序中调用另一个程序... 有其他的方法可以做到这一点吗? - user429400

0
modelExample_4pcs.exe 是不是试图从当前工作文件夹加载另一个文件,而这就是产生错误的原因?
在调用 system() 之前,可以尝试使用 chdir()。

0

首先要切换到目录,就像你在命令提示符下执行的那样:

system("C: && CD \\Users\\Li\\Desktop\\Debug\\ && modelExample_4pcs.exe"); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接