如何处理 Finish-Install 操作

注意

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

无论安装是硬件优先安装,还是通过运行安装程序(如“查找新硬件向导”、“更新驱动程序软件向导”或供应商提供的安装程序) (软件优先安装) 来启动设备的完成安装操作 (类安装程序、类共同安装程序或设备辅助安装程序) 处理设备的完成安装操作。

注意在Windows 8、Windows 8.1和Windows 10中,必须由管理员 (或可向 UAC 提示) 提供管理员凭据的受限用户在操作中心完成完成安装操作。 用户必须单击“完成设备软件安装”。

完成所有其他安装操作并启动设备后,Windows 会处理完成安装操作,包括:

  • 核心设备安装 (也称为服务器端安装) ,其中设备的驱动程序由系统的即插即用 (PnP) 管理器组件安装和加载。

Windows 完成以下步骤来处理安装程序的完成安装操作:

  1. 在核心设备安装结束时,Windows 会调用 SetupDiCallClassInstaller 向设备的安装程序发送 DIF_NEWDEVICEWIZARD_FINISHINSTALL 请求。

    DIF_NEWDEVICEWIZARD_FINISHINSTALL是在核心设备安装上下文和客户端上下文中发送的唯一 DIF 代码。 因此,类安装程序、类共同安装程序或设备共同安装程序必须指示它在DIF_NEWDEVICEWIZARD_FINISHINSTALL处理期间执行完成安装操作,而不是在DIF_INSTALLDEVICE处理期间完成安装操作。

  2. 如果安装程序提供完成安装操作,它会设置DIF_FLAGSEX_FINISHINSTALL_ACTION标志以响应 DIF_NEWDEVICEWIZARD_FINISHINSTALL 请求。 如果在所有安装程序处理DIF_NEWDEVICEWIZARD_FINISHINSTALL请求后设置DIF_FLAGSEX_FINISHINSTALL_ACTION标志,则会将设备标记为执行完成安装操作。

    有关此操作的详细信息,请参阅 将设备标记为具有要执行的Finish-Install操作

  3. 完成设备的核心设备安装后,Windows 会检查是否已将设备标记为执行完成安装操作。 如果存在,Windows 会将完成安装过程排队,该过程执行特定于设备的完成安装操作。 进程在用户的上下文中执行。

    在 Windows 8 及更高版本中,完成安装操作不会作为设备安装的一部分自动运行。 相反,管理员 (或能够向 UAC 提示) 提供管理员凭据的受限用户必须转到操作中心并解决“完成安装设备软件”维护项目,以运行完成安装操作。 在此之前,不会运行完成安装操作。 例如,如果用户插入了安装包含完成安装操作的驱动程序的设备,则完成安装操作不会在当时自动运行。 完成安装操作将在稍后用户手动启动时运行。 当 Windows 运行完成安装操作时,该操作有单次运行机会。 如果操作失败,它必须采取适当的步骤,以允许用户重试并稍后完成操作。 仍可以通过完成安装操作来安装驱动程序随附的支持软件,但也不会自动安装。

    在 Windows 7 中,完成安装过程仅在以下某个时间在具有管理员凭据的用户的上下文中运行:

    • 具有管理员凭据的用户下次在附加设备时登录的时间。
    • 重新附加设备时。
    • 当用户选择“扫描设备管理器中的硬件更改时。

    如果用户在没有管理权限的情况下登录,Windows 会提示用户提供同意和凭据,以在管理员上下文中运行完成安装操作。

  4. 完成安装操作运行时,完成安装过程将启动并完成设备的任何完成安装向导页,然后调用 SetupDiCallClassInstaller 向设备的所有安装程序发送 DIF_FINISHINSTALL_ACTION 请求,如 运行Finish-Install操作中所述。

  5. 安装程序完成其完成安装操作后,Windows 将运行默认的完成安装操作,如 运行默认Finish-Install操作中所述。