对于我产品的新版本 v1.9.0,我创建了一个新的 MSI 安装程序。该应用程序的先前版本是 v1.7.0。
卸载旧版本然后安装新版本工作正常。
但是当我尝试使用 v1.9.0 安装程序更新旧版本时,正好缺少一个文件 ( NLog.dll )。所有其他文件都被复制得很好。
我正在使用 heat.exe 为我的应用程序的所有依赖项创建组件。因此NLog.dll的处理方式与其他所有文件完全相同,但它是唯一显示这种奇怪行为的文件。
这些是此文件的相关日志片段。
第 5174 行:
MSI (s) (E4:1C) [17:12:42:343]: WIN64DUALFOLDERS: Substitution in 'C:\Program Files (x86)\Cisco\DiagnosticBridge\bin\NLog.dll' folder had been blocked by the 1 mask argument (the folder pair's iSwapAttrib member = 0).
Run Code Online (Sandbox Code Playgroud)
第 37733 行:
MSI (s) (E4:1C) [17:13:12:252]: Executing op: FileRemove(,FileName=NLog.dll,,ComponentId={53AAD98D-AFDB-4D70-ADCC-5305C3174ED5})
RemoveFiles: File: NLog.dll, Directory: C:\Program Files (x86)\Cisco\DiagnosticBridge\bin\
MSI (s) (E4:1C) [17:13:12:260]: Verifying accessibility of file: NLog.dll
MSI (s) …Run Code Online (Sandbox Code Playgroud) 随着 .NET Core 3 的新版本,我正在尝试使用新的工作服务模板制作 Windows 服务。我需要能够使用组策略安装它,而 WiX 似乎是这项工作的工具。
我已经创建了 .wxs 文件并且没有指定 ServiceInstall 部分,它安装得很好。
这是我的文件:更新
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="SystemInformationService" Language="1033" Version="1.0.0.0" Manufacturer="MyCompany" UpgradeCode="f08191cf-461e-481b-a2a1-6f54d6ae5331">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<!-- Embed cab files, don't include them in the output -->
<MediaTemplate EmbedCab="yes"/>
<!-- Default WiX dialog set -->
<UIRef Id="WixUI_Mondo" />
<!-- License agreement -->
<WixVariable Id="WixUILicenseRtf" Value="LicenseAgreement.rtf" />
<Feature Id="ProductFeature" Title="SystemInformationService.Setup" Level="1">
<ComponentGroupRef Id="ProductComponents" /> …Run Code Online (Sandbox Code Playgroud) 如何创建自定义操作并将其链接到我的 WiX 设置项目?
我有:
当前,每当我构建软件包时,都必须像这样在Product.wxs文件中手动增加Version属性:
<Product
Id = "*"
Version="4.1.3"
Run Code Online (Sandbox Code Playgroud)
我想自动化,以简化构建过程。我们对exe / dll文件使用以下版本控制方案:
major.minor.special.build
Run Code Online (Sandbox Code Playgroud)
特殊字符几乎从未使用过,并且设置为0,并且约定是按如下方式对打包的MSI进行版本控制,因为您只能使用三个数字:
major.minor.build
Run Code Online (Sandbox Code Playgroud)
我见过的唯一解决方案是让您获取另一个项目的4位数字版本,然后截断构建版本,因此最终得到以下结果:
major.minor.special
Run Code Online (Sandbox Code Playgroud)
显然,这对我们的方案不起作用,因为我们丢失了内部版本号。我该如何抓住major.minor.build而忽略特殊性?