如何在已修改为不运行资源管理器的 Windows 系统上启动时运行应用程序

Posted

技术标签:

【中文标题】如何在已修改为不运行资源管理器的 Windows 系统上启动时运行应用程序【英文标题】:How can I run an application on startup on a Windows system which has been modified to not run explorer 【发布时间】:2009-07-13 20:26:03 【问题描述】:

总结

如何让我的 GUI 应用程序在 Windows 启动时在不会启动 explorer.exe 的修改过的 Windows 机器上运行。

程序 -> 启动文件夹 中放置链接不会执行。 我的应用程序是图形化的,因此我不能只修改应用程序以作为服务运行。

背景

我有一个应用程序需要在专用 PC 上运行,该 PC 用于为 Digital Signage 生成内容。这种软件可以生成公告和各种幻灯片内容,您可以在大型组织的等离子/液晶显示屏上看到这些内容。

我曾与此类内容管理软件的多个不同供应商合作过,他们基本上都构建了一个 Windows 应用程序,然后从 Windows 中删除一些内容以防止出现任何类型的弹出窗口等。我是其中一个供应商我现在正在处理,windows 已被修改,使得explorer.exe 无法启动。

我们程序的启动时运行功能使用启动文件夹中的链接。我发现,由于explorer.exe 没有运行,我的应用程序也没有运行。

当计算机启动时,它会自动启动到数字标牌应用程序的运行模式,该应用程序开始显示可编程内容。您可以按 CTRL-ALT-DELETE 并杀死他们的程序,然后从taskmanager 启动explorer.exe。大约一秒钟后...我看到我的应用程序启动了。

所以,我的问题是 - 如何让我的应用程序加载到无法启动的 Windows 机器上explorer.exe。任何人都知道是否说即使在没有资源管理器的情况下使用 Run 文件夹中的注册表项也可以工作?有没有其他方法可以让程序在启动时运行?


编辑:接受的答案实施说明

我在接受的答案中实施了该方法。 这是我发现在实现它时有用的链接。我从未尝试过注册表项方法。如果有人确认它会在没有 explorer.exe 加载的情况下执行,请发表评论。

Process Starter class

【问题讨论】:

这对我来说似乎是一个更适合 ServerFault 的问题。 @Daniel 我不同意。该解决方案将在源代码中实现。例如,下面 Michael 的回答列出了几个需要调用才能实现的 Windows API 方法。 【参考方案1】:

将您的应用程序转换为服务并将其设置为自动启动。或者,有一些在线工具可以将任意 exe 作为服务运行。自己写一个非常简单。

如果您的应用程序需要与桌面交互并创建 UI,您将需要您的服务在适当的桌面上启动 exe。为此,您可以使用 WTSEnumerateSessions 查找交互式用户会话,使用 WTSQueryUserToken 获取其令牌,然后使用 CreateProcessAsUser 以该用户身份在正确的桌面上启动应用程序。

【讨论】:

调整了我的答案,以阐明如何从服务中为特定用户启动 GUI 应用程序。【参考方案2】:

<HKLM|HKCU>\Software\Microsoft\Windows\CurrentVersion\Run 是放置东西的常用位置,但如果这还不够好,HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 有一个名为“Userinit”的字符串,它确实支持多个逗号分隔值。

如果你想进入无证地带,注册表中有一百万个地方是启动的地方,从 Sysinternals 启动 Autoruns,同时使用 RegMon/ProcessMonitor 进行监控

【讨论】:

【参考方案3】:

你可以尝试修改

[HKEY_CLASSES_ROOT\Folder\shell] 

将默认值设置为可执行文件的路径/名称

这很危险 ..如果你搞砸了,你可能会在让系统正常工作时遇到很大的问题..最好在虚拟机中尝试/玩

【讨论】:

【参考方案4】:

你能在注册表中添加一个条目吗

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

键?

我不确定 explorer.exe 是否负责启动该区域中的程序,或者 Windows 后端是否负责,但值得一试。

【讨论】:

这是我的问题...我必须依靠客户在他的环境中测试我的软件。目前无法在内部重现他的设置。所以,试验是痛苦的。

以上是关于如何在已修改为不运行资源管理器的 Windows 系统上启动时运行应用程序的主要内容,如果未能解决你的问题,请参考以下文章

电脑中的开始-运行和任务管理器的进程是怎么用的

为啥任务管理器的进程条不见了?

如何创建类似资源管理器的文件夹浏览器控件?

如何在没有 Windows 凭据管理器的情况下更改我的 git 帐户凭据

任务管理器的文件运行程序的命令都有哪些?

如何启动资源管理器?