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