18

我正在开发一个console应该在WinCE 6.0and下运行的应用程序WinCE 7.0。我正在使用C#Compact Framework 2.0出于不同的兼容性原因。

我的应用程序由一个名为TwinCAT(来自 Beckhoff)的外部运行时启动。在这个应用程序中,我的队友使用了一个名为nt_startProcess此处的文档)的功能块,它负责按需启动我的应用程序。

我的问题 - 两种不同的行为取决于操作系统:

  1. cmd生产线手动启动(不使用 TwinCAT)时:

    我的应用程序在两个系统上都能正常运行。这意味着,应用程序启动,显示“Hello World”,然后返回该cmd行。

  2. 从 TwinCAT 启动时:

    a) On 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 中,在项目编译的属性中:

  • 平台目标:任何 CPU

附加说明:

请注意,运行 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。我收到“常规子窗口错误”类型的错误。

5) 使用 Compact Framework 3.5 进行测试。

相同的行为。

6) 在另一台使用 Windows CE 7.0 和另一种处理器架构(Intel Pentium III Xeon Model A)的 CX 计算机(型号 2020)上进行测试。

相同的行为。

4

5 回答 5

1

试试这个代码:

Environment.Exit(0);
于 2017-04-05T21:27:23.397 回答
1

尝试这个:

工具 > 选项 > 调试 > 调试停止时自动关闭控制台

于 2019-10-23T15:48:35.880 回答
0

您是否将.exe文件放在 .exe 的Arguments属性中ProcessStartInfo?如果你必须这样做,我相信你在属性中使用CMDFileName,所以你必须/K在你的.exe名称之前使用。或者只是放入.exe路径FileName。如果您放置调用您的应用程序的代码,您可以澄清很多。

于 2016-12-26T12:18:06.800 回答
0

我有完全相同的问题。在 Beckhoff PLC 上运行从未关闭的控制台应用程序。

我没有创建控制台应用程序,而是创建了 Windows 应用程序。我的代码与控制台应用程序相同。我刚刚注释掉了:

// Application.Run(new Form1());

似乎现在代码在不打开表单的情况下运行。

于 2019-12-02T09:30:06.773 回答
0

试着打电话Application.Exit

这适用于窗口应用程序,并且可能会强制控制台窗口关闭。

于 2017-04-05T21:21:05.337 回答