2011-10-14 103 views
12

我試圖設置和獲取應用程序退出代碼。WPF應用程序退出代碼

我試圖做一些事情如下:

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,任何想法是什麼問題?

+0

嘗試不帶百分號的'ERRORLEVEL' – sll

+0

@sll,這樣我得到的結果ERRORLEVEL –

回答

9

對於WPF,嘗試

Application.Current.Shutdown(110); 

注意,應用程序需要運行一個控制檯應用程序。 This answer是我知道的最簡單的方法;接受的答案看起來更加困難。

一個簡單的測試來告訴你,如果要在控制檯模式下運行:從命令行調用您的應用程序(請確保您的代碼不關機的時候了)。主窗口應該顯示。如果您可以在控制檯中輸入其他命令,則您的應用程序不在其上下文中運行。命令提示符應該被鎖定,等待你關閉窗口。

+1

從Visual Studio中進行測試時要小心,因爲它來自調試主機進程,因此退出代碼將爲0。我根本不需要更改控制檯應用程序,我的WPF win應用程序直接返回正確的退出代碼。 – Marc

+0

http://www.symantec.com/connect/articles/windows-system-error-codes-exit-codes-description 爲什麼是110? – Idan

+1

@Idan這個價值來自於這個問題。你應該使用適合你的情況的任何值。 –

0

做這樣的:

Environment.Exit(110); 

這將終止,退出代碼爲110當前的應用程序。

+0

我認爲他需要設置退出碼,然後調用ShutDown。如果他按你說的做,ShutDown將不會被調用。 – Icarus

+0

同樣的問題我得到0 –

+0

-1這不是問題。兩種方法都會產生相同的結果。 – Icarus

2

覆蓋的OnExit方法,並在ExitEventArgs你可以設置這個值。

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

您可以在Main方法中做到這一點。只要改變它的返回值類型int,而不是void,回到你的exit-code

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

UPDATE:

要創建WPF應用程序自定義Main,你應該遵循以下步驟:

  • 第一:通過卸載該項目就可以在Solution Explorer 單擊鼠標右鍵,點擊卸載項目

  • 修改.csproj文件通過改變<ApplicationDefinition Include="App.xaml">這一個:

樣品Main方法:<Page Include="App.xaml">

  • 現在你可以在你的項目中創建自己的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); 
        } 
    } 
    
  • +1

    它是WPF所以我沒有主 –

    +0

    好吧,我更新我的回答WPF –

    +0

    @Mark我試了這個,並得到了** 110 **'!這可能是你做錯了什麼,所以我不明白你爲什麼要投下答案?! –

    2

    它爲我用兩種方法(Environment.ExitCode=110Environment.Exit(110))。我希望你從控制檯,而不是從Visual Studio來再檢查的ExitCode調用程序...

    0

    您可以通過以下方式做到這一點...

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

    Shoutdown()返回一個代碼。和Exit()也返回一個退出代碼,但Close()只關閉應用程序。

    相關問題