编写类安装程序和辅助安装程序

注意

通用或移动驱动程序包不支持本部分所述的功能。 请参阅 使用通用 INF 文件

本部分包含编写 辅助安装程序时应遵循的准则:

显示用户界面

保存设备安装状态

加载可执行文件或 DLL 文件

启动其他进程或服务

有关如何编写共同安装程序的详细信息,请参阅 编写共同安装程序

显示用户界面

设备安装主要在系统 (非交互式) 服务中运行。 因此,用户无法查看或响应此上下文中显示的任何用户界面。 在处理设备安装功能 (DIF) 代码期间,在辅助安装程序中提供的任何对话框都会导致设备安装停止响应。

在大多数情况下,除非在 完成安装操作的处理过程中,共同安装程序不应与用户交互。 完成安装操作在交互式上下文中运行。

注意 辅助安装程序不应使用 ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION 使 DIF 代码失败,因为这会导致设备安装失败。 如果设备安装需要用户交互,共同安装程序应支持完成安装操作。

保存设备安装状态

不要在 共同安装程序 动态链接库中保存设备安装状态, (DLL) 。 由于 Windows 通常会在安装程序处理 DIF 代码后卸载 DLL,因此保存在 DLL 中的任何状态信息都不会保留。

若要安全地保留设备安装程序状态,类安装程序或辅助安装程序应将状态信息保存为注册表中设备 驱动程序键 中的属性。 为此,请按照下列步骤进行操作:

  1. 若要检索 设备实例驱动程序密钥的注册表句柄,请使用 SetupDiOpenDevRegKey ,并将 KeyType 参数设置为 DIREG_DRV。

  2. 使用 SetupDiGetDevicePropertyKeys (检索设备实例的所有属性键) 或 SetupDiGetDeviceProperty (检索指定的设备实例属性键) 。

  3. 使用 SetupDiSetDeviceProperty 保存设备实例属性键。

加载可执行文件或 DLL 文件

如果 协同安装程序 尝试在 Windows 64 位平台上加载未签名的可执行文件或 DLL,操作系统会阻止在此安全环境中加载它。

若要通过类安装程序或辅助安装程序安全地加载可执行文件或 DLL,我们强烈建议将可执行文件或 DLL 包含在数字签名 的驱动程序包中。 有关如何对驱动程序包进行签名的详细信息,请参阅 驱动程序签名

注意 类安装程序和辅助安装程序不得通过显式函数调用(如 LoadLibrary)或创建链接依赖项来加载 DLL 模块。

启动其他进程或服务

在设备安装过程中,Windows 无法跟踪其他进程,并且无法确定它们正在执行的操作或何时完成。 例如,Windows 可以在进程执行关键操作时启动或停止设备,或者启动系统重启。

在大多数情况下, 共同安装程序 不应启动其他进程或服务。 但是,安装程序可以通过从通过完成安装操作显示的函数或对话框调用 CreateProcess 来安全地启动其他进程。 在创建的进程退出之前,安装程序不得允许用户继续执行对话框或过程。