【问题标题】:launch exe with params, but program closes instantly after opening?使用参数启动exe,但程序在打开后立即关闭?
【发布时间】:2013-12-21 22:48:22
【问题描述】:

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

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

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

【问题讨论】:

  • 在您的游戏中添加form_closing 事件并检查可能是什么问题.. 我认为问题出在您的游戏上.. 或者可能出在您的参数上
  • 是否有异常抛出?它返回什么?可能是没有正确生成 armaPath、文件名和启动参数?
  • 它不会抛出我发现的任何异常。它似乎启动正常,然后一旦打开它就会关闭。 (arma 有一个预开放启动过程,如果你玩过它,你就知道我在说什么)。
  • @Shaharyar 我不熟悉那是什么或如何将其包含在此代码中。我对 C# 还是很陌生,只上过 3 门 C# 大学水平的课程(所有这些课程都比我为这个客户所做的还低)。
  • @Meta,你有没有试过寻找一些游戏日志?如果没有立即关闭就无法启动,则可能是崩溃

标签: c# launcher launching-application


【解决方案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 本身有关。

【讨论】:

  • 我有一个 .bat 文件,我可以用它来启动游戏,效果很好,包括那个 .bat 文件可能会为我可能丢失的东西提供线索吗?我添加了用于启动游戏的工作 .bat 文件的屏幕截图。
  • @Meta 这可能是因为您尝试将文件名设置为“arma2oa.exe”而不是完整路径。使用您的原始代码作为文件路径:process.StartInfo.FileName = Path.Combine(gameDir+"/Expansion/beta/", "arma2oa.exe");
【解决方案2】:

尝试关注

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();
}

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多