Windows Vista 上的 Windows Installer 部署

更新:2007 年 11 月

Windows Installer 技术支持将软件安装到 Windows Vista 操作系统上。在 Windows Vista 上安装应用程序的最终用户只会收到需要提升权限的组件安装的相应提示,即使该用户的计算机在用户帐户控制 (UAC) 下运行也是如此。有关如何设置 UAC 的信息,请参见 Windows Vista 和 Visual Studio

应用程序提升

通常,Setup.exe(又称为“引导程序”)不会以提升的权限级别运行,而是以当前用户的权限级别运行。因此,当开始安装最后一个应用程序时,安装不会提示您以提升的权限运行。但是,请注意 .msi 文件通常会提示用户,而 Setup.exe 则不提示。

在引导程序的嵌入式 UAC 清单中,requestedExecutionLevel 节点指定安装程序应以当前用户的身份 (asInvoker) 运行:

<requestedExecutionLevel level="asInvoker" />

但是,如果有必要,您可以提升应用程序的安装权限。例如,在 Web 安装项目中修改 Internet 信息服务 (IIS) 设置需要管理特权,这与将程序集安装到全局程序集缓存中一样。提升提示出现在安装系统必备组件之后、安装应用程序之前。

若要提升安装权限,请打开项目 (.vdproj) 文件。在项目文件的 MsiBootstrapper 部分中,请将 RequiresElevation 属性设置为 True。此属性不能通过 Visual Studio 集成开发环境 (IDE) 使用。因此您必须使用项目文件。有关更多信息,请参见 RequiresElevation 属性

管理员协助提升

Windows Installer 支持 Windows Vista 上的管理员协助提升功能。在该方案中,系统会提示用户输入管理员凭据,管理员将为用户输入密码。为了支持该方案,当计算机运行的是 Windows Vista 或更高版本的 Windows 时,引导程序会将 AdminUser 属性设置为 True。

说明:

如果您在未使用 UAC 的计算机上运行 Windows Vista,并且您不是管理员,那么,AdminUser 仍将设置为 True。因此,应将 .exe 安装程序(如 SQLExpress32.exe)编写为检测适当的权限,并在权限不足的情况下生成一个特定的退出代码。您应当将 Setup.exe 编写为捕捉该退出代码,并显示一则声明需要管理员权限的消息。

系统必备组件提升

Windows Vista 会在必要时提升系统必备组件的安装权限。引导程序本身不执行提升;当 Windows Vista 在 UAC 下运行时,它会针对每个必须提升的系统必备组件发出一个提示,除非已经安装该组件。如果程序包提升失败,则引导程序会失败并发送一则相应的错误消息。

自定义操作提升

在自定义操作编辑器中创建的自定义操作以提升的权限运行。自定义操作不应访问用户特定数据(如注册表或文件系统),因为自定义操作将不在调用用户的帐户下运行。

默认情况下,自定义操作以提升的权限运行,因为自定义操作编辑器中 NoImpersonate 属性的默认设置为 True。将 NoImpersonate 更改为 False 会强制自定义操作模拟调用用户,调用用户可能具有减少的权限。

Visual Studio 版本之间的区别

另请注意,Visual Studio 2005 安装项目和 Visual Studio 2008 安装项目在 Windows Vista UAC 下的运行方式将有所不同。

当您在 UAC 下运行时,Windows Vista 中内置的安装程序检测功能会提示您是否同意。使用 Visual Studio 2005 生成的引导程序 (Setup.exe) 总是提示您是否同意,而不管安装的内容是什么。由于 Setup.exe 及其所有进程在 Windows Vista 上运行时都会使用管理员令牌,因此最终应用程序安装将以提升的特权进行。如果用户使用管理员协助提升功能运行 Setup.exe,则应用程序安装在提升用户的配置文件(而非管理员的配置文件)下。

在 Visual Studio 2008 中,Setup.exe 的行为会有所变化,它在启动时不会提示用户进行提升。为了防止出现提升提示,引导程序的嵌入式清单指定 Setup.exe 应以请求的 asInvoker 执行级别运行。尽管这仍会在必要时提升系统必备组件安装,但是,它提供了一个优点,即最后一个应用程序安装将不会以提升权限运行。引导程序调用 ShellExecute 来启动系统必备组件。Windows Vista 接收此调用,执行安装检测,并在安装之前向用户发出一个提示。

此变更的缺点在于,除了应用程序本身之外,还会针对每个必须安装的系统必备组件发出一个提示。但是,如果计算机已安装所有系统必备组件,则安装可能不会导致出现任何提示。此外,您不能执行需要提升权限的外部检查。外部检查将正常工作,但是,除针对安装程序本身的提示外,用户还将在每次执行外部检查时收到数个提升提示。

请参见

概念

Windows Vista 上的 Windows Installer 部署

Windows Vista 和 Visual Studio

用户权限和 Visual Studio

其他资源

Windows Installer 部署概念