2015-07-28 28 views
15

Sto sviluppando un'applicazione console che dovrebbe funzionare con WinCE 6.0 e WinCE 7.0. Sto usando C#, Compact Framework 2.0 per diversi motivi di compatibilità.Applicazione console non in chiusura

La mia applicazione è avviata da un runtime esterno chiamato TwinCAT (da Beckhoff). All'interno di questa applicazione, il mio compagno di squadra ha utilizzato un blocco funzione chiamato nt_startProcess (documentazione here) che è responsabile dell'avvio dell'applicazione su richiesta.

Il mio problema - due comportamenti diversi a seconda del sistema operativo:

  1. Quando avviato manualmente (senza TwinCAT) da una linea di cmd:

    La mia applicazione si comporta correttamente su entrambi i sistemi. Significa che, l'avvio delle applicazioni, visualizza "Hello World" e quindi torna alla riga cmd.

  2. , quando lanciato da TwinCAT:

    a) Sulla WinCE 6.0, posso vedere un'apertura linea di cmd, la visualizzazione di "Ciao Mondo" e chiudendo in sé subito dopo. Comportamento perfetto per me.

    b) Sul WinCE 7.0, posso vedere un'apertura della linea cmd, che mostra "Hello World" ma rimane aperto per sempre. Questo è il mio problema!

Codice frammento:

using System; 
using System.Collections.Generic; 
using System.Text; 

namespace MyBasicExample 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     Console.WriteLine("Hello World"); 
    } 
    } 
} 

informazioni Compilation

In Visual Studio 2008, all'interno delle proprietà della compilazione del progetto:

  • Platefor m obiettivo: Qualsiasi CPU

nota Aggiuntivo:

Si prega di notare che il computer che è in esecuzione WinCE 6.0 utilizza un processore i486 mentre quello in esecuzione WinCE 7.0 utilizza un processo di Freescale ArmCortex.

WinCE 6.0:
WinCE 6.0

WinCE 7.0:
WinCE 7.0

Quello che ho provato:

1) Utilizzando return 0; al termine di applicazione.

Non modifica nulla su WinCE 7.0.

2) Utilizzando Environment.Exit(0);

non è disponibile in Compact Framework 2.0.

3) Usando la proprietà: IsBackground

Snippet:

// ... Same snippet as above except for the next line... 
Thread.CurrentThread.IsBackground = true; 
Console.WriteLine("Hello World"); 
// ... 

4) Da TwinCAT, chiamando un file batch (che chiama il mio exe) invece del mio exe.

Non funziona con TwinCAT. Viene visualizzato un errore di tipo "Errore generale sotto-Windows".

5) Testato con Compact Framework 3.5.

Stesso comportamento.

6) Testato con un altro computer CX (modello 2020) che utilizza Windows CE 7.0 e un'altra architettura di processore (Intel Pentium III Xeon Modello A).

Stesso comportamento.

+3

provato Environment.Exit (0)? – Chaka

+0

@Chaka Non ci ho pensato. Ho provato a restituire 0; senza molto successo ... Ci stiamo provando proprio ora. –

+1

@Chaka Non riesco ad avere il metodo Exit in Compact framework 2.0. –

risposta

0

Ti stai mettendo .exe file in Arguments proprietà di ProcessStartInfo? Se è necessario, credo che si stia utilizzando CMD nella proprietà FileName, quindi è necessario utilizzare /K prima del nome .exe. Oppure inserisci semplicemente FileName il percorso .exe. Puoi chiarire molto se inserisci il codice che chiama la tua applicazione.

0

provare a chiamare Application.Exit

Questo funziona in applicazioni a finestre, e può forzare la finestra della console per chiudere.

1

provare questo codice:

Environment.Exit(0); 
+2

Grazie per la risposta, guarda "Quello che ho provato", punto 2. –