问题标签 [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 回答
320 浏览

installshield - Installshield 2010:我们可以在主要升级期间执行 OnInstalled Feature 事件吗?

我有一个使用 Installshield 2010 创建的安装项目,我想在 Patch Design 中创建一个重大升级,为此:

  • 我更改了产品版本
  • 我更改了产品代码
  • 在升级表中添加了一行
  • 更改了包装代码
  • msi 参数行: REINSTALLMODE=amus REINSTALL=ALL IS_MAJOR_UPGRADE=1

文件正在按预期复制,但我注意到在升级我在 OnInstalled 事件中创建的功能事件时没有执行?有没有办法让这些功能即使在升级中也能在重新安装功能时执行?

提前感谢您的帮助, 亲切的问候, Imen

0 投票
2 回答
2247 浏览

wix - WiX 主要升级 Windows 服务,保留 .config,避免重新启动

我正在努力让 MajorUpgrade、ServiceControl、.config 文件很好地协同工作。 在我的另一个问题之后,我现在又遇到了相反的问题。

之前,文件没有被覆盖,因为 AssemblyFileVersions 是静态的,所以我修复了它。 1)现在,即使Schedule="afterInstallExecute"我的KeyPath='yes' .config文件仍然被覆盖,即使现有文件修改日期与文件创建日期不同并且它被设置为 KeyPath。我目前不得不覆盖.config文件并在安装后重新启动服务。

2)即使我解决了这个问题,我仍然有避免重新启动的问题。如果我这么说Schedule="afterInstallInitialize",那么我相信 .config 文件肯定会与服务一起过早地被删除。如果我说Schedule="afterInstallExecute"服务没有停止,安装后需要重新启动。(没错,对吧?)在安装之前手动停止服务让我避免重新启动。添加net stop自定义操作可以代替ServiceControl我猜的,但是让所有条件都正确似乎很复杂。

3)作为奖励,我不想在升级期间完全删除该服务。我可以停止服务,替换二进制文件,然后重新启动服务吗?这将避免为升级重新输入服务帐户凭据。但当然,它仍然需要在第一次安装时安装并在删除功能时卸载。

这是它的主要内容(稍后也会捆绑,以防万一很重要):

相关但未回答:

WiX 版本 3.8.1128.0

0 投票
2 回答
3139 浏览

wix - 在 Wix 3.8 中检测 MajorUpgrade

我正在安装我的软件的所有新版本作为主要升级,因为安装非常小,而且大多数时候,所有文件都会改变。

我想跳过安装程序中的一个对话框,如果完成了与全新安装相比的升级,但到目前为止,我还没有弄清楚以下示例中要使用的条件(如“已安装和补丁”)。

0 投票
1 回答
411 浏览

wix - 在安装程序主要升级中迁移属性

在主要升级工作流程中,是否有任何方法可以查看/迁移从正在删除的安装到新安装的属性?

这应该无关紧要,但这是我的背景。我正在使用 MigrateFeatureStates 来防止用户在重大升级期间重新创建服务。我看到的问题是,如果用户为服务功能指定自定义文件夹位置,则升级失败,因为在文件安装到默认位置时服务仍使用自定义路径。

服务安装/控制

安装顺序

0 投票
2 回答
2243 浏览

wix - WiX Installer:获取正在升级的产品版本

在从版本 X 到版本 Y 的重大升级期间,我需要一个属性/变量来说明版本 X 正在升级。

当使用由 WiX Installer 构建的设置对产品进行重大升级时,有没有办法获得正在升级的版本号?

0 投票
0 回答
404 浏览

wix - wix 生成的用于更新旧版本的安装程序不会删除文件夹

我有 2 个由 WiX 生成的 msi 安装程序。第一个(安装程序 1)的版本 =“1.0.0.0”,而第二个(安装程序 2)的版本 =“1.1.0.0”。它们都有 ProductCode = "*" 和 UpgradeCode = "UpgradeCode"。

安装程序 1 在 %AppData%\MyApp\1.0.0.0 文件夹中安装一个 exe 文件,并在 SOFTWARE\MyApp\1.0.0.0 下的注册表中写入一个条目。该条目的值为 1.0.0.0

安装程序 2 的预期行为是,在其安装过程中,以前的版本 (1.0.0.0) 将从控制面板中卸载,其条目将从注册表中删除,文件夹将从 %AppData%\MyApp 中卸载。

真正发生的是版本 1.0.0.0 未从控制面板中安装,条目已从注册表中删除并安装了新版本的条目,但文件夹 %AppData%\MyApp\1.0.0.0 仍然存在,并在下创建了一个新文件夹 1.1.0.0 %AppData%\MyApp。

谁能帮我找出我的代码有什么问题以及如何解决它?

