Proses .NET. Mulai direktori default?


114

Saya menjalankan aplikasi Java dari dalam C # .NET aplikasi konsol . Ini berfungsi dengan baik untuk kasus di mana aplikasi Java tidak peduli apa direktori "default", tetapi gagal untuk aplikasi Java yang hanya mencari direktori saat ini untuk file dukungan.

Apakah ada parameter proses yang dapat disetel untuk menentukan direktori default tempat proses dimulai?

Jawaban:


183

Iya! ProcessStartInfo Memiliki properti bernama WorkingDirectory , cukup gunakan:

...
using System.Diagnostics;
...

var startInfo = new ProcessStartInfo();

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

Process proc = Process.Start(startInfo);

Bisakah WorkingDirectorypath tersebut menjadi path relatif, dan jika demikian, apakah itu relatif terhadap, file saat ini atau direktori dari executable saat ini? Saya kesulitan mendapatkan program saya untuk menemukan executable yang saya coba mulai. Saya telah mengatur direktori kerja ke direktori exe (relatif terhadap file saat ini dan ke exe saat ini), tetapi tidak dapat menemukannya.
pushkin

56

Gunakan ProcessStartInfo.WorkingDirectory properti untuk menyetelnya sebelum memulai proses. Jika properti tidak disetel, direktori kerja default adalah% SYSTEMROOT% \ system32.

Anda dapat menentukan nilai% SYSTEMROOT% dengan menggunakan:

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

Berikut adalah beberapa contoh kode yang membuka Notepad.exe dengan direktori kerja% ProgramFiles%:

...
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);

Ada juga variabel Lingkungan yang mengontrol direktori kerja saat ini untuk proses Anda yang dapat Anda akses langsung melalui properti Environment.CurrentDirectory .


Bagus, saya tidak tahu Anda bisa menggunakan variabel lingkungan di properti .WorkingDirectory.
Brain2000

1
Bingo, itulah jawabannya - direktori default adalah SYSTEMROOT. +1
ashes999

17

Hanya sebuah catatan setelah membentur kepala saya mencoba menerapkan ini. Menyetel nilai WorkingDirectory tidak berfungsi jika Anda menyetel "UseShellExecute" ke false.


1
Ini tidak memberikan jawaban atas pertanyaan tersebut. Untuk mengkritik atau meminta klarifikasi dari seorang penulis, tinggalkan komentar di bawah kiriman mereka - Anda selalu dapat mengomentari kiriman Anda sendiri, dan setelah Anda memiliki reputasi yang memadai, Anda akan dapat mengomentari kiriman apa pun .
Cyclonecode

1
Bahkan 6 tahun kemudian, komentar tentang UseShellExecute ini sangat membantu. Memperbaiki masalah.
AlanC


6

Metode Process.Start memiliki kelebihan beban yang mengambil contoh ProcessStartInfo. Kelas ini memiliki properti yang disebut "WorkingDirectory".

Setel properti itu ke folder yang ingin Anda gunakan dan itu akan membuatnya dimulai di folder yang benar.


4

Gunakan ProcessStartInfokelas dan berikan nilai pada WorkingDirectoryproperti.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.