2015-07-28 28 views
15

Pracuję nad aplikacją console, która ma działać pod WinCE 6.0 i WinCE 7.0. Używam C#, Compact Framework 2.0 dla różnych powodów kompatybilności.Aplikacja konsoli nie zamyka się

Moja aplikacja jest uruchamiana przez zewnętrzny program wykonawczy o nazwie TwinCAT (od Beckhoff). W ramach tej aplikacji mój członek zespołu użył bloku funkcyjnego o nazwie nt_startProcess (dokumentacja here), który jest odpowiedzialny za uruchamianie mojej aplikacji na żądanie.

Mój problem - Dwie różne zachowania w zależności od systemu operacyjnego:

  1. Kiedy uruchamiane ręcznie (bez TwinCAT) z cmd linii:

    Moja aplikacja zachowuje się poprawnie w obu systemach. Oznacza to, że aplikacje rozpoczynają się, wyświetla "Hello World", a następnie wraca do linii cmd.

  2. Kiedy zaczęło się od TwinCAT:

    a) Na WinCE 6.0 widzę otwór linii cmd, wyświetlanie "Hello World" i zamyka się zaraz po. Idealne zachowanie dla mnie.

    b) Na WinCE 7.0 widzę otwór linii CMD, wyświetlający "Hello World", ale pozostaje otwarty na zawsze. To jest mój problem! Fragment

Kod:

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

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

informacje Kompilacja

w Visual Studio 2008, w ramach właściwości kompilacji projektu:

  • Platefor m cel: Każdy CPU

źródło dodatkowego uwaga:

Należy pamiętać, że komputer, który działa WinCE 6.0 jest za pomocą procesora i486, gdy jeden pracuje WinCE 7.0 jest za pomocą procesu Freescale ArmCortex.

WinCE 6.0:
WinCE 6.0

WinCE 7.0:
WinCE 7.0

Co próbowałem:

1) Korzystanie return 0; po zakończeniu aplikacji.

Nic nie zmienia w WinCE 7.0.

2) Korzystanie Environment.Exit(0);

nie jest dostępny w Compact Framework 2.0.

3) Korzystanie z własności: IsBackground

Snippet:

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

4) z TwinCAT, nazywając plik wsadowy (co wywołuje mój EXE) zamiast mojego exe.

Nie działa z TwinCAT. Pojawia się błąd typu "Ogólny błąd podrzędny pod systemem Windows".

5) Przetestowano za pomocą Compact Framework 3.5.

To samo zachowanie.

6) Przetestowano z innym komputerem CX (model 2020) przy użyciu Windows CE 7.0 i innej architektury procesora (Intel Pentium III Xeon Model A).

To samo zachowanie.

+3

próbował Environment.Exit (0)? – Chaka

+0

@Chaka Nie myślałem o tym. Próbowałem powrotu 0; bez większego sukcesu ... Próbujemy tego teraz. –

+1

@Chaka Nie mogę mieć metody Exit w Compact 2.0. –

Odpowiedz

0

Czy wstawiasz plik .exe w wersji Arguments z ProcessStartInfo? Jeśli musisz to zrobić, uważam, że używasz właściwości CMD w FileName, więc musisz użyć nazwy /K przed swoją nazwą .exe. Lub po prostu wstaw w FileName ścieżkę .exe. Możesz dużo wyjaśnić, jeśli umieścisz kod, który wywołuje twoją aplikację.

0

Spróbuj zadzwonić Application.Exit

Działa to w aplikacji okienkowym i może zmusić okno konsoli, aby zamknąć.

1

wypróbować ten kod:

Environment.Exit(0); 
+2

Dziękuję za odpowiedź, spójrz na "Co próbowałem", punkt 2. –

Powiązane problemy