问题标签 [major-upgrade]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
85 浏览

tfs - WiX MajorUpdate 元素未按预期工作

我正在使用 WiX 3.10

以下 Wxs 文件定义了我的 WiX 安装程序。但是,我最近想在安装新版本之前删除旧版本。令我惊讶的是,它在本地工作,但是当它由 tfs 构建时,它的行为有所不同,请参见以下示例

假设我安装了 2.0.1 版

  1. 我为该项目排队了一个新版本并让 tfs 创建我的 2.0.2 msi
  2. 我运行 2.0.2 微星
  3. 我检查程序和功能界面,我看到 2.0.1 和 2.0.2
  4. 我开始另一个 tfs 构建并获得 2.0.3 msi
  5. 我运行 2.0.3 微星
  6. 我检查程序和功能窗口,我看到 2.0.2 和 2.0.3(2.0.1 已被删除!)

有人可以解释为什么我会出现这种奇怪的行为吗?我有一个预构建脚本,将product Id元素更新为新的 guid,并且version元素与 tfs 内部版本号匹配(因此我保证每次构建都有一个新的 guid 和一个新的版本号)

这是我的wxs

0 投票
1 回答
128 浏览

windows - 升级过程中未停止和卸载 Win 服务

我在使用 Wix 3.7 构建的安装程序时遇到问题。我有一个安装 Windows 服务的产品。问题是在产品升级期间(从 1.1 版到 1.2 版,使用相同的 UpgradeCode,不同的 ProductCode Guid 和 MajorUpgrade 属性)我想替换服务运行的可执行文件。该文件正被旧进程(即 Windows 服务)使用。我怀疑 1.1 安装程序用于卸载 1.1 产品,并且在该安装程序中 ServiceControl 无效(即未设置为在卸载时停止)。

我猜:

  1. 1.2 安装程序检测到现有产品(由于升级代码)
  2. 卸载旧产品
  3. 由于 1.1 安装程序中的错误,该服务未停止/卸载
  4. 1.2 尝试替换可执行文件,但一个进程仍在运行可执行文件。

请注意,我已经使用 Orca 调整了 1.1 安装程序以具有正确的 ServiceControl,它会在卸载时停止并删除服务。我们称之为1.1tweaked。如果我使用1.1tweaked安装产品,然后使用我的 1.2 安装程序,那么一切都会按预期工作。

我已经在 1.2 安装程序中尝试过任何可能的 ServiceControl 配置,但如果上述步骤正确,它就没有用了。

如何强制停止 1.2 安装程序中的“当前”Windows 服务?看起来我需要一个自定义操作。有任何想法吗?谢谢

0 投票
2 回答
325 浏览

windows - InstallShield 创建的应用程序在全新安装期间进行重大升级,而机器上没有以前的版本

我是 InstallShield 开发人员,最近在我的客户机器上遇到了一个奇怪的场景,在我尝试进行全新安装时,我们客户的 InstallShield 应用程序进行了重大升级。详情如下:

  1. 我尝试安装通过 InstallShield 开发的应用程序。它在目标机器上检测到以前的版本并继续进行主要升级方案,但升级失败,因为我的机器上没有以前的版本。

  2. 我检查了详细日志,“IS_MAJOR_UPGRADE”的值设置为“是”

  3. 我检查了添加/删除程序,但没有找到条目。我还检查了注册表编辑器的卸载配置单元,但它也不包含我的产品的任何条目(任何以前的版本)

  4. 我检查了通过我的产品安装的所有二进制文件,并从机器(注册表和文件)中手动删除了它们,但它仍在升级。

  5. 我检查了位置“C:\Windows\Installer”是否有与我的产品相关的任何 msi,但在那里没有找到。

  6. 我在“C:\Windows\Downloaded Installations”中检查了缓存的 msi 并从那里删除了它,但我的产品也在机器上检测到以前的版本。

