2012-02-24 50 views
1

C++プログラムから実行可能ファイルを実行しようとしています。私は見て2つのオプションが見つかりました:
システム( "C:\ filepath \ file.exe");
および
ShellExecute(GetDesktopWindow()、 "open"、 "C:\ filepath \ file.exe"、NULL、NULL、SW_SHOWNORMAL);
動作しない点を除き、すべて美しいです。
最初のオプションはwindows.hとは別にcstdlibも含めなければなりません。さもなければ私のコードはビルドされませんでした。

"file.exe"が内部または外部コマンドとして認識されない
私のプロジェクトに共通言語ランタイムサポート(/ clr)オプションを設定しました。また、ランタイムライブラリのオプションMulti-threaded Debug DLL(/ MDd)を設定しなければなりませんでした。そうしないと、ビルドできませんでした。
2つ目のオプションは、両方のライブラリが含まれていてもビルドされません。私はエラーを取得する:
エラーC3861:「ShellExecuteを」:識別子が

を発見していない私は、のWindows7にVS2010を使用しています - これはマルチプラットフォームで動作するようにしたいと思い...
C++外部プロセスの実行

は、私はあまりにも多くを求めていますか?
ありがとうございます。

+0

これをマルチプラットフォームにしたい場合は、Windows固有の 'ShellExecute'を使うことはできません。あなたの 'system'コマンドは正しいです。あなたはそれに不正なパスを与えたように聞こえます。 – Borealid

+0

文字列引数のバックスラッシュを 'system()': 'system(" C:\\ filepath \\ file.exe ");'にエスケープしてみてください。最初のコードスニペットが期待どおりに機能する可能性があります。 –

+0

私は\\をエスケープしていましたが、私のパスは正しいです – Thalia

答えて

1

注:私は共通言語を設定していますランタイムサポート(/ clr)オプション私は以前のエラーがそれを示唆したためにそれをしました。
このオプションを削除すると、実行可能ファイルを実行することができました。おそらく、アンマネージコードはアンマネージドのままでなければなりません。

1

あなたがそうでなければ、コンパイラはエスケープシーケンスとしてそれらを解釈し、二重のバックスラッシュを使用してバックスラッシュを交換する必要があります。

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

ShellExecuteについて、あなたはShellapi.hなどはWindows.h、あなたドンを含める必要が/clrフラグを設定する必要はありません。 ShellExecuteはWindows APIの一部ですので、他のプラットフォームでは動作しません。

+0

私は\\ – Thalia

+0

@ user1217150をエスケープしましたあなたのファイルは存在していると言いましたか? – spencercw

+0

Shellapi.hを組み込んだ後、ビルドが面白くなった。 INSIDE Shellapi.hからいくつかのエラーをリストした後、私は次のようなこともしています。 "致命的なエラーC1003:エラー数が100を超え、コンパイルを中止しました"。私はこのプログラムが私を好きだとは思わない。 – Thalia

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:\> 
関連する問題