.NET Process аварийно завершает работу, но работает из проводника
Я пишу небольшую программу, которая будет использоваться в качестве платформы цифрового распространения для конкретного игрового движка.
Этот игровой движок имеет довольно старые версии, и это, похоже, вызывает проблемы с совместимостью.
Кажется, что запуск конкретной игры работает нормально, если я запускаю ее непосредственно из проводника (то есть, нажимая на исполняемый файл dbl), но если я запускаю ее как процесс изнутри моей программы, он сразу вылетает.
Так в чем же разница между процессом в.NET и просто запуском его из оболочки?
вот мой текущий код:
(Для записи эта версия движка не нуждается в DOSBox, так что это не DOSBOCK, который облажался.)
if (Status == "Ready")
{
System.Diagnostics.Process Proc = new System.Diagnostics.Process();
if (NeedsDosBox)
{
Proc.StartInfo.FileName = String.Format("{0}\\dosbox.exe", Globals.AppDir);
Proc.StartInfo.Arguments = String.Format("{2}\\{0}\\{1}", GameId, Executable, Globals.Gamecache);
}
else
{
Proc.StartInfo.FileName = String.Format("{2}\\{0}\\{1}", GameId, Executable, Globals.Gamecache);
}
Proc.StartInfo.UseShellExecute = true;
Proc.EnableRaisingEvents = true;
Proc.Exited += new EventHandler(Proc_Exited);
Status = "In Game";
Proc.Start();
}
1 ответ
Я предполагаю, что процесс должен быть запущен из определенного рабочего каталога. Когда вы запускаете EXE, дважды щелкнув его в Проводнике, рабочим каталогом является каталог, содержащий EXE. Когда вы порождаете процесс из другого процесса, я считаю, что его рабочий каталог будет унаследован от вашего процесса, если вы явно не укажете другой. Поэтому он может искать некоторые ресурсы в рабочем каталоге и не работать, потому что он запускается с рабочим каталогом вашего процесса.