如何使用另一个C#程序启动XNA游戏

4

最近我尝试使用一个XNA程序启动另一个XNA程序。我一直在使用“Process.Start”这个普通方法,当打开Firefox或Media Player时可以正常工作。

但是,每次我尝试启动任何XNA程序(我尝试了几个),都会收到错误提示:“未找到适合的图形卡。无法创建图形设备。该程序需要像素着色器1.1和顶点着色器1.1。”

我认识到这是当图形设备无法处理XNA时出现的错误,但问题不在于此,因为我已经开始运行XNA了。

我的代码目前如下:

System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = Stat.clientfile;
process.StartInfo.Arguments = "";
process.StartInfo.LoadUserProfile = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.WorkingDirectory = Stat.clientfile.Remove(Stat.clientfile.Length - 1 - Stat.clientfile.Split(Convert.ToChar(@"\"))[Stat.clientfile.Split(Convert.ToChar(@"\")).Length - 1].Length);
process.StartInfo.RedirectStandardOutput = true;
Stat.MessageBox(process.StartInfo.WorkingDirectory);
process.Start();

我尝试了几乎所有的Process.Start(filename)扩展,但仍然没有解决问题。我的电脑是宏碁Netbook,使用XNA版本3.1。

如果有人知道其中原因,请帮忙指点,非常感谢!


我假设你刚刚尝试运行了你所指向的exe文件,而且它可以正常运行? - T. Kiley
2
随机猜测:您正在调用此程序的 XNA 程序已经“占用”了计算机上的图形处理器,并且不想共享。在程序 #1 正在运行时,您能否手动启动程序 #2? - thedaian
1
是的,我可以在第一个程序仍在运行时手动启动第二个程序。我也认为XNA不想共享,但如果是这种情况,我不知道该怎么办。 - Kezip
只是瞎猜,不过你试过将 UseShellExecute 设置为 true 吗? - blaaaaaaah
2个回答

2

嘿大家,很抱歉我没有回复。Joe是对的,那实际上是我同时写这篇文章时在那里创建的一个主题。我不得不欺骗系统,使用Windows.Form的全屏而不是XNA的全屏。感谢您的回复,希望这也能帮助其他人。 - Kezip

0

你不能使用

process.StartInfo.RedirectStandardOutput = true;

使用XNA应用程序。

为什么?这样,XNA应用程序将尝试在其他XNA进程内创建图形设备,这将100%失败。

不要重定向输出,它会起作用的。(在我使用XNA 4.0进行了2个测试场景后,对于3.1版本是否相同无法百分之百确定)

编辑:

顺便说一句,最好使用此方法来构建您的WorkingDirectory。

process.StartInfo.WorkingDirectory = Stat.clientfile.Substring(0, Stat.clientfile.LastIndexOf('\\'));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接