如何运行我的应用程序来代替默认的Windows XP shell?

时间:2009-07-16 19:22:29

标签: c++ windows winapi windows-shell

我正与同事讨论以下是否可行:

  1. 在Windows XP中从USB驱动器安装MFC应用程序(此安装将由具有足够安装软件权限的用户手动启动。)
  2. 重新启动后,应启动此应用程序而不是默认的Windows XP shell(explorer.exe)。
  3. 有谁知道我怎么做到这一点?

2 个答案:

答案 0 :(得分:7)

在Windows启动之前,您将无法运行MFC应用程序,因为根据定义,MFC会运行Windows窗口,直到Windows本身才会加载。更不用说Windows首先负责加载PE,因此如果没有自定义引导程序,您甚至无法加载已编译的EXE或DLL。

为了做你想做的事,你有几个选择。有(简单)方法可以设置Windows以在启动时加载应用程序。如果这是你想要的,那么这是完全可能的。

但是,如果您希望在窗口启动之前和之后执行代码,那么您必须首先覆盖引导程序(使用GRUB之类的东西),执行您的代码(再次,您将不会访问任何标准库 - 如果您希望执行任何类型的I / O,则必须直接在CPU可用的缓冲区上操作,然后通过启动其引导程序来启动Windows。我不知道该怎么做;但这是必须发生的事情的概述。

你提到了DLL注入,这是另一种可能性。我不熟悉在Windows启动期间加载的DLL以及以什么顺序加载。这对你来说是一种练习。您需要考虑的是,您希望存在的更高级别(即可用于执行文件/控制台I / O的库)在Windows启动过程中执行代码所需的更高级别。

我的建议是编写一个程序,该程序作为在Windows初始化期间启动的服务执行。它很容易做到,你将加载整个HAL并准备好实际执行任务 - 而不是你必须编写特定于设备的驱动程序,以便在窗口加载HAL之前操作硬件。

答案 1 :(得分:5)

使用应用程序的完整路径修改HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit注册表值。此键指定在用户登录Windows后应立即启动的程序。此项的默认程序是C:\ windows \ system32 \ userinit.exe。 Userinit.exe是一个程序,用于恢复用户名的个人资料,字体,颜色等。通过用逗号分隔程序,可以添加将从此键启动的其他程序