2012-02-24 113 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:\>