更新的问题:

我已经在 Windows 8.1x32 和 Windows 8.1x64 上测试了上面的代码。安装程序 2 在 Windows 8.1x64 上正常工作;在其安装过程中,以前的版本 (1.0.0.0) 从控制面板中卸载,其条目从注册表中删除,文件夹从 %AppData%\MyApp 中卸载。在 Windows 8.1x32 安装程序 2 上,仅从控制面板中卸载以前的版本,但其条目仍保留在注册表中,文件夹不会被删除。

我使用 cmd 和以下命令运行安装程序 2:msiexec /i installer2.msi /l*v log.txt

Windows 8.1x64 输出:操作 2:45:13:FindRelatedProducts。搜索相关应用 动作开始 2:45:13:FindRelatedProducts。FindRelatedProducts:找到应用程序:{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} MSI (c) (48:7C) [02:45:13:828]:属性更改:添加 OLDER_VERSION_DETECTED 属性。其值为“{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}”。操作于 2:45:13 结束:FindRelatedProducts。返回值 1。

Windows 8.1x32 输出:MSI (c) (68:20) [01:45:29:831]:执行操作:FindRelatedProducts MSI (c) (68:20) [01:45:29:831]:注意:1 : 2205 2: 3: ActionText 动作 1:45:29: FindRelatedProducts。搜索相关应用 操作开始时间 1:45:29:FindRelatedProducts。操作于 1:45:29 结束:FindRelatedProducts。返回值 1。

由于某种原因在 Windows 8.1x32 安装程序 2 上找不到版本 1.0.0.0 有什么想法会导致上述问题吗?

0 投票
2 回答
159 浏览

windows-installer - 强制 .msi 跳过删除某些文件

我想让 .msi 在升级时不删除某些文件。我看到我可以添加要删除的文件,但我没有找到任何关于如何对 .msi 说“不要删除它(升级时)”的信息。

有人可以帮我吗?

0 投票
1 回答
638 浏览

wix - How to prevent registry delete as part of already installed MSI's uninstallation?

We have an MSI currently in production (say Broker.msi). As part of installation, the MSI (defined in Wix) creates a new registry key(Broker) and adds 2 subkeys under it. After installation, when user registers our product, 1 more registry key called "Key3" is added under "Broker" node. Please note that "Key3" contains registration key which is extremely important & accessed by other layers of the product.

[Registry Structure post install & register]

HKLM\Software\Microsoft\Broker

  • Key1 (added by installer)

  • Key2 (added by installer)

  • Key3 (added when user registers the product)

[Wix Code Snippet]

Problem: So far since we were using patching, we dint face any issues with the upgrade. From the next release, we want to move to major upgrades but the biggest challenge is : During major upgrade, the old product will get uninstalled. As per the wix snippet, the action element for the "Broker" registry element is "CreateAndRemoveOnUninstall" so the entire "Broker" node is getting deleted, along with the "Key3" subkey.

If I update action to "Create", the problem will get fixed with new installations, but since the msi is already in production how do I prevent it from deleting the registry as part of major upgrade for existing products?

0 投票
1 回答
764 浏览

wix - WIX - 防止执行卸载操作并在重大升级时复制一些文件

这是我的安装执行顺序:

所以我需要实现主要的升级功能。名为“actionInstall”的自定义操作负责将 MySQL exe 注册为服务并运行应用程序,该操作通过连接到它并执行我的安装程序中包含的一些 sql 脚本来执行所有必要的数据库更新。

“actionUninstall”负责注销mysql服务。目前我对升级没有任何支持。

我需要实施重大升级。所以在升级时我需要执行以下操作:

  • 复制并替换所有安装程序文件,除了 MySQL 二进制文件(MySQL 被视为永远不会更改)。所有文件都应复制到以前使用过的程序目录(可以是非标准的),无需任何用户确认。

  • 不要执行 SetInstallParameters、actionInstall、SetUninstallParameters 和 actionUninstall。相反,我将创建另一个仅用于升级的自定义操作。它只会执行应用程序来执行数据库升级

  • 不显示任何设置对话框(例如,目标目录选择、许可协议对话框)。

我的问题:

  • 看来,主要升级也会导致执行安装和卸载 - 如何避免它?

  • 如何从复制到目标目录中排除某些文件(MySQL 二进制文件),但仅在升级时(安装时应复制它们)

  • 如何将新文件的目标目录设置为与以前安装时使用的相同(可以是用户在首次安装时选择的任何目录),而不要求用户选择目录?
0 投票
2 回答
1002 浏览

wix - RemoveExistingProducts suppress=true

我试图在升级时抑制删除现有产品的过程。我正在使用以下代码:

它抛出一个错误说:请停止覆盖基本定义