【问题标题】:Windows IoT console application written in c#?用 C# 编写的 Windows IoT 控制台应用程序?
【发布时间】:2015-09-14 12:53:31
【问题描述】:

我正在尝试在运行 Windows IoT 的 Raspberry PI 上制作可以使用网络摄像头拍照的应用程序。问题是我找不到控制台应用程序模板。通用 Windows 空白应用程序模板为我提供了 GUI,但我将从 python 脚本调用此应用程序,因此它应该没有。 Windows IoT 项目提供后台任务模板,但输出为 .winmd 文件,我也无法从 python 执行它。

使用 c# 在 Windows IoT 中创建简单控制台应用程序的方法是什么? 谢谢

【问题讨论】:

  • 我不认为你可以。
  • FAQ 似乎暗示不支持控制台模式应用程序(至少在您真正想“看到”控制台时不支持);查找条目“Windows 10 IoT Core 是否支持真正的控制台应用程序?”。
  • 可以从命令行调用桌面应用程序。您无需与 GUI 交互

标签: c# windows win-universal-app raspberry-pi2 iot


【解决方案1】:

Console applications are supported in Windows IoT but apparently in C++ only。也许您可以尝试创建一个解决方案,其中包含仅处理与用户交互的 a very simple C++ console application 以及包含所有逻辑和硬件相关代码的 C# 类库。

【讨论】:

  • 感谢您的回答。我会将其标记为解决方案。不幸的是,我没有成功地将控制台应用程序添加到我的 python 脚本中,因为事实证明 python 无法在 Windows 通用上下文中运行其他应用程序
  • 不确定它是否适用于物联网,但注册协议处理程序的通用应用程序可以协议激活(基本上通过 URI 启动它们,即调用 appprotocol://[params]
【解决方案2】:

似乎适用于标准 c# 控制台应用程序。我是怎么发现的? 我使用 Reflector 并检查了 Pi 上 c:\windows\system32 中的所有 exe 文件,其中一个是 .NET 程序集:netcmd.exe 当我在 Reflector 中查看 netcmd.exe 时,它​​说它是使用标准 .NET 4.5 构建的,这不对吗?但是我用框架 4.5 制作了一个标准的 c# 控制台应用程序,添加了这个:

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

将 test.exe 放在 Pi 上,瞧: C:>测试 世界你好

最奇怪的事情。

我没有测试过更多,但我想你会遇到未实现的 API 的麻烦,因为 Pi 上只存在 .NET 的一个子集(与后台应用程序 (IoT) 相同?),所以你必须“手动"注意不要使用未实现的东西(或代码大部分在后台应用程序“模式”,并在最后阶段,移动到标准 .NET 4.5 并添加控制台代码)。

【讨论】:

  • 适当的 netcmd.exe。你知道我在哪里可以得到这个文件吗?它在普通的 Windows 10 上对于自动化也很有用,因为它可以在没有用户交互的情况下连接到 WPA2-Enterprise。
  • Daniel:它不能在普通 Windows 上运行,得到“访问被拒绝。”。您可以从 Windows_10_IoT_Core_RPi2.msi 获取它,提取 File_WindowsIoTRpi2Flash.ffu,挂载它(此处的说明infinitecurious.com/install-windows-10-iot-from-windows-7
  • 啊,太糟糕了...不过还是谢谢你的回复!
【解决方案3】:

如果您仍希望继续使用 C#,将应用程序创建为空白通用 Windows 平台应用程序可能就足够了 1.) 如果 RPi2 在没有连接 HDMI 电缆的情况下打开电源,则 UI 将不会被实例化 2 .) 您可能会发现使用包含的 UI 作为实时调试应用程序的一种方式很有用。

【讨论】:

    【解决方案4】:

    如果您将 Win 10 设备用于不需要 GUI 的单个(或多个)应用程序(例如,仅用于服务应用程序),您可以使用 headless 选项启动设备。

    这个启动没有整个 UI 并有额外的资源奖励。,但仍然可以通过网络访问。

    显示设备的当前状态,使用 setbootoption 实用程序:

      [192.168.0.243]: PS C:\> setbootoption.exe
    

    要修改设备的状态以启用无头模式,请使用带有无头参数的 setbootoption 实用程序:

      [192.168.0.243]: PS C:\> setbootoption.exe headless
      [192.168.0.243]: PS C:\> shutdown /r /t 0
    

    要修改设备的状态以启用 headed 模式,请使用带有 headed arg 的 setbootoption 实用程序:

      [192.168.0.243]: PS C:\> setbootoption.exe headed
      [192.168.0.243]: PS C:\> shutdown /r /t 0
    

    设备启动时黑屏。

    【讨论】:

      【解决方案5】:

      我能够创建在 Windows 10 IoT 下运行的 .NET core(在我的例子中为 3.1)控制台应用程序:

      1. 创建 .net 核心控制台应用并将其发布到文件夹
      2. 使用 10.0...\c$
      3. 在 Windows 资源管理器(或 ftp)中连接到设备
      4. 在 c:\program files\dotnet 中创建一个文件夹
      5. 下载一个arm 32 dotnet core runtime(例如https://dotnet.microsoft.com/download/dotnet-core/thank-you/runtime-aspnetcore- 3.1.2-windows-arm32-binaries)(注意我使用的是树莓派 4)
      6. 在第 3 点将其解压到文件夹中
      7. 打开一个 powershell 终端到设备 (https://docs.microsoft.com/en-us/powershell/scripting/getting-started/getting-started-with-windows-powershell?view=powershell-7)
      8. 在 powershell 中将 dotnet 路径添加到路径 env 变量中:

      $Env:Path += ";C:\Program Files\dotnet\"

      1. 检查 dotnet 可用于:

      dotnet --info

      1. 最后将您的应用程序输出(发布文件夹)复制到设备上
      2. 你应该可以运行了:

      dotnet .\myapp.dll

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-15
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        • 2019-07-21
        • 1970-01-01
        相关资源
        最近更新 更多