.NET Process аварийно завершает работу, но работает из проводника - PullRequest
0 голосов
/ 06 декабря 2010

Я пишу небольшую программу, которая будет использоваться в качестве платформы цифрового распространения для конкретного игрового движка.

Этот игровой движок имеет довольно старые версии, и это, похоже, вызывает проблемы с совместимостью.

Запуск определенной игры, кажется, работает нормально, если я запускаю ее непосредственно из проводника (т. Е. Нажимаю на exe), но если я запускаю ее как процесс изнутри моей программы, она сразу вылетает.

Так в чем же разница между процессом в .NET и просто запуском его из оболочки?

Вот мой текущий код:

(Для записи этой версии движка не нужен dosbox, так что это не dosbox, который испортит.)

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 Ответ

4 голосов
/ 06 декабря 2010

Я предполагаю, что процесс должен быть запущен из определенного рабочего каталога.Когда вы запускаете EXE, дважды щелкнув его в Проводнике, рабочим каталогом является каталог, содержащий EXE.Когда вы порождаете процесс из другого процесса, я считаю, что его рабочий каталог будет унаследован от вашего процесса, если вы явно не укажете другой.Поэтому он может искать некоторые ресурсы в рабочем каталоге и не работать, потому что он запускается с рабочим каталогом вашего процесса.

...