.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. Когда вы порождаете процесс из другого процесса, я считаю, что его рабочий каталог будет унаследован от вашего процесса, если вы явно не укажете другой. Поэтому он может искать некоторые ресурсы в рабочем каталоге и не работать, потому что он запускается с рабочим каталогом вашего процесса.

Другие вопросы по тегам