我们有一个visio插件(比如版本1),由用户安装,每个用户都有管理员权限('Just me'otpion),msi安装程序是使用visual studio的设置和部署创建的。后来由于组织策略到位撤销所有用户的管理员权限被撤销。因此,新版本(版本2)需要由IT管理员按机器(每个人选项)安装,以便插件可供该计算机上的所有用户使用,并且还可以卸载安装的旧版本(版本1)由被撤销权限的用户。
我们正在尝试自动卸载以避免手动干预。该实用程序通过查看该计算机上的注册表项并使用msiexec强制卸载来检测所有已安装的应用程序实例。但msiexec无法卸载其他用户使用exitcode安装的版本为1605 - 此操作仅对当前安装的产品有效
如果用户(安装版本1插件的用户)获得卸载应用程序的管理员权限,他可以手动卸载它,证明应用程序未被篡改并且处于可以卸载而没有任何问题的状态。
有关如何以编程方式卸载其他用户使用“Just me”选项安装的计算机上安装的应用程序的任何指示都会有所帮助
答案 0 :(得分:2)
它不仅仅是Visual Studio的问题。 Windows Installer不允许安装上下文(用户/计算机)在升级期间进行更改。您必须执行登录作为执行安装的用户配置文件,并在安装新的每台计算机安装之前将其删除。
答案 1 :(得分:2)
我找到了一些进一步的文档:
如果您使用,可以使用以下方法消除现有每用户安装并安装新软件包每台计算机 的InstallShield 即可。如果您不使用Installshield,那么对于您自己的“ISSetAllUsers”替换CA应该可以这样做。以下假设“主要升级”的正确填充升级表 - 搜索主要升级的信息:
要插入ISSetAllUsers自定义操作,您需要执行以下操作:
重要提示:请注意,除非您需要执行每用户到每台计算机的迁移,否则不应将 ISSetAllUsers 自定义操作添加到任何项目中。除非使用set属性自定义操作强制每台计算机安装,否则该操作将有效确保安装新安装程序的值与旧安装程序相同(正如我们在上述方案中所做的那样)。
答案 2 :(得分:0)
我在几年前创建了一个包,但是在我的生活中我找不到它。我记得它涉及使用主要升级和升级表来卸载正确用户上下文中的每用户安装,然后使用 set属性自定义操作可在新安装命中 InstallInitialize 之前更改 ALLUSERS 的值,并为每台计算机执行新安装。这意味着您必须尽可能早地在 InstallExecuteSequence 中移动 RemoveExistingProduct ,然后立即执行set属性。
听起来很疯狂,但据我记得,经过一些严肃的测试和调试后它才有效。关键部分是以最初安装每用户安装的用户身份运行新安装程序。由于sccm可能在不同的上下文中运行安装,因此在逻辑上执行此操作并不容易。也可能是你必须在序列中更早地移动RemoveExistingProducts,并在其后面移动一些标准操作以使其工作。我不记得 - 抱歉。您可以使用 ActiveSetup 安排安装“每个用户运行一次”。然后,您可能需要禁止设置GUI,以避免在没有安装的情况下向每个用户发送错误消息。
请注意,在Orca中很难做到以上几点。尝试使用Wise for Windows Installer或Installshield。请注意,Installshield软件包也有自己的方法来重新评估ALLUSERS的值,您可能需要禁用它们的变体以使其工作。它不应该是容易的: - )。