【发布时间】:2020-03-03 16:14:34
【问题描述】:
我正在尝试将已安装的 MSI 软件包从 V1 升级到 V2。 MSI 包是捆绑包的一部分(捆绑包中有 10 个不同的 MSI 包,但只有这一个会导致升级问题)。
我遇到的问题是,升级后新版本在控制面板中显示正确,但是当我转到磁盘时,新文件没有被复制,我只剩下磁盘上的旧文件(V1 文件)。 如果我从控制面板进行修复,则会使用正确的版本复制新文件。
我使用的是 WixSharp 1.4.4.1 版。
有谁知道为什么升级没有正确完成?
Bundle.wxs 的外观示例如下所示:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
<Bundle Name="Test.Installer"
Version="!(bind.packageVersion.Test_Package_msi)"
Manufacturer="Test"
UpgradeCode="bdbd5b31-e749-455d-9fea-cd81f3297ca1" >
<BootstrapperApplicationRef Id ="ManagedBootstrapperApplicationHost" >
<PayloadGroupRef Id ="InstallerPayload" />
</BootstrapperApplicationRef>
<Chain>
<PackageGroupRef Id ="NetFx472Redist" />
<PackageGroupRef Id ="InstallerPackages" />
</Chain>
</Bundle>
<?define NetFx472MinVersion = 4703062 ?>
<?define NetFx472EulaLink = https://referencesource.microsoft.com/license.html ?>
<?define NetFx472RedistLink = https://go.microsoft.com/fwlink/?linkid=863265 ?>
<Fragment>
<WixVariable Id="WixMbaPrereqPackageId" Value="NetFx472Redist" />
<WixVariable Id="WixMbaPrereqLicenseUrl" Value="$(var.NetFx472EulaLink)" Overridable="yes" />
<WixVariable Id="NetFx472RedistCondition" Value="Netfx4FullVersion >= $(var.NetFx472MinVersion)" Overridable="yes" />
<WixVariable Id="NetFx472RedistPackageDirectory" Value="Redist\NETFX472\" Overridable="yes" />
<util:RegistrySearch
Root="HKLM"
Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
Value="Version"
Variable="Netfx4FullVersion" />
<PackageGroup Id="NetFx472Redist">
<ExePackage
DisplayName="Microsoft .NET Framework 4.7.2"
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx472FullLog].html""
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx472FullLog].html""
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx472FullLog].html""
PerMachine="yes"
DetectCondition="!(wix.NetFx472RedistCondition)"
InstallCondition="NOT !(wix.NetFx472RedistCondition)"
DownloadUrl="$(var.NetFx472RedistLink)"
Id="NetFx472Redist"
Vital="yes"
Permanent="yes"
Protocol="netfx4"
Compressed="yes"
SourceFile="..\Redist\NETFX472\NDP472-KB4054530-x86-x64-AllOS-ENU.exe"
Name="!(wix.NetFx472RedistPackageDirectory)NDP472-KB4054530-x86-x64-AllOS-ENU.exe"
>
</ExePackage>
</PackageGroup>
</Fragment>
<Fragment>
<PayloadGroup Id ="InstallerPayload">
<Payload SourceFile = "$(var.SolutionDir)\Libraries\Microsoft.Deployment.WindowsInstaller.dll" />
<Payload SourceFile = "$(var.SolutionDir)\Libraries\GalaSoft.MvvmLight.dll"/>
<Payload SourceFile = "$(var.SolutionDir)\Libraries\GalaSoft.MvvmLight.Extras.dll"/>
<Payload SourceFile = "$(var.SolutionDir)\Libraries\GalaSoft.MvvmLight.Platform.dll"/>
<Payload SourceFile = "$(var.SolutionDir)\Libraries\log4net.dll"/>
</PayloadGroup>
</Fragment>
<Fragment>
<PackageGroup Id ="InstallerPackages">
<MsiPackage SourceFile="$(var.SolutionDir)\Libraries\MSI\Package1.msi" ForcePerMachine="yes"
Id="Package1_msi" DisplayName="Package 1" Visible="yes" Cache="yes" DisplayInternalUI="no" Description="23A29233-37FD-4079-92AF-8337998DF4D3">
</MsiPackage>
<!-- 10 other packages -->
</PackageGroup>
</Fragment>
</Wix>
MSI 项目是使用以下行创建的:
var project = new ManagedProject();
project.Name = "Test";
project.Description = "Test Package";
project.GUID = Guid.Parse("{94682162-F133-40A3-92BB-0AF08142474C}");
project.ProductId = Guid.Parse("{94682162-F133-40A3-92BB-0AF08142474C}");
project.Dirs = GetDirectoriesAndFilesToInstall();
project.Version = GetInstallerVersion();
project.BannerImage = "Banner.bmp";
project.Actions = new WixSharp.Action[]
{
new ElevatedManagedAction(CustomActions.UninstallService, Return.check, When.After, Step.InstallInitialize, Condition.Always),
new ElevatedManagedAction(CustomActions.InstallService, Return.check, When.After, Step.InstallExecute, Condition.Always),
};
project.BuildMsi(msiPath);
【问题讨论】:
-
您是否尝试添加“new Property("REINSTALLMODE", "amus")" 以强制重新安装文件?
-
是的,试过了,但什么也没做。旧版本的文件保持不变。
标签: wix windows-installer upgrade