包准则
由于 Windows Vista 中的用户帐户控制 (UAC) 会在安装期间限制特权,因此 Windows Installer 包的开发人员不应假定其安装始终有权访问系统的所有部分。
大多数情况下,可通过组策略成功部署到标准用户的安装程序包也应在 Windows Vista 中使用 UAC。 如果 InstallUISequence 表包含 LaunchConditions 操作,或是 LaunchCondition 表 包含基于 Privileged 属性的条件,则可能会出现例外情况。 因此,Windows Installer 包开发人员应遵循以下准则,以确保其包适用于 UAC 和 Windows Vista。
- 在 InstallUISequence 表中包含针对某一操作的安装上下文条件时,请使用基于 Privileged 属性的条件语句。 请勿使用基于 AdminUser 属性的条件。
- 在安装启动条件中包含安装上下文时,请在 InstallExecuteSequence 表中使用自定义操作类型 19,并在使用 Privileged 属性时将自定义操作设为条件。 请勿在 LaunchCondition 表中将操作与基于 AdminUser 属性或 Privileged 属性的条件搭配使用。
- 若要读取或修改系统配置,请在 InstallExecuteSequence 表中使用延迟的执行自定义操作。 请勿在 InstallUISequence 表中使用立即执行自定义操作来修改系统配置。
- 若要修改非特定于用户的系统组成部分,请在 InstallExecuteSequence 表中使用延迟的自定义操作。 应在自定义操作类型中包含 msidbCustomActionTypeNoImpersonate 位。
- 在字数摘要属性的值中省略位 3 可表明可能需要提升此包。 除非安装此包无需提升的权限,否则请勿包含此位。
- 将清单包含在应用程序的请求执行级别。
- 在原始包的 MsiPatchCertificate 表中包含一个证书,并使用同一证书对所有补丁进行签名。
- 如果需要提升的权限才能安装 Windows Installer 包,包的作者则应包含用于启动安装的 PushButton 控件的 ElevationShield 属性。 此操作会向用户发出警报,即单击该按钮会显示请求管理员授权以继续执行安装的 UAC 对话框。
- 将 MSIDEPLOYMENTCOMPLIANT 属性设为 1,以向 Windows Installer 表明已编写并测试此包以符合 Windows Vista 中的 UAC。 如果未设置此属性,安装程序则会确定此包是否符合 UAC。
除组策略之外,还可在 Windows XP 上使用以下 UAC 符合性检查。
若要检查组策略之外的 UAC 符合性
以管理员身份登录到计算机。
为每计算机安装播发此包:
msiexec /jm package.msi
注销计算机。
以标准用户身份登录到计算机。
尝试安装已播发的包:
msiexec /i package.msi
大多数情况下,如果安装成功,则此包符合 UAC。
将包中的 MSIDEPLOYMENTCOMPLIANT 属性设为 1。
使用 Windows Vista 测试包是否已正确安装。