#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('\'));