谁能帮助它设置MSI属性“IS_MAJOR_UPGRADE”=“是”的可能原因是什么从某处获取以前版本的详细信息?

0 投票
2 回答
1435 浏览

wix - wix bundle only install changed msi

I have a wix bundle which has say 4 MSIs - all with version 1.0.0 and Bundle version as 1.0.0. I install this on a windows machine and in the ARP I see the WiX bundle as 1.0.0.

Now I make some changes to only one of the MSIs, say B, and change the Bundle version to 1.1.0 and the changed MSI (B) version to 1.1.0. The rest of the MSIs (A, C, D) are still at 1.0.0.

Now when I run the bundle again, I expect that installation for A, C and D would be skipped and only B would be upgraded and the bundle will also be updated with version 1.1.0 in the ARP. But what I observe is that installation for all the packages (A,B,C,D) take place and not just B.

So is my expectation wrong or am I doing something wrong?

This is what I have in my bundle code

And this is what I have in my wxs for the individual MSIs. I change the version to 1.1.0 only for MSI B and keep the UpgradeCode same.

I looked up many threads but generally they talk about upgrading all the MSIs, just not 1 MSI. Let me know if something is unclear and thanks in advance for your help.

0 投票
1 回答
945 浏览

installshield - 在 InstallScript 项目中设置次要或主要升级

我正在使用 InstallShield 2012 Spring - Premier Edition,并且在再次运行安装脚本时,我正在尝试用新安装脚本中的任何内容替换我们软件的现有安装(如果存在)。

我在网上阅读了一些关于配置次要和主要升级设置的内容。

我有一个 InstallScript 项目,但我找不到如何进行 Minor 和 Major 升级,就像使用 Basic MSI 项目一样。我在网上读到,这可以通过 MSI 项目来完成,方法是转到 Installation Designer,然后是 Media/Upgrades,然后配置升级。此选项在 InstallScript 项目中不可用。

我可以在 InstallScript 项目中使用什么来改变这种行为?先感谢您。

0 投票
0 回答
87 浏览

c# - WIX: RemoveExistingProducts on upgrade when failed to start services (uninstall completely)

