.NET Process.Start diretório padrão?


114

Estou disparando um aplicativo Java de dentro de um aplicativo de console C # .NET . Funciona bem para o caso em que o aplicativo Java não se importa com o diretório "padrão", mas falha para um aplicativo Java que procura apenas arquivos de suporte no diretório atual.

Existe um parâmetro de processo que pode ser definido para especificar o diretório padrão em que um processo é iniciado?

Respostas:


183

Sim! ProcessStartInfo Tem uma propriedade chamada WorkingDirectory , basta usar:

...
using System.Diagnostics;
...

var startInfo = new ProcessStartInfo();

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

Process proc = Process.Start(startInfo);

Pode WorkingDirectoryser um caminho relativo e, em caso afirmativo, a que é relativo, o arquivo atual ou o diretório do executável atual? Estou tendo problemas para fazer meu programa localizar o executável que estou tentando iniciar. Eu configurei o diretório de trabalho para o diretório do exe (relativo ao arquivo atual e ao exe atual), mas não consigo encontrá-lo.
pushkin de

56

Use a propriedade ProcessStartInfo.WorkingDirectory para defini-la antes de iniciar o processo. Se a propriedade não for definida, o diretório de trabalho padrão é% SYSTEMROOT% \ system32.

Você pode determinar o valor de% SYSTEMROOT% usando:

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

Aqui está um exemplo de código que abre o Notepad.exe com um diretório de trabalho de% 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);

Também existe uma variável de ambiente que controla o diretório de trabalho atual para o seu processo, que você pode acessar diretamente por meio da propriedade Environment.CurrentDirectory .


Legal, eu não sabia que você poderia usar variáveis ​​de ambiente na propriedade .WorkingDirectory.
Brain2000,

1
Bingo, essa é a resposta - o diretório padrão é SYSTEMROOT. +1
cinzas999

17

Apenas uma nota depois de bater na minha cabeça tentando implementar isso. Definir o valor WorkingDirectory não funciona se você tiver "UseShellExecute" definido como false.


1
Isso não fornece uma resposta para a pergunta. Para criticar ou solicitar esclarecimentos de um autor, deixe um comentário abaixo de sua postagem - você sempre pode comentar suas próprias postagens e, assim que tiver reputação suficiente , poderá comentar qualquer postagem .
Cyclonecode

1
Mesmo 6 anos depois, este comentário sobre UseShellExecute foi útil. Corrigido o problema.
AlanC


6

O método Process.Start tem uma sobrecarga que leva uma instância de ProcessStartInfo. Esta classe possui uma propriedade chamada "WorkingDirectory".

Defina essa propriedade para a pasta que deseja usar e isso deve fazer com que ela seja inicializada na pasta correta.


4

Use a ProcessStartInfoclasse e atribua um valor à WorkingDirectorypropriedade.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.