我正在编写一个小程序,用作特定游戏引擎的数字分发平台。
此游戏引擎的版本相当陈旧,这似乎会导致一些兼容性问题。
如果我直接从资源管理器(即dbl点击exe)运行它,运行一个特定的游戏似乎工作正常但是如果我从我的程序中将它作为一个进程运行它会立即崩溃。
那么.NET中的进程与从shell运行它的区别是什么?
继承我当前的代码:
(为了记录这个版本的引擎确实不需要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();
}
答案 0 :(得分:4)
我的猜测是需要从特定的工作目录运行该进程。通过在资源管理器中双击EXE来运行EXE时,工作目录是包含EXE的目录。当您从另一个进程生成进程时,如果您没有明确指定另一个进程,我相信它的工作目录将从您的进程继承。所以它可能正在寻找工作目录中的一些资源而失败,因为它是在你的进程的工作目录下运行的。