Windows Installer - 在安装策略版本不同时卸载以前的版本(每个用户,每台计算机)

时间:2012-08-24 14:05:43

标签: windows-installer

我们有一个visio插件(比如版本1),由用户安装,每个用户都有管理员权限('Just me'otpion),msi安装程序是使用visual studio的设置和部署创建的。后来由于组织策略到位撤销所有用户的管理员权限被撤销。因此,新版本(版本2)需要由IT管理员按机器(每个人选项)安装,以便插件可供该计算机上的所有用户使用,并且还可以卸载安装的旧版本(版本1)由被撤销权限的用户。

我们正在尝试自动卸载以避免手动干预。该实用程序通过查看该计算机上的注册表项并使用msiexec强制卸载来检测所有已安装的应用程序实例。但msiexec无法卸载其他用户使用exitcode安装的版本为1605 - 此操作仅对当前安装的产品有效

如果用户(安装版本1插件的用户)获得卸载应用程序的管理员权限,他可以手动卸载它,证明应用程序未被篡改并且处于可以卸载而没有任何问题的状态。

有关如何以编程方式卸载其他用户使用“Just me”选项安装的计算机上安装的应用程序的任何指示都会有所帮助

3 个答案:

答案 0 :(得分:2)

它不仅仅是Visual Studio的问题。 Windows Installer不允许安装上下文(用户/计算机)在升级期间进行更改。您必须执行登录作为执行安装的用户配置文件,并在安装新的每台计算机安装之前将其删除。

答案 1 :(得分:2)

我找到了一些进一步的文档:

如果您使用,可以使用以下方法消除现有每用户安装并安装新软件包每台计算机 的InstallShield 即可。如果您不使用Installshield,那么对于您自己的“ISSetAllUsers”替换CA应该可以这样做。以下假设“主要升级”的正确填充升级表 - 搜索主要升级的信息:

  1. FindRelatedProducts 之前插入Installshield的 ISSetAllUsers 自定义操作。此操作将读取现有安装的ALLUSERS值,并为新设置强制执行该操作。请参阅下文,了解如何添加此操作。
  2. InstallInitialize 之前,在序列的早期移动 RemoveExistingProducts
  3. RemoveExistingProducts 之后,使用设置属性CA ALLUSERS 设置回1.
  4. 非常重要以上操作都是在 InstallInitialize 之前完成的。如果在 InstallInitialize 之后 ALLUSERS 的值发生更改,则安装后所有组件都将处于无法识别的状态,并且通常会进行自我修复。
  5. 要插入ISSetAllUsers自定义操作,您需要执行以下操作:

    1. 在Installshield中选择工具 - >选项 - >一般 - >启用“自动创建ISSetAllUsers操作”。单击确定。
    2. 转到升级视图并插入虚拟条目。
    3. 转到直接编辑器,从升级表中删除虚拟条目。
    4. 应插入ISSetAllUsers操作。转到InstallExecuteSequence视图并在FindRelatedProducts之前移动操作。
    5. 重要提示:请注意,除非您需要执行每用户到每台计算机的迁移,否则不应将 ISSetAllUsers 自定义操作添加到任何项目中。除非使用set属性自定义操作强制每台计算机安装,否则该操作将有效确保安装新安装程序的值与旧安装程序相同(正如我们在上述方案中所做的那样)。

答案 2 :(得分:0)

我在几年前创建了一个包,但是在我的生活中我找不到它。我记得它涉及使用主要升级升级表来卸载正确用户上下文中的每用户安装,然后使用 set属性自定义操作可在新安装命中 InstallInitialize 之前更改 ALLUSERS 的值,并为每台计算机执行新安装。这意味着您必须尽可能早地在 InstallExecuteSequence 中移动 RemoveExistingProduct ,然后立即执行set属性。

听起来很疯狂,但据我记得,经过一些严肃的测试和调试后它才有效。关键部分是以最初安装每用户安装的用户身份运行新安装程序。由于sccm可能在不同的上下文中运行安装,因此在逻辑上执行此操作并不容易。也可能是你必须在序列中更早地移动RemoveExistingProducts,并在其后面移动一些标准操作以使其工作。我不记得 - 抱歉。您可以使用 ActiveSetup 安排安装“每个用户运行一次”。然后,您可能需要禁止设置GUI,以避免在没有安装的情况下向每个用户发送错误消息。

请注意,在Orca中很难做到以上几点。尝试使用Wise for Windows Installer或Installshield。请注意,Installshield软件包也有自己的方法来重新评估ALLUSERS的值,您可能需要禁用它们的变体以使其工作。它不应该是容易的: - )。