.NET Process.Start default directory?


114

C#.NETの内部からJavaアプリケーションを起動しますコンソールアプリケーションの起動しています。これは、Javaアプリケーションが「デフォルト」ディレクトリが何であるかを気にしない場合は問題なく動作しますが、現在のディレクトリでサポートファイルのみを検索するJavaアプリケーションでは失敗します。

プロセスが開始されるデフォルトのディレクトリを指定するために設定できるプロセスパラメータはありますか?

回答:


183

はい!ProcessStartInfoには、WorkingDirectoryと呼ばれるプロパティがあります。

...
using System.Diagnostics;
...

var startInfo = new ProcessStartInfo();

  startInfo.WorkingDirectory = // working directory
  // set additional properties 

Process proc = Process.Start(startInfo);

WorkingDirectory相対パスにすることはできますが、そうである場合、現在のファイルまたは現在の実行可能ファイルのディレクトリに対する相対パスは何ですか?プログラムが起動しようとしている実行可能ファイルを見つけるのに問題があります。作業ディレクトリをexeのディレクトリ(現在のファイルと現在のexeに対して)に設定しましたが、見つかりません。
プーシキン2018

56

プロセスを開始する前に、ProcessStartInfo.WorkingDirectoryプロパティを使用して設定します。プロパティが設定されていない場合、デフォルトの作業ディレクトリは%SYSTEMROOT%\ system32です。

%SYSTEMROOT%の値は、以下を使用して決定できます。

string _systemRoot = Environment.GetEnvironmentVariable("SYSTEMROOT");  

以下は、%ProgramFiles%の作業ディレクトリでNotepad.exeを開くサンプルコードです。

...
using System.Diagnostics;
...

ProcessStartInfo _processStartInfo = new ProcessStartInfo();
  _processStartInfo.WorkingDirectory = @"%ProgramFiles%";
  _processStartInfo.FileName         = @"Notepad.exe";
  _processStartInfo.Arguments        = "test.txt";
  _processStartInfo.CreateNoWindow   = true;
Process myProcess = Process.Start(_processStartInfo);

また、Environment.CurrentDirectoryプロパティを介して直接アクセスできる、プロセスの現在の作業ディレクトリを制御するEnvironment変数もあります。


.WorkingDirectoryプロパティで環境変数を使用できることを知りませんでした。
Brain2000、2011

1
ビンゴ、それが答えです-デフォルトのディレクトリはSYSTEMROOTです。+1
灰999

17

これを実装しようとしている私の頭を打った後のちょうどメモ。"UseShellExecute"をfalseに設定している場合、WorkingDirectory値の設定は機能しません。


1
これは質問に対する答えを提供しません。批評したり、著者に説明を要求したりするには、投稿の下にコメントを残します。自分の投稿にはいつでもコメントできます。十分な評判得られれ、どの投稿にもコメントできます。
Cyclonecode 2014

1
6年後でも、UseShellExecuteに関するこのコメントは役に立ちました。問題を修正しました。
AlanC


6

Process.Startメソッドには、ProcessStartInfoのインスタンスを取得するオーバーロードがあります。このクラスには、「WorkingDirectory」というプロパティがあります。

そのプロパティを使用したいフォルダーに設定すると、正しいフォルダーで起動します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.