使用参数启动exe,但程序在打开后立即关闭?

时间:2013-12-05 05:52:50

标签: c# launcher launching-application

我正在为我的游戏社区编写一个客户端,该客户端的一个功能是通过客户端启动一个游戏,其参数将启动我们的社区mod包。

当我按下按钮时,游戏开始启动,一旦程序打开(任务栏中弹出图标),它就会立即关闭。

是否有一些我缺少的东西需要保持启动的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(无法以可读格式粘贴代码)。

2 个答案:

答案 0 :(得分: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();

可能是exe需要设置工作目录的内容。或者它会崩溃,无法加载资源。

如果这不起作用,那么您可能需要添加

            process.WaitForInputIdle();

退出函数运行过程之前。我不知道为什么,但是在没有这种等待的情况下运行Acrobat Reader有时可能会产生一个奇怪的效果:Acrobat正在运行,但是没有显示通过参数传递的文档。也许与垃圾收集器或Process本身有关。

答案 1 :(得分: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();
}