Как запустить XNA-игру с другой программой на C #

#c# #xna #process.start

#c# #xna #process.start

Вопрос:

Итак, недавно я начал пытаться использовать программу XNA для запуска другой программы XNA. Я использовал обычный метод «Process.Начать», которая отлично работает при открытии Firefox или медиаплеера. Однако всякий раз, когда я пытаюсь запустить любую программу XNA (я пробовал несколько), я получаю сообщение об ошибке «Не найдена подходящая видеокарта. Не удалось создать графическое устройство. Для этой программы требуется pixel shader 1.1 и vertex shader 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) , которые я мог придумать. Я использую XNA версии 3.1 на нетбуке Acer, если это что-нибудь значит.

Если кто-нибудь понимает, что в этом плохого, ваша помощь будет очень признательна!

Комментарии:

1. Я предполагаю, что вы только что попытались запустить exe, на который вы указываете, и он работает нормально?

2. Случайное предположение: программа XNA, из которой вы это вызываете, уже «захватила» видеокарту на вашем компьютере и не хочет делиться. Можете ли вы запустить программу # 2 вручную во время выполнения программы # 1?

3. Да, я могу запустить вторую программу вручную, пока первая все еще запущена. Я думаю то же самое о том, что XNA не хочет делиться, но я не знаю, что с этим делать, если это так.

4. Просто стрельба в темноте, но вы пробовали установить для UseShellExecute значение true?

Ответ №1:

Я столкнулся с той же проблемой. Я нашел эту тему:

http://forums.create.msdn.com/forums/p/94466/566353.aspx

В нижней части Kezip написано: «XNA не разрешала запускать несколько программ, пока одна из них была в полноэкранном режиме». Вывод обеих программ из полноэкранного режима устранил проблему.

Комментарии:

1. Эй, ребята, извините, я не вернулся к этому. Джо был прав; на самом деле это была тема, которую я создал там одновременно с написанием этой. Мне пришлось обмануть систему и использовать Windows. Форма на весь экран вместо XNA. Спасибо за ваши ответы, и я надеюсь, что это поможет и другим людям.

Ответ №2:

Вы не можете использовать

 process.StartInfo.RedirectStandardOutput = true;
  

с приложениями XNA.

Почему? Приложение XNA попытается создать графическое устройство ВНУТРИ другого процесса XNA таким образом, что приведет к 100% сбою.

Не перенаправляйте вывод, и он будет работать. (Работал для меня в 2 тестовых тестах с XNA 4.0 — не могу сказать 100%, если это то же самое в 3.1)

Редактировать:

Кстати, вам лучше использовать это для создания своего WorkingDirectory

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