2017-04-01 19 views
0

私はコードから小さな実行ファイルを実行しようとしていますが、かなり成功しています。メインディレクトリ(および必要なファイル)に.exeを置くとうまくいきます。しかし、それはすでにいくつかのファイルがあるので、非常に乱雑です。私はShellExecutesystem("")などCreateProcess()を使用してみましたがプログラム内からexeを実行する

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

これは中、私はそれをしたいディレクトリです。私が正確なファイルパスを入力しようとするたびに失敗します。 ./ModelLoader.exeModelLoader.exe、さらには./Models/ModelLoader.exeの場合も同じです。

かなり迷惑になりつつあります。私の研究では、system()は行く方法ではないと言われましたが、これは私にとっては単なる学習体験なので、セキュリティやランタイムに100%関心がありません。私はちょうど今働いているものを手に入れたいです。

編集: 現在、私はすべてをコメントしました。これだけが実行されています。失敗すると、プログラムは実行されますが、実行ファイルは実行されません。実行可能ファイルは100%動作します。それを何度も確認しました。だからそれは問題ではありません。

+3

*「失敗します」* - あなたはエラー(どちらか)を取得しますか、プログラムがクラッシュしますか?また、試した実際のコードを提供してください – UnholySheep

+0

デフォルトでは、 'system()'や 'CreateProcess()'を使って実行されるプログラムは親プログラムのような環境にあります(同じ環境変数、同じ作業ディレクトリなど)。スポーンされたプログラムのニーズに合わせて環境を設定する必要があります。 'system()'では、 'system()'を呼び出す前にそれを行う必要があります。 'CreateProcess()'にはいくつかのオプションがありますが、それらを使う必要があります。また、この質問は実際にはC++ではなくWindowsプログラミングに関する質問です。 – Peter

+1

完全なパスに空白があります。 *コマンドラインを期待する関数*にプロセスパスを渡すときは、プロセスパスを引用する必要があります。 E. 'system()'または 'CreateProcess()'パラメータ 'lpCommandLine'です。プロセスパスを 'ShellExecute()'パラメータ 'lpFile'に渡すと、引用符は必要ありません。 – zett42

答えて

-1

お試しSetCurrentDirectory実行可能ファイルがローカルファイルに依存する場合は、ホストプログラムが実行されている現在の作業ディレクトリで実行ファイルを探します。作業ディレクトリを変更すると、実行中の新しいプログラムがそのローカルファイルを検索できます。

+0

誰があなたに下投票をしたか分からないが、これは完全に機能していた。私はそれがシンプルで、ポイントまで+1しています。私はこれを100倍も簡単にすることができましたが、私は挑戦したがっていました。私は助けに感謝します! – abyssmu

+0

それはあなたのために働く場合は、答えとしてそれを受け入れることができますか? – Jay

関連する問題