我正在与一位同事讨论以下是否可行:
- 在 Windows XP 中从 USB 驱动器安装 MFC 应用程序(此安装将由具有足够权限的用户手动启动以安装软件)。
- 重新启动后,该应用程序应启动,而不是默认的 Windows XP shell (explorer.exe)。
有谁知道我如何做到这一点?
我正在与一位同事讨论以下是否可行:
有谁知道我如何做到这一点?
在 Windows 启动之前,您将无法运行 MFC 应用程序,因为根据定义,MFC 运行 Windows DLL,这些 DLL 直到 Windows 本身才被加载。更不用说首先是 Windows 负责加载 PE,因此如果没有自定义引导程序,您甚至无法加载已编译的 EXE 或 DLL。
为了做你想做的事,你有几个选择。有一些(简单的)方法可以将 Windows 设置为在启动时加载应用程序。如果这是你想要的,那么这是完全可能的。
但是,如果您希望在 Windows 启动之前和期间执行代码,那么您必须首先覆盖引导程序(使用 GRUB 之类的东西),执行您的代码(同样,您将无法访问任何标准库 - 您必须如果您希望执行任何类型的 I/O,请直接在 CPU 提供给您的缓冲区上操作),然后通过启动其引导程序来启动 Windows。我不知道该怎么做;但这只是对必须发生的事情的总体概述。
您提到了 DLL 注入,这是另一种可能性。我不熟悉在 Windows 启动期间加载哪些 DLL 以及以什么顺序加载。这对你来说是一个练习。您必须考虑的是,您希望存在的级别越高(即您可以使用哪些库来执行文件/控制台 I/O),您需要在 Windows 启动过程中执行代码的级别越高.
我对您的建议是简单地编写一个作为服务执行的程序,该服务在 Windows 初始化期间启动。它很容易做到,并且您将加载整个 HAL 并准备好实际执行任务 - 而不是您必须编写特定于设备的驱动程序以便在窗口加载 HAL 之前操作硬件。
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
使用应用程序的完整路径修改注册表值。此项指定用户登录 Windows 后应立即启动的程序。该键的默认程序是 C:\windows\system32\userinit.exe。Userinit.exe 是一个为您的用户名恢复您的个人资料、字体、颜色等的程序。可以通过用逗号分隔程序来添加将从该键启动的更多程序