标签: major-upgrade

wix主要升级没有安装所有文件

我有一个非常简单的WiX项目(版本3.7),它安装了一些文件(.NET程序版本6.0.0.0).我准备使用WiX中的MajorUpgrade功能发布新版本6.0.1.0.

我在Product元素中保持UpgradeCode相同,并将Version从6.0.0.0更改为6.0.1.0

<Product Id="*" Name="MyApp" Version="6.0.1.0" Manufacturer="Me" 
       UpgradeCode="$(var.TheUpgradeCodeGUID)">
Run Code Online (Sandbox Code Playgroud)

在安装了6.0.0.0的计算机上,运行新安装程序.

删除旧版本6.0.0.0运行正常(所有已安装的文件都被删除),但是当安装程序继续安装新版本时,缺少2个文件:第三方DLL和第三方EXE(没有已被更改)未重新安装.

<Component Id="AutomaticUpdaterWPF.dll" Guid="*">
        <File Id="AutomaticUpdaterWPF.dll" Source="AutomaticUpdaterWPF.dll" KeyPath="yes" Checksum="yes" />
</Component>
<Component Id="wyUpdaterProgram" Guid="*">
        <File Id="wyUpdaterProgram" Source="wyUpdate.exe" KeyPath="yes" Checksum="yes" />
</Component>
Run Code Online (Sandbox Code Playgroud)

在主要升级期间,<ComponentGroup>中的所有其他文件(一些已修改,一些未修改,包括其他第三方DLL)正在正确安装.

如果我在主要升级后单击"修复",则会重新显示2个丢失的文件.此外,如果我是第一次安装版本6.0.1.0(没有升级,但在干净的机器上首次安装),则直接和正常安装这两个文件.(在几台Windows机器上测试过(XP,7和8)

任何人有什么建议错误以及如何解决?

wix major-upgrade

29
推荐指数
3
解决办法
8497
查看次数

WiX MajorUpgrade of Windows Service,保留.config,并避免重启

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

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

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

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

这是它的主要内容(以后也捆绑在一起,以防万一在某种程度上很重要):

<MajorUpgrade DowngradeErrorMessage="A newer version is already installed." 
              Schedule="afterInstallExecute" />

<ComponentGroup Id="ServiceCG">
    <Component Id="Service" Guid='*' Win64='yes' Directory='INSTALLDIR'>
        <File Id='ServiceEXE' Source='$(var.root)Service.exe' />
        <ServiceInstall Id="ServiceInstall"
                          Name="MyService"
                          DisplayName="My Server"
                          Type="ownProcess"
                          Start="auto"
                          ErrorControl="normal"
                          Description="My Server Service"
                          Interactive="no"
                          Account="[...]"
                          Password="[...]" />
        <ServiceControl Id="StopService" Name="MyService" Start="install" 
                        Stop="uninstall" Wait="yes" Remove="both" />
        <util:User Id="UpdateServiceAccountLogonAsService" …
Run Code Online (Sandbox Code Playgroud)

installer windows-installer wix major-upgrade

10
推荐指数
1
解决办法
1888
查看次数

主要升级首选的升级或升级ID?

我们正在尝试进行重大升级.在我调查的过程中,我找到了两种方法.

一个是使用升级ID,另一个是Majorupgrade标记.

似乎Majorupgrade很容易做到.但是,scheduleinitialize操作之前的计划不包含任何内容.

我不确定应该使用哪个.

主要是哪一个[和推荐]?

windows-installer wix major-upgrade

8
推荐指数
1
解决办法
5170
查看次数

Wix主要升级,无论新文件版本如何都替换文件

我的WiX安装程序(Wix 3.10,MSI 4.5)MajorUpgrade用于更新.要heat.exe预安装的文件将在预构建时收集.当前(较旧的)msi文件包含一个文件nlog.dll(随NuGet包一起提供v4.1.0),该文件的文件版本为4.1.0.0,产品版本4.1.0和上次写入时间为2015-09-01.

由于nlog团队遇到了一些强烈的命名问题,他们发布了一个更新的NuGet包v4.1.1,其中包含更新nlog.dll 后的文件版本减少回来,4.0.0.0而其产品版本已增加到4.1.1,最后写入时间为2015-09-14.

现在我遇到了Robbie在这里遇到的一个相关问题:wix主要升级没有安装所有文件:当我安装新的msi软件包并执行主要升级时,现在nlog.dll(根据其文件版本更新,但更旧)根据其文件日期和产品版本)正在删除,但新nlog.dll安装没有.

但是,使用Schedule="afterInstallExecute"Schedule="afterInstallFinalize"建议不会对我有用.不像在Robbie的情况下那样删除较新的文件而不安装较旧的文件,它不会覆盖当前文件,只是将其留在原位.

简而言之,我希望我的安装程序只需安装随附的所有文件,无论文件/产品/程序集版本是什么.在有效的情况下,需要用较旧的文件替换较新的文件.你不能告诉安装程序引擎忽略文件版本/日期吗?如果没有,我的选择是什么?

