2015-07-28 2 views
15

Я разрабатываю приложение console, которое должно работать под WinCE 6.0 и WinCE 7.0. Я использую C#, Compact Framework 2.0 по различным причинам совместимости.Консольное приложение не закрывается

Мое приложение запускается внешним временем выполнения под названием TwinCAT (от Beckhoff). В этом приложении мой товарищ по команде использовал функциональный блок под названием nt_startProcess (документация here), который отвечает за запуск моего приложения по требованию.

Моя проблема - Две разные модели поведения в зависимости от операционной системы:

  1. При запуске вручную (без TwinCAT) от cmd линии:

    Мое приложение ведет себя должным образом в обеих системах. Это означает, что приложения запускаются, отображает «Hello World», а затем возвращается к строке cmd.

  2. При запуске из TwinCAT:

    а) На WinCE 6.0, я могу видеть отверстие CMD линии, показывая "Hello World" и закрывая себя сразу же после. Отличное поведение для меня.

    b) On WinCE 7.0, я вижу открытие линии cmd с отображением «Hello World», но он остается открытым навсегда. Это моя проблема!

Фрагмент кода:

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

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

информация Компиляция

В Visual Studio 2008, в свойствах компиляции проекта:

  • Platefor м Цель: Любой процессор

Additionnal примечание:

Пожалуйста, обратите внимание, что компьютер, который работает под управлением WinCE 6.0 использует процессор i486 в то время как один работает WinCE 7.0 использует процесс Freescale ArmCortex.

WinCE 6,0:
WinCE 6.0

WinCE 7,0:
WinCE 7.0

Что я пробовал:

1) Использование return 0; в конце приложения.

Ничего не изменит на WinCE 7.0.

2) Использование Environment.Exit(0);

не доступен в Compact Framework 2.0.

3) Используя свойство: IsBackground

Snippet:

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

4) От TwinCAT, вызывая пакетный файл (который вызывает мой ехе) вместо моего ехе.

Не работает с TwinCAT. Я получаю сообщение об ошибке «General Sub-Windows error».

5) Протестировано с Compact Framework 3.5.

Такое же поведение.

6) Протестировано другим компьютером CX (модель 2020) с использованием Windows CE 7.0 и другой архитектуры процессора (Intel Pentium III Xeon Model A).

Такое же поведение.

+3

пытался Environment.Exit (0)? – Chaka

+0

@ Chaka Я не думал об этом. Я попробовал вернуться 0; без особого успеха ... Мы пытаемся это прямо сейчас. –

+1

@Chaka У меня не может быть метода Exit в Compact framework 2.0. –

ответ

0

Вы ставите вас .exe файл в Arguments Недвижимость ProcessStartInfo? Если вы должны это сделать, я считаю, что вы используете CMD в FileName, поэтому вы должны использовать /K перед своим .exe. Или просто положить в FileName.exe путь. Вы можете прояснить ситуацию, если вы поместите код, который вызывает ваше приложение.

0

Try вызова Application.Exit

Это работает в оконных приложениях, и может заставить окно консоли, чтобы закрыть.

1

попробовать этот код:

Environment.Exit(0); 
+2

Благодарим вас за ответ, посмотрите на «Что я пробовал», пункт 2. –

Смежные вопросы