Windows安装程序 - 卸载以前的版本在版本在安装策略不同(每用户,每机)Windows安装程序

2019-05-12 08:53发布

我们这是由具有管理员权限的每个用户(“只要我” otpion)用户安装一个Visio插件(比如,第1版)和MSI安装程序使用安装和Visual Studio的部署已创建。 后来因为在地方,以撤销针对所有用户管理权限组织政策被撤销。 因此,新的版本(版本2)需要由一个IT管理员为每个机器(每个人的选择),以便安装该插件可用于该计算机上的所有用户,也卸载安装旧版本(第1版)通过其权限被撤销的用户。

我们正试图自动卸载,以避免人工干预。 该实用程序的工作原理是通过查看计算机上的注册表项,并强迫卸载与MSIEXEC检测所有已安装的应用程序的实例。 但MSIEXEC无法卸载已通过退出码为1605其他用户安装的版本 - 这个动作只适用于当前已安装的产品

如果用户(谁安装的版本1插件)给予管理员权限来卸载应用程序,他可以手动卸载它,证明该申请没有被篡改,是可以没有任何问题被卸载的状态。

有关如何以编程安装卸载已安装通过与其他用户的计算机上的应用程序的指针“只有我”选项,将真正帮助

Answer 1:

这不只是一个Visual Studio的问题。 Windows安装程序不允许安装环境(用户/设备)来改变都灵升级。 你必须进行登录为没有安装(或多个)用户配置文件(S)和安装新的每台机器安装前移除它们。



Answer 2:

我发现了一些进一步的文档:

下面的方法可以用来消除每位用户安装现有的,如果你正在使用InstallShield 每台机器安装新的软件包 。 同样应该可以用自己的替代的CA做的“ISSetAllUsers”如果你不使用InstallShield。 下面假设一个正确填充性升级表的“重大升级” - 做了重大升级,信息搜索:

  1. 插入FindRelatedProducts之前的Installshield的ISSetAllUsers自定义操作。 这一行动将读取ALLUSERS的价值,为现有的安装,并执行它的新格局。 以下说明如何获得加入这一行动。
  2. 序列中及早行动RemoveExistingProducts,InstallInitialize之前。
  3. 右后RemoveExistingProducts使用组属性CA以回ALLUSERS设置为1。
  4. 这是非常重要的是,上述两种操作InstallInitialize之前完成 。 如果ALLUSERS价值InstallInitialize后改变了所有的组件将在安装和自行送修的我们通常发生后未确认状态。

为了插入你需要做如下ISSetAllUsers自定义操作:

  1. InstallShield中选择工具 - >选项 - >常规 - >启用“自动创建ISSetAllUsers行动”。 单击确定。
  2. 转至升级视图,并插入一个虚拟的记录。
  3. 去直接编辑,从升级表中的虚拟条目。
  4. 该ISSetAllUsers行动应该已经插入。 转至InstallExecuteSequence视图和FindRelatedProducts之前移动的动作。

重要提示:请注意,ISSetAllUsers自定义操作不应该被添加到任何项目,除非您需要执行按用户每台机器迁移。 该行动将有效地确保新安装的安装使用相同的值作为旧体制,除非一组属性自定义操作,用于强制每台机器安装(如我们在上面描述的场景一样)。



Answer 3:

我创建了一个包,这个几年前做的,但我的生活中,我找不到它。 我记得它涉及使用的重大升级 ,并在升级表卸载每个用户安装在正确的用户的上下文,然后使用一组属性自定义操作来更改ALLUSERS前值新安装命中InstallInitialize和执行每台机器安装新的。 这意味着你必须RemoveExistingProductInstallExecuteSequence尽可能早动,然后后做一套产权。

听起来很疯狂,但据我记得经过一番认真的测试和调试工作。 关键部分是运行新的安装程序为谁最初安装的每用户安装用户。 这不是一件容易的后勤做,因为SCCM可能运行在不同的上下文中安装。 这也可能是你必须在序列中甚至更早移动RemoveExistingProducts,并且将它背后的一些标准操作,使其工作。 我不记得确切 - 对不起。 你可以使用ActiveSetup来计划安装运行“每用户一次”。 然后,您可能需要取消安装程序GUI,以避免错误信息给每一位用户进行轰炸如果安装不存在。

请注意,上面是很难在海怪的事情。 尝试在明智的Windows安装程序或InstallShield。 需要注意的是Installshield的包也都有自己的reyanking ALLUSERS价值的方式,你可能需要禁用其变型,使你的工作。 它不应该是很容易:-)。



文章来源: windows Installer - uninstalling previous version when the versions differ in installation policy (per-user, per-machine)