windows-installer wix major-upgrade

6
推荐指数
1
解决办法
2797
查看次数

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

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

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

<InstallExecuteSequence>
....
    <Custom Action="HxPrepare" Before="InstallValidate">NOT Installed</Custom>
    <RemoveRegistryValues After="InstallValidate" />
    <WriteRegistryValues />
   <Custom Action="HxFinalize" Before="StartServices">NOT Installed</Custom>
....
<InstallExecuteSequence />
Run Code Online (Sandbox Code Playgroud)

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

回复 PhilDW 的评论:

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

<InstallExecuteSequence>
<RemoveExistingProducts After="InstallInitialize" />
<Custom Action="PreventDowngrade" After="FindRelatedProducts">DOWNGRADE</Custom>
<Custom Action="HxInit" After="CostFinalize">NOT Installed</Custom>
<Custom Action="HxPrepare" Before="InstallValidate">NOT Installed</Custom>
<Custom Action="HxFinalize" Before="StartServices">NOT Installed</Custom>
<Custom Action="HxPreUninstall" Before="InstallValidate">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
<Custom Action="HxUninstall" After="InstallInitialize">(NOT UPGRADINGPRODUCTCODE) AND …
Run Code Online (Sandbox Code Playgroud)

installation windows-installer wix upgrade major-upgrade

5
推荐指数
0
解决办法
718
查看次数

在Wix 3.8中检测MajorUpgrade

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

如果完成了与全新安装相比的升级,我想跳过安装程序中的一个对话框,但是到目前为止,在以下示例中,我仍无法弄清要使用什么条件(例如“ Installed AND PATCH”)。

     <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" 
              Value="WelcomeDlg" Order="2">Installed AND PATCH</Publish>
Run Code Online (Sandbox Code Playgroud)

windows-installer wix wix3 major-upgrade

3
推荐指数
1
解决办法
2415
查看次数

将条目添加到 MSI UpgradeTable 以删除相关产品

WiX 安装程序产品节点有一个属性UpgradeCode。它用于指代同一产品的先前版本。该值存储在UpgradeTable中。UpgradeTable 由FindRelatedProducts操作进行解析。

允许UpgradeCode删除具有相同的以前的产品UpgradeCode。但计划是将几个过时的遗留产品集成到一个组合的单一产品中。UpgradeCode该遗留产品的特征是已知的。我希望将此代码添加到 UpgardeTable 中也能删除此遗留产品。这可以通过填充 UpgradeTable 来完成。

如何在 WiX 设置的升级表中添加更多条目?

编辑:需要什么语法?

有没有更好的方法来删除升级后废弃的产品?

windows-installer wix major-upgrade

3
推荐指数
1
解决办法
2581
查看次数

WiX 对主要升级回滚的自定义操作未运行

我有一个 WiX 设置,其中有

<MajorUpgrade Schedule="afterInstallInitialize" 
  DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." />
Run Code Online (Sandbox Code Playgroud)

如果升级过程中发生错误,安装程序将回滚并恢复以前安装的版本。但是,通过自定义操作创建的计划任务会丢失并且永远不会恢复。

我用于创建/删除/回滚任务的自定义操作是:

<!-- task scheduling -->
<CustomAction Id="CreateScheduledTask" Return="check" Directory="SystemFolder"
              ExeCommand="&quot;[SystemFolder]SCHTASKS.EXE&quot; /Create /RU &quot;[TASK_DOMAIN]\[TASK_USERNAME]&quot; /RP [TASK_PASSWORD] /SC DAILY /TN &quot;Maintenance&quot; /TR &quot;[\\]&quot;[SERVICELOCATION]Maintenance.exe[\\]&quot;&quot; /ST [TASK_TIME]"
              Execute= "deferred"/>
<!-- rollback in case something went wrong -->
<CustomAction Id="CreateScheduledTask_Rollback" Execute="rollback"  Return="ignore" Directory="SystemFolder" ExeCommand="&quot;[SystemFolder]SCHTASKS.EXE&quot; /Delete /TN &quot;Maintenance&quot; /F" />
<!-- removal of task -->
<CustomAction Id="RemoveScheduledTask" Return="ignore" Directory="SystemFolder" ExeCommand="&quot;[SystemFolder]SCHTASKS.EXE&quot; /Delete /TN &quot;Maintenance&quot; /F" Execute= "immediate"/>
Run Code Online (Sandbox Code Playgroud)

其排队为 …

custom-action wix rollback major-upgrade

2
推荐指数
1
解决办法
1698
查看次数

在安装时重新启动,在卸载时不重新启动

我们有一个安装程序,需要在安装时重新启动,但在卸载时也会重新启动。有什么方法可以防止卸载时重新启动吗?

这是我们目前所拥有的:

<InstallExecuteSequence>
  <ScheduleReboot After="InstallFinalize"/>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

提前谢谢了!

windows-installer wix wix3 major-upgrade

1
推荐指数
1
解决办法
922
查看次数