I have a use-case wherein user clicks Cancel after starting the services while upgrade. Our repository upgrade code is in windows service(written in C#), its not capable of downgrading. So since the service upgrades the repo, user clicks cancel upgrade, wix rollsback and installs old service back in place and tries to start the service(old). Since the repo is already upgraded, service can't be started. In this case, we need to trigger uninstall of the product. I see that MajorUpgrade's Schedule property provides five different options

  • afterInstallValidate,
  • afterInstallInitialize,
  • afterInstallExecute,
  • afterInstallExecuteAgain,
  • afterInstallFinalize.

But none serves the purpose. Basically I need something like "beforeStartServices".

Does anyone have any idea?

0 投票
1 回答
468 浏览

visual-studio-2015 - RemovePreviousVersions=true,卸载以前的版本,但静默安装新版本失败

安装了一个旧程序,该程序使用 InstallShield 为 VS2013 生成的包安装。最近升级到 VS2015 社区,但由于社区无法使用 InstallShield,我不得不使用 Installer Projects 重做我的安装程序。我已经到了我有一个工作安装程序的地步,一切似乎都很好,直到我尝试升级。我的安装程序中有一个匹配UpgradeCode,更大的Version数字,InstallAllUsers与旧的匹配,并RemovePreviousVersions设置为 true。Afaik 一切都应该井井有条。

正确运行新安装程序会卸载以前的版本,并且 GUI 看起来像是正确安装了新安装程序,它甚至正确显示在控制面板的添加/删除程序列表中。然而,应该安装新版本的整个目录都不见了。再次运行安装程序进行修复,然后真正安装新文件。

我错过了什么?为什么不能一次性通过升级?在这种情况下可以进行什么样的调试?

非常感谢任何有用的评论、指针和链接。

编辑:发布后,我也尝试过对我的程序集进行版本控制,正如此处指出的那样,但没有结果。我发现版本 65535 是无效的。

谷歌告诉我有一个叫做 的东西REINSTALLMODE,但我似乎找不到任何可以影响它的地方。

0 投票
0 回答
505 浏览

wix - WIX 安装程序:主要升级到新的安装目录

我们使用 WiX 来构建安装包。我是 WiX 技术的新手,目前正在尝试对已安装的应用程序进行重大升级,但位于与以前版本不同的目录位置。例如,如果产品的 v2 安装在 Program Files (x86)\Old_path\Product 上,我想将升级版本 v3 安装在不同的文件夹 C:\Program Files (x86)\New_path\Product 上。

我已修改 msi 属性 INSTALLDIR 以获得新的位置路径。我们尝试更改 InstallExecuteSequence,在 InstallValidate 之后添加 RemoveRegistryValues 以删除注册表中存储的旧路径,并使用 WriteRegistryValues 添加新的注册表值。

但我发现安装过程没有变化,新文件只复制到旧目录路径。即使在修改了 INSTALLDIR 路径之后,我能否知道这条旧路径是从哪里获得的?我们如何在重大升级期间更改安装路径。

回复 PhilDW 的评论:

这是重大升级的正确过程。所有旧版本文件都将被删除。但是在我们的应用程序中,在升级过程中没有浏览对话框来询问新的/必需的安装目录。它只是采用以前的版本路径。这是因为首先我们需要备份低版本的重要设置/用户配置文件,然后在升级版本中使用它们。保存此备份后,我尝试将此备份文件移动到新路径,然后开始复制新文件。我在 HxPrepare 步骤中将此路径更改为 INSTALLDIR,并希望在新目录中继续该过程。但我不知道从哪里只考虑旧路径。

我要执行此安装路径更改的原因是因为我想更改产品制造商名称,并且我希望产品的主要升级发生在新路径上,例如“C:\Program Files (x86)\New_manufacturer\Product installation ” 。我怎样才能做到这一点?

0 投票
0 回答
312 浏览

windows-installer - 升级时如何更改 INSTALLDIR?

我正在INSTALLDIR我的安装程序中更改我的位置。在我的安装程序项目中,以前我安装在位置“XYZ”,现在我想安装在位置“PQR”。所以我INSTALLDIR在我的安装程序中更改了属性。它适用于全新安装,但在升级方案时它不会改变 INSTALLDIR。那么我该如何处理升级场景的这个问题呢?

0 投票
1 回答
56 浏览

wix - 带有 RegSearch 的旧属性正在影响产品升级(没有此属性的新版本)

我继承了在 WiX 中创建的 MSI 项目,现在我正在尝试解决一些不幸存在的问题。

有一个记住属性模式,用于查找保存在注册表项中的特定目录:

然后将该SpecificKey值保存在AUTO_FOUND_DIR属性中。

然后黑魔法出现了。一个单独的组件持有(除其他外)位于ProgramMenuFolder(非广告)主可执行文件的快捷方式。

有人告诉我,使用 ofutil:RemoveFolderEx是一个旧问题的解决方法,在该问题中,此快捷方式是孤立的并且在卸载过程中没有被删除:

问题是:我不需要这种解决方法(以及AUTO_FOUND_DIR属性的使用。我已经删除了该代码,但在升级期间(主要,Product并且PackageGUID 设置为"*"UpgradeCode与以前的版本具有相同的值)我可以在详细日志中看到从AUTO_FOUND_DIR存在的MSI 中,RegistrySearch读取具有特定目录的键值,并因此util:RemoveFolderEx删除该目录和位于该目录的所有组件。

我的问题是:如何检测为什么在升级过程中使用这个旧属性以及如何摆脱它?

附加信息:安装范围为PerMachine,ALLUSERS设置为 1。升级版本的 MSI 已删除此属性。