.NET Process.Varsayılan dizin başlatılsın mı?


114

Bir C # .NET konsol uygulamasının içinden bir Java uygulamasını çalıştırıyorum. Java uygulamasının "varsayılan" dizinin ne olduğunu umursamadığı, ancak destek dosyaları için yalnızca geçerli dizinde arama yapan bir Java uygulamasında başarısız olduğu durumlarda iyi çalışır.

Bir işlemin başlatıldığı varsayılan dizini belirtmek için ayarlanabilen bir işlem parametresi var mı?

Yanıtlar:


183

Evet! ProcessStartInfo WorkingDirectory adlı bir özelliğe sahiptir , sadece şunu kullanın:

...
using System.Diagnostics;
...

var startInfo = new ProcessStartInfo();

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

Process proc = Process.Start(startInfo);

Can WorkingDirectorygöreli bir yol olabilir ve eğer öyleyse, o, göreli geçerli dosya veya geçerli yürütülebilir dizin nedir? Programımı başlatmaya çalıştığım yürütülebilir dosyayı bulmada sorun yaşıyorum. Çalışma dizinini exe dizinine (mevcut dosyaya ve mevcut exe'ye göre) ayarladım, ancak bulamıyor.
pushkin

56

İşlemi başlatmadan önce ayarlamak için ProcessStartInfo.WorkingDirectory özelliğini kullanın . Özellik ayarlanmamışsa, varsayılan çalışma dizini% SYSTEMROOT% \ system32'dir.

Şunları kullanarak% SYSTEMROOT% değerini belirleyebilirsiniz:

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

Notepad.exe'yi% ProgramFiles% çalışma diziniyle açan bazı örnek kodlar:

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

Ayrıca, Environment.CurrentDirectory özelliği aracılığıyla doğrudan erişebileceğiniz, işleminiz için geçerli çalışma dizinini kontrol eden bir Ortam değişkeni vardır .


Güzel, .WorkingDirectory özelliğinde ortam değişkenlerini kullanabileceğinizi bilmiyordum.
Brain2000

1
Bingo, cevap bu - varsayılan dizin SYSTEMROOT'tur. +1
ashes999

17

Bunu uygulamaya çalışırken kafama vurduktan sonra sadece bir not. "UseShellExecute" değeri false olarak ayarlanmışsa, WorkingDirectory değerini ayarlamak çalışmaz.


1
Bu soruya bir cevap vermiyor. Bir yazardan eleştiri yapmak veya açıklama istemek için, gönderisinin altına bir yorum bırakın - kendi gönderilerinize her zaman yorum yapabilirsiniz ve yeterli itibara sahip olduğunuzda herhangi bir gönderi hakkında yorum yapabilirsiniz .
Cyclonecode

1
6 yıl sonra bile, UseShellExecute hakkındaki bu yorum yardımcı oldu. Sorun düzeltildi.
AlanC


6

Process.Start yöntemi, ProcessStartInfo örneğini alan bir aşırı yüklemeye sahiptir. Bu sınıfın "WorkingDirectory" adlı bir özelliği vardır.

Bu özelliği kullanmak istediğiniz klasöre ayarlayın ve bu, doğru klasörde başlatılmasını sağlamalıdır.


4

ProcessStartInfoSınıfı kullanın ve WorkingDirectoryözelliğe bir değer atayın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.