2012-02-24 112 views
1

我想从C++程序运行一个可执行文件。我已查找并找到2个选项:
system(“C:\ filepath \ file.exe”); ShellExecute(GetDesktopWindow(),“open”,“C:\ filepath \ file.exe”,NULL,NULL,SW_SHOWNORMAL);
一切都很美,除非它不起作用。
对于第一个选项,除了windows.h,我还必须包含cstdlib,否则我的代码不会生成。
当我运行程序时,我得到的错误:
“的file.exe”不被识别为一个内部或外部命令
我已经设置了公共语言运行库支持(/ CLR)选项为我的项目(和我还必须为运行时库设置多线程调试DLL(/ MDd)选项,否则将不会生成)。
即使包含两个库,第二个选项也不会生成。我得到错误:
错误C3861:“ShellExecute的”:标识符找不到

我使用的Windows7上VS2010 - 并希望这对多平台的工作...
C++执行外部进程

我要求太多了?
谢谢。

+0

如果您希望这是多平台,则不能使用特定于Windows的ShellExecute。你的'system'命令是正确的。这听起来像你给它一个不正确的道路。 – Borealid 2012-02-24 23:14:08

+0

尝试在'system()'的字符串参数中转义反斜杠:'system(“C:\\ filepath \\ file.exe”);'。机会是你的第一个代码片段将按预期工作。 – 2012-02-24 23:15:25

+0

我确实逃过了\\,而我的路径是正确的 – Thalia 2012-02-24 23:19:44

回答

1

请注意,我在我的问题说:我已经设置了共同语言运行时支持(/ clr)选项。我这样做是因为之前的错误提示它。
只要我删除该选项,我就能够运行可执行文件。也许非托管代码必须保持非托管...

1

你需要替换双反斜杠反斜杠你,否则编译器将它们解释为转义序列:

system("C:\\filepath\\file.exe"); 

关于ShellExecute,你需要包括Shellapi.h以及WINDOWS.H,而你不知道不需要设置/clr标志。 ShellExecute是Windows API的一部分,因此它不适用于其他平台。

+0

我确实逃过了\\ – Thalia 2012-02-24 23:20:11

+0

@ user1217150您确定您的文件存在并且是您说过的地方吗? – spencercw 2012-02-24 23:22:20

+0

包括Shellapi.h之后 - Build就有趣了。在从INSIDE Shellapi.h中列出一些错误之后,我甚至得到了以下内容:“致命错误C1003:错误计数超过100;停止编译”。我不认为这个程序喜欢我。 – Thalia 2012-02-24 23:25:25

2

When I run the program, I get the error: "file.exe" is not recognized as an internal or external command

如果我开始了在的file.exe这是一个命令行提示符和类型是什么,我得到:

Microsoft Windows [Version 6.1.7100] 
Copyright (c) 2009 Microsoft Corporation. All rights reserved. 

C:\>file.exe 
'file.exe' is not recognized as an internal or external command, 
operable program or batch file. 

C:\>