2016-08-17 14 views
0

windows devconを使用しているドライバを無効にして有効にするバッチファイルがあります。 このバッチファイルをダブルクリックすると、うまく動作します。 enter image description hereバッチは正常に動作しますが、 "windows can not find devcon.exe"はC#プログラムで

: はしかし、私はこのラインを使って書いたC#のプログラムから実行しようとした:それはdevcon.exeを開こうと、私は次のメッセージを取得するまで

System.Diagnostics.Process.Start("C:/*path to file*/file.bat"); 

それが正常に動作しますその後はスムーズに動作し続ける。

なぜC#プログラムではうまくいかないのですか?私が原因IPの問題のためにバッチコードを投稿することはできません

PS ...

+0

バッチコード、その唯一のテキストを貼り付けることができました...しかし、devcon_64.exeのように聞こえません... – BugFinder

+0

はい、それはバッチが外で実行されないC#であるが、それは.. – noamgot

+0

あなたがどこでどのようにコードが実行されるかによって異なります。あなたはそれがまだではないかもしれないと説明しました.. – BugFinder

答えて

0

OK、研究の少し後に、私はこの単純な解決策が見つかりました: は、単にdevcon.exeのディレクトリに変更することをすなわち、バッチコードの先頭に(cdコマンドを使用して):

cd "C:/*path to the directory of devcon.exe*" 
#rest of the code 
2

問題がある - として、多くの場合 - 「作業ディレクトリ」。エクスプローラで何かをダブルクリックすると、作業ディレクトリは現在のフォルダに設定されるので、バッチファイルの観点から見ると、現在のディレクトリは独自のディレクトリです。

C#アプリケーションを実行すると、通常、作業ディレクトリはアプリケーションのexeファイルのディレクトリですが、必ずしもそうである必要はありません(たとえば、アプリケーションがリンクを使用して実行されている場合は、別の作業ディレクトリを指定できます)。そのため、アプリケーションEXEファイルのディレクトリを見つけるには、GetCurrentDirectoryを使用しないでください。

だから、アプリケーションはバッチファイルを実行しますが、バッチファイルのディレクトリではなくアプリケーションのディレクトリを作業ディレクトリとして実行します。バッチファイル内の明示的なcdに代わる方法は、Process.Startを呼び出すときに作業ディレクトリを指定することです。

+0

の下に書くつもり!どのように作業ディレクトリを正確に指定しますか? – noamgot

+0

'ProcessStartInfo'クラスのインスタンスを' Process.Start'メソッドのパラメータとして使用することにより、 'WorkingDirectory'プロパティに有効な値を指定します。 –

関連する問題