Консольное приложение не закрывается

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

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

Моя проблема - два разных поведения в зависимости от ОС:

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

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

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

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

    b) На 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 в свойствах компиляции проекта:

  • Цель Plateform: любой процессор

Дополнительное примечание:

Обратите внимание, что компьютер с 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

Фрагмент:

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

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

Не работает с TwinCAT. Я получаю сообщение об ошибке "Общая ошибка Sub-Windows".

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

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

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

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

Ответы

Ответ 1

попробуйте этот код:

Environment.Exit(0);

Ответ 2

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

Ответ 3

Попробуйте позвонить Application.Exit

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

Ответ 4

Я думаю, что у меня та же проблема с Wince 7.0. Я запускаю свое приложение csharp из диспетчера задач; после того, как мое приложение csharp нормально завершает работу, консоль остается активной. Таким образом, каждое приложение запускается, открывают дополнительную консоль.

Кто-нибудь нашел решение?