2011-10-14 20 views
12

Sto tentando di impostare e ottenere il codice di uscita dell'applicazione.WPF Codice di uscita dell'applicazione

io sto cercando di fare qualcosa di seguito:

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

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


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

E poi io sto cercando in cmd di farlo da echo %ERRORLEVEL%

ma ottengo sempre risultato 0, qualsiasi idea di che cosa è la questione?

+0

provare 'ERRORLEVEL' senza segno di percentuale – sll

+0

@sll, in questo modo ottengo risultato ERRORLEVEL –

risposta

9

per WPF, provare

Application.Current.Shutdown(110); 

Si noti che l'applicazione deve essere in esecuzione come una console app . This answer è il modo più semplice che conosco; la risposta accettata sembra più difficile.

Un semplice test per dire se stai correndo in modalità console: chiama la tua app dalla riga di comando (assicurati che il tuo codice non si spenga subito). La finestra principale dovrebbe essere mostrata. Se puoi digitare un altro comando nella console, la tua app non è in esecuzione nel suo contesto.Il prompt dei comandi dovrebbe essere bloccato, in attesa di chiudere la finestra.

+1

Fate attenzione quando provate questo da Visual Studio poiché il codice di uscita sarà 0 poiché proviene dal processo di host di debug. Non ho dovuto modificare l'app per console, la mia app WPF win restituisce direttamente i codici di uscita corretti. – Marc

+0

http://www.symantec.com/connect/articles/windows-system-error-codes-exit-codes-description perché è 110? – Idan

+1

@Idan quel valore deriva dalla domanda. Dovresti usare qualsiasi valore appropriato per la tua situazione. –

0

fare in questo modo:

Environment.Exit(110); 

Ciò terminare l'applicazione corrente con codice di uscita 110.

+0

Penso che abbia bisogno di impostare il codice di uscita e quindi chiamare ShutDown. Se fa quello che dici, ShutDown non verrà chiamato. – Icarus

+0

Lo stesso problema si ottiene 0 –

+0

-1 che non è il problema. Entrambi i metodi producono lo stesso risultato. – Icarus

2

sovrascrive il metodo OnExit e in ExitEventArgs è possibile impostare tale valore.

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

È possibile farlo nel metodo Main. Basta cambiare il suo ritorno-value-type a int invece di void e restituire i exit-code

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

UPDATE:

Per creare un costume Main in un'applicazione WPF, è necessario attenersi alla seguente procedura:

  • Primo: scaricare il progetto facendo clic con il tasto destro del mouse su Solution Explorer e fare clic su Scarica progetto

  • Modificare il file .csproj dal cambiamento della <ApplicationDefinition Include="App.xaml"> a questo: <Page Include="App.xaml">

  • Ora è possibile creare il proprio metodo di Main nel progetto:

Esempio Main metodo e App classe:

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 quindi non ho il –

+0

principale OK, aggiorno la mia risposta a WPF –

+0

@Mark Ho provato questo e ottenuto '** 110 **'! Potresti fare qualcosa di sbagliato e quindi non capisco perché hai votato la risposta ?! –

2

Funziona per me con entrambi i metodi (Environment.ExitCode=110 o Environment.Exit(110)). Spero che si sta chiamando il programma dalla console e non da Visual Studio per poi controllare l'ExitCode ...

0

È possibile farlo nei seguenti modi ...

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

Shoutdown() restituisce un codice. ed Exit() restituisce anche un codice di uscita, ma Close() chiude solo l'applicazione.