如何在 Windows Embedded 8 中自动启动非 Surface 应用程序?

Posted

技术标签:

【中文标题】如何在 Windows Embedded 8 中自动启动非 Surface 应用程序?【英文标题】:How do I automatically launch a non-Surface application in Windows Embedded 8? 【发布时间】:2013-11-24 19:16:23 【问题描述】:

我想在 Windows Embedded 8 中启动时自动启动 GUI 应用程序,但我不知道该怎么做。我一直在阅读 Sean Liming 的 Windows Embedded 8 Standard 专业指南,在第 8 章中他描述了如何修改设备体验。他列举了如何有一个 Windows 8 应用程序启动器,但仅限于 Surface 应用程序。他还描述了一个 Shell Launcher 模块,但我的应用程序不是 shell。他还提到了他写的一个 shell here,但通读它的文档,它并没有描述如何在那个 shell 中自动启动一个程序。

据我所知,他没有描述如何在任何地方自动启动非 Surface 应用程序,而且 Google 和 Stack Exchange 没有给我任何结果(大多数结果仅返回 Windows 8 并没有帮助,而不是 Windows Embedded 8)。还是我弄错了? Shell Launcher 是否足以启动非 shell 应用程序?启动的应用是否实际上变成了“外壳”?

旁注:可能值得一提的是,我要启动的应用程序是 Java 应用程序。我将包括本书中提到的基于模块的 Java JRE 安装程序,但如果在 WE8S 中启动 Java 应用程序还有其他限制条件,请发表评论。

感谢您的宝贵时间和反馈!

【问题讨论】:

【参考方案1】:

这适用于 Windows Embedded Standard 7 和 Windows Embedded 8 Standard:

我通常使用标准外壳安装 Windows Embedded Standard。在 WE8S 中,这将是 Metro UI。一旦安装和配置完成,并且您的应用程序成功运行,我使用注册表项来修改启动时启动的应用程序。

自定义用户特定的外壳

例如,要启动 VLC 媒体播放器作为 shell,并连续循环播放 d:\ 上的文件夹中的媒体文件,例如 d:\media,我在 .bat 文件中使用以下内容,以管理员身份运行

这必须在登录到将启动自定义 shell 的用户时运行

创建一个新的 .bat 文件:

    在 Windows 资源管理器中,选择“文件”->“新建”->“文本文档” 将“New Text Document.txt”重命名为 custom_shell.bat

将以下内容粘贴到文件中

保存文件

右键文件->“以管理员身份运行”

c:\Windows\system32\reg.exe DELETE "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /f
c:\Windows\system32\reg.exe ADD "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /t REG_SZ /d explorer.exe
c:\Windows\system32\reg.exe ADD "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /t REG_SZ /d "c:\program files\vlc\vlc.exe -f --loop ""d:\media"""
c:\Windows\system32\reg.exe DELETE "HKLM\Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping\system.ini\boot" /v Shell /f
c:\Windows\system32\reg.exe ADD "HKLM\Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping\system.ini\boot" /v Shell /t REG_SZ /d "USR:Software\Microsoft\Windows NT\CurrentVersion\Winlogon"
pause

这会修改 !Current User!(即登录用户)的 shell,以便在登录时启动 VLC.exe。 (我使用 reg.exe 是因为一些精简的安装可能不包含 regedit.exe)

这意味着您在以管理员用户身份登录时仍然可以访问完整的用户界面(如果管理员配置文件通常被禁用,则通过安全模式),因为所有其他用户的外壳仍然是资源管理器外壳。

从自定义 shell 中启动 explorer shell

当使用自定义 shell 的用户登录时,您仍然可以使用 Metro UI 启动 explorer shell。从运行 VLC(自定义)shell 的用户启动资源管理器 shell:

启动任务管理器 (CTRL+SHIFT+ESC) 点击任务管理器底部的“高级”按钮 从菜单栏中选择“文件”->“新建任务(运行...)” 输入“Explorer.exe”(这会启动资源管理器服务) 再次重复上述步骤(这将启动 Windows 资源管理器实例) Metro UI 应该可以使用了

Java 应用程序作为外壳

更重要的是,为了运行您的 java 应用程序,请更改上述 .bat 中的以下条目

来自:

c:\Windows\system32\reg.exe ADD "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /t REG_SZ /d "c:\program files\vlc\vlc.exe -f --loop ""d:\media"""

c:\Windows\system32\reg.exe ADD "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /t REG_SZ /d "java [any other JVM options you need to give it] -jar "path\jar-file-name.jar""

如果您的 java 应用程序不包含清单,上述方法将不起作用!

试试这个(我没有测试过):

java -cp jar-file-name.jar full.package.name.ClassName

恢复到资源管理器(默认外壳),即撤消用户特定外壳

为用户撤消外壳更改,即恢复为原始设置:

!这必须在使用自定义 shell 登录用户时运行!

创建一个新的 .bat 文件:

    在 Windows 资源管理器中,选择“文件”->“新建”->“文本文档” 将“New Text Document.txt”重命名为 default_shell.bat

将以下内容粘贴到文件中

保存文件

右键文件->“以管理员身份运行”

c:\Windows\system32\reg.exe DELETE "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /f
c:\Windows\system32\reg.exe ADD "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /t REG_SZ /d explorer.exe
c:\Windows\system32\reg.exe DELETE "HKLM\Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping\system.ini\boot" /v Shell /f
c:\Windows\system32\reg.exe ADD "HKLM\Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping\system.ini\boot" /v Shell /t REG_SZ /d "SYS:Microsoft\Windows NT\CurrentVersion\Winlogon"
c:\Windows\system32\reg.exe DELETE "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /f
pause

用户自动登录:

您可以将 Windows 配置为自动登录到特定的用户配置文件。

开始 > 搜索 > netplwiz 或 [Windows 键 + R] > netplwiz 将打开一个“用户帐户”窗口。突出显示您希望在 Windows 启动时自动加载的帐户。 取消选中上面标题为“用户必须输入用户名和密码才能使用这台计算机”的框。 点击确定。 系统将提示您输入密码以确认操作。 输入您的密码以完成更改。

下次启动 Windows 时,将自动加载您选择的用户帐户

需要考虑的事项

试一试,但如果可能,请使用测试环境 如果您可以启动 shell,那么其他人也可以。使用键盘过滤器过滤掉已知的组合键,并创建一个只有您自己的组合,也许服务技术人员会知道。 使用自定义 shell 删除用户的管理员权限 使用统一写入过滤器(或增强型 Wright 过滤器/基于文件的写入过滤器)。仅在进行更改时取消保护。

非常感谢您,感谢肖恩·李明和所做的工作 - 他启发了这一切。

马克·伯默 Windows 嵌入式专家 南非

【讨论】:

感谢您的详尽回答:) 我知道这已经很老了,但是为什么不使用 Shell Launcher 呢?

以上是关于如何在 Windows Embedded 8 中自动启动非 Surface 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何定制Windows Embedded Compact 7 shell详解

如何在 sharepoint 2013 中自定义 Windows 身份验证弹出窗口?

Windows Embedded 中的远程调试

如何将 MFC 应用程序移植到 Windows Embedded Compact 7?

如何在 Windows 10 中自定义游戏手柄控制器操纵杆输出灵敏度

如何将 Windows Server 2012 r2 打造成 Windows 8.1?