将 Windows Installer 与终端服务器配合使用

使用终端服务器时,以下内容可能会影响 Windows Installer 安装。 当用户也使用终端服务器时,安装程序开发人员应始终测试其 Windows Installer 包是否按预期安装。

  • 在低于 Windows Server 2008 和 Windows Vista 的操作系统上,必须设置 EnableAdminTSRemote 系统策略,使管理员能够在客户端会话中执行安装。 从 Windows Server 2008 和 Windows Vista 开始,EnableAdminTSRemote 策略不再有任何效果。 无论其设置如何,管理员和非管理员都可以在客户端会话或控制台会话中执行安装。 管理员和非管理员始终可以在控制台会话中执行 Windows Installer 安装。
  • 如果 DisableUserInstalls 系统策略设置为 1,Windows 安装程序将阻止在按用户安装上下文中进行安装。 在这种情况下,安装程序将忽略所有按每用户注册的应用程序,仅搜索按每计算机注册的应用程序。
  • 当管理员在 Windows 2000 中托管的终端服务器的客户端会话中执行安装时,安装必须使用 UNC 路径,而不是映射的驱动器号。

开发可与终端服务器一起使用的 Windows Installer 组件时,开发人员应遵循以下准则。

  • 将所有 HKCU 注册表信息写入注册表的 HKCU\Software 部分。
  • 不建议将配置信息存储在 INI 文件中。
  • 首次运行应用程序时(不是在安装时)将每用户信息写入注册表。 如果必须在安装时将每用户信息写入注册表,请将每用户和每计算机信息分离到不同的 Windows Installer 组件中。 创作包,以便安装程序在安装应用程序时不会尝试验证和修复包含每用户信息的组件。
  • 用于仅每计算机安装的包应通过在 Environment 表的“Name”列中包含 * 将环境变量写入计算机的环境。 如果包可用于每用户安装或每计算机安装,请使用两个组件。 在 Component 表中包括每用户组件,并在 Environment 表中输入用户设置。 在 Component 表中包括每计算机组件,并在 Environment 表中输入计算机设置。 通过使用基于 Component 表“条件”字段中的 ALLUSERS 属性的条件语句来控制安装哪个组件。
  • 从终端服务器执行每计算机安装时,安装程序会将每用户环境变量写入 HKCU\.Default\Environment。 由于终端服务器不会复制注册表的此部分,因此安装不会设置每用户环境变量。
  • 由于服务器可能配置为阻止用户修复应用程序,因此应用程序应正常处理缺少注册表项的情况。

在终端服务器上的每计算机安装上下文中安装了使用 DLL、EXE 或脚本自定义操作 的 Windows Installer 包时,以下情况适用。 在这种情况下,Windows Installer 设置 TerminalServer 属性。

  • 延迟的自定义操作在本地系统的上下文中运行,除非该操作具有 msidbCustomActionTypeTSAware 属性。 即使自定义操作在不是终端服务器的系统上模拟用户,也是如此。 请注意,如果具有 msidbCustomActionTypeTSAware 属性的自定义操作更改了用户的注册表,Windows Installer 无法自动确保也在计算机上每个用户的注册表中实施这些更改。
  • 从 HKCU 注册表配置单元读取的延迟自定义操作中的任何注册表操作都会看到系统的默认注册表配置单元,而不是当前用户的注册表配置单元。
  • Windows Installer 检测到写入 HKCU\Software 的延迟自定义操作中的任何注册表操作,并在用户下次登录时复制到计算机的每个用户。
  • Windows Installer 不检测或复制延迟自定义操作中写入 HKCU 但不在 HKCU\Software 注册表项下的任何注册表操作。

有关详细信息,请参阅 Microsoft Windows 软件开发工具包 (SDK) 中的终端服务

EnableAdminTSRemote

TerminalServer 属性

RemoteAdminTS 属性

终端服务