2013-12-05 5 views
1

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

Когда я нажимаю кнопку, игра начинает запускаться, и как только программа открывается (значок появляется на панели задач), она мгновенно закрывается.

Есть ли что-то, что мне не хватает, что необходимо для запуска запущенного exe?

Вот мой код:

private void btnLaunchGame_Click(object sender, EventArgs e) 
    { 
     string armaPath = gameDir+"/Expansion/beta/"; 
     string filename = Path.Combine(armaPath, "arma2oa.exe"); 
     string launchParams = "-noSplash -noFilePatching -showScriptErrors \"-name=Meta\" \"-mod=I:/Steam/steamapps/common/Arma 2;expansion;expansion/beta;expansion/beta/expansion;servermods/@HC_DAYZ;servermods/@HC_WEAPONS;servermods/@HC_EXTRAS;servermods/@HC_ACE\""; 
     System.Diagnostics.Process.Start(filename, launchParams); 
    }//close Game Launch 

Все идеи оценили!

У меня есть bat-файл, который будет выполнять игру безупречно с запуском аргументами, перечисленных ниже, это могло бы помочь определить причину моей проблемы: http://puu.sh/5CGKk.png (не мог получить код для вставки в читаемом формате).

+1

Добавить 'form_closing' событие в вашей игре и проверить в ней то, что может быть проблема .. Я думаю, что проблема с вашей игрой .. или может быть с вашими параметрами – Shaharyar

+0

Is есть ли исключение? Что он возвращает? Может быть, armaPath, filename и launchParams не создаются должным образом? –

+0

Это не исключение, которое я нашел. он, кажется, запускается нормально, затем, как только он открывается, он закрывается. (у arma есть предварительный процесс запуска, если вы все играли, вы знаете, о чем я говорю). – Meta

ответ

1

Попробуйте использовать Process:

 Process process = new Process(); 
     process.StartInfo.FileName = "arma2oa.exe"; 
     process.StartInfo.Arguments = "-noSplash -noFilePatching -showScriptErrors \"-name=Meta\" \"-mod=I:/Steam/steamapps/common/Arma 2;expansion;expansion/beta;expansion/beta/expansion;servermods/@HC_DAYZ;servermods/@HC_WEAPONS;servermods/@HC_EXTRAS;servermods/@HC_ACE\""; 
     process.StartInfo.WorkingDirectory = gameDir + "/Expansion/beta/"; 
     process.Start(); 

Это может быть то, что ех требует рабочего каталог для установки. Или он потерпит крах, не сможет загрузить ресурсы.

Если это не работает, то, возможно, вам нужно добавить

  process.WaitForInputIdle(); 

перед выходом из функции запущенного процесса. Я не знаю, почему, но запуск Acrobat Reader без этого ожидания иногда может вызвать эффект wierd: Acrobat запущен, но документ, переданный через аргументы, не отображается. Возможно, что-то связано с сборщиком мусора или самим Process.

+0

У меня есть .bat-файл, который я могу использовать для запуска игры с этим, отлично работает, включая этот файл .bat, возможно, даст ключ к чему-то, что я могу пропустить? Я добавил скриншот рабочего файла .bat, используемого для запуска игры. – Meta

+0

Используя ваш код, я получаю исключение: http://pastebin.com/3QMqsb4m – Meta

+1

@Meta это, вероятно, потому, что вы пытались установить имя файла как «arma2oa.exe» вместо полного пути. Используйте исходный код для пути к файлу: 'process.StartInfo.FileName = Path.Combine (gameDir +"/Expansion/beta/"," arma2oa.exe ");' – kdh

0

Попробуйте следующие

using (Process process = new Process()) 
{ 
    ProcessStartInfo startInfo = new ProcessStartInfo("C:\Program Files\Arma2oa\Arma2oa.exe"); 
    startInfo.Arguments = "-noSplash -noFilePatching -showScriptErrors \"-name=Meta\" \"-mod=I:/Steam/steamapps/common/Arma 2;expansion;expansion/beta;expansion/beta/expansion;servermods/@HC_DAYZ;servermods/@HC_WEAPONS;servermods/@HC_EXTRAS;servermods/@HC_ACE\""; 
    process.StartInfo = startInfo; 
    process.Start(); 
}