如何在已修改为不运行资源管理器的 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
加载的情况下执行,请发表评论。
【问题讨论】:
这对我来说似乎是一个更适合 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 系统上启动时运行应用程序的主要内容,如果未能解决你的问题,请参考以下文章