【问题标题】:WPF Application exit codeWPF 应用程序退出代码
【发布时间】:2011-10-14 18:34:31
【问题描述】:

我正在尝试设置和获取应用程序退出代码。

我正在尝试做以下事情:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    if ( e.Args.Length != 0)
    {


    }
    else
    {
        new MainWindow().ShowDialog();
    }
    Environment.ExitCode = 110;
    this.Shutdown();
}

然后我尝试在cmd 中通过echo %ERRORLEVEL% 获得它

但我总是得到结果 0 ,知道是什么问题吗?

【问题讨论】:

  • 试试不带百分号的ERRORLEVEL
  • @sll ,这样我得到结果 ERRORLEVEL

标签: c# .net wpf


【解决方案1】:

对于 WPF,请尝试

Application.Current.Shutdown(110);

请注意,该应用程序需要作为控制台应用程序运行。 This answer 是我所知道的最简单的方法;接受的答案看起来更难。

判断您是否在控制台模式下运行的简单测试:从命令行调用您的应用(确保您的代码不会立即关闭)。应该显示主窗口。如果您可以在控制台中键入另一个命令,则您的应用程序未在其上下文中运行。命令提示符应该被锁定,等待您关闭窗口。

【讨论】:

  • 在 Visual Studio 中测试时要小心,因为退出代码将是 0,因为它来自调试主机进程。我根本不必更改为控制台应用程序,我的 WPF win 应用程序直接返回正确的退出代码。
  • @Idan 该值来自问题。您应该使用适合您情况的任何值。
【解决方案2】:

覆盖 OnExit 方法,并在 ExitEventArgs 中设置该值。

 protected override void OnExit(ExitEventArgs e)
 {
      e.ApplicationExitCode = your_value;
 }

【讨论】:

    【解决方案3】:

    无论哪种方法(Environment.ExitCode=110Environment.Exit(110))都适用于我。我希望你是从控制台而不是从 Visual Studio 调用程序来检查 ExitCode...

    【讨论】:

      【解决方案4】:

      您可以在Main 方法中执行此操作。只需将其返回值类型更改为 int 而不是 void 并返回您的 exit-code

      static int Main(string[] args) {
          // something to do
          Console.ReadKey();
          return 110;
      }
      

      更新:

      要在 WPF 应用程序中创建自定义 Main,您应该按照以下步骤操作:

      • 首先:通过在解决方案资源管理器中右键单击项目来卸载项目 并点击卸载项目

      • 修改.csproj文件,将<ApplicationDefinition Include="App.xaml">改成这个:<Page Include="App.xaml">

      • 现在您可以在项目中创建自己的Main 方法:

      示例Main 方法和App 类:

      public partial class App : Application {
      
          [STAThread]
          public static int Main() {
              App app = new App();
              app.InitializeComponent();
              var i = app.Run();
              return i;
          }
      
          public App() : base() { }
      
          protected override void OnExit(ExitEventArgs e) {
              e.ApplicationExitCode = 110;
              base.OnExit(e);
          }
      }
      

      【讨论】:

      • 它是 WPF,所以我没有 main
      • @Mark 我试过了,得到了**110**!可能你做错了什么,所以我不明白你为什么要否决这个答案?!
      • @Javad_Amiry:抱歉,这是我的错误。我在 Visual Studio 中对其进行测试,因此调试器主机进程干扰了我的测试...我删除了错误的评论,但显然只能在您编辑问题时删除否决票,抱歉。非常感谢您提出的解决方案。
      【解决方案5】:

      这样做:

      Environment.Exit(110);
      

      这将终止当前应用程序,退出代码为110

      【讨论】:

      • 我认为他需要设置退出代码,然后调用ShutDown。如果他按照你说的做,就不会调用 ShutDown。
      • -1 这不是问题。两种方法产生相同的结果。
      【解决方案6】:

      您可以通过以下方式做到这一点...

              Application.Current.Shutdown(110);
              Environment.Exit(10);
              this.Close();
      

      Shoutdown() 返回一个代码。并且 Exit() 也返回一个退出代码,但 Close() 只是关闭应用程序。

      【讨论】:

        猜你喜欢
        • 2017-08-11
        • 1970-01-01
        • 1970-01-01
        • 2021-09-24
        • 2020-07-08
        • 2017-11-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多