wix 相关问题

WiX工具集(以前称为Windows Installer XML)是一个工具集,可以从XML源代码构建Windows安装包和WiX引导程序。该工具集支持一个命令行环境,开发人员可以将其集成到他们的构建过程中,以构建MSI和MSM安装程序包以及EXE引导程序。对于基于云的Web开发平台,请使用[wixcode]标记。

如何在自定义Wix应用程序中存储和检索wix应用程序设置?

我目前正在开发一款 Wix 应用程序(Wix CLI / React 风格),该应用程序将具有一个或多个自定义元素。这些自定义元素有一些可在元素本身中配置的道具(使用面板...

回答 1 投票 0

在WIX 4.0.5制作的msi安装程序中执行Winget安装命令

我有 powershell 脚本,我想在 WIX 自定义操作的帮助下运行它。在这个脚本中,我有 winget install 命令,我想使用它来安装 dotnet 运行时。 因为...

回答 1 投票 0

WiX v4 引导程序进程在安装结束后仍保持活动状态

我有一个 WiX v4 托管 BA,它有许多可再发行组件作为先决条件。安装完成并且一切都安装成功,但 3 个引导程序进程经常从不

回答 1 投票 0

通过注册表检测安装的MS Office是32位还是64位

我想安装基于excel版本的vsto addin(32位或64位)。 我计划捆绑 32 位和 64 位 msis,并通过确定 Excel 版本来安装一个。 我能找到这个

回答 5 投票 0

Wix工具集构建项目时系统找不到文件'[INSTALLFOLDER]\MyService.exe

我的product.wxs如下 我的product.wxs如下 <?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:Util="http://schemas.microsoft.com/wix/UtilExtension"> <Product Id="*" Name="FileDeletionRecordServiceSetup" Language="1033" Version="1.0.0.0" Manufacturer="HP GIS" UpgradeCode="7ec63c63-ad12-4cc7-bf7e-138caa10380f"> <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> <MediaTemplate EmbedCab="yes" /> <Feature Id="ProductFeature" Title="FileDeletionRecordServiceSetup" Level="1"> <ComponentGroupRef Id="ProductComponents" /> <ComponentGroupRef Id='svcComponents' /> </Feature> <UI> <UIRef Id="WixUI_InstallDir" /> </UI> <Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" /> <Property Id="INSTALLFOLDER" Secure="yes" /> </Product> <Fragment> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="INSTALLFOLDER" Name="FileDeletionRecordService" /> </Directory> </Directory> </Fragment> <Fragment> <ComponentGroup Id='svcComponents' Directory="INSTALLFOLDER"> <Component Id="svcInstallation" Guid="{05F58B9B-BC8F-44BD-A4D1-DB4B8F824111}"> <File Id="FileDeletionRecordServiceEXE" Source="[INSTALLFOLDER]\FileDeletionRecordService.exe" /> <ServiceInstall Id="ServiceInstaller" Type="ownProcess" Name="FileDeletionRecordService" DisplayName="FileDeletionRecordService" Description="Record file deletion for specified directory" Start="auto" Account="NT AUTHORITY\LocalService" ErrorControl="normal" /> <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="FileDeletionRecordService" Wait="yes" /> </Component> <Component Id="cmpEventLog" Guid="{D15001E4-24F7-407E-977B-47A1B1F0B4B4}" KeyPath="yes" > <Util:EventSource Name="FileDeletionRecordSource" Log="FileDeletionRecordService" EventMessageFile="%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll" /> </Component> </ComponentGroup> </Fragment> </Wix> 在上面我使用 UIRef WixUI_InstallDir 来获取 INSTALLFOLDER 的值。 我将它用于我想要安装的 Windows 服务 exe <File Id="FileDeletionRecordServiceEXE" Source="[INSTALLFOLDER]\FileDeletionRecordService.exe" /> <ServiceInstall Id="ServiceInstaller" Type="ownProcess" Name="FileDeletionRecordService" DisplayName="FileDeletionRecordService" Description="Record file deletion for specified directory" Start="auto" Account="NT AUTHORITY\LocalService" ErrorControl="normal" /> 但它表明 系统找不到该文件 '[安装文件夹]\FileDeletionRecordService.exe'。 我尝试构建项目时出错。 让我困惑的是,该文件当然不应该存在,因为它还没有安装。但我确实需要从“[INSTALLFOLDER]\FileDeletionRecordService.exe”安装服务。 这是否意味着我应该先创建目录、移动文件并手动安装服务才能创建安装包?这是惯例吗?因为我觉得这没有意义,我认为有一些用法我误解了,但不确定我做错了什么。 [INSTALLFOLDER] 是在安装/卸载时解析(又名:取消引用)INSTALLFOLDER 属性或目录的语法。由于 Source 属性仅在构建时使用,因此该值没有分辨率。您需要在 Source 属性中引用要安装的文件。 为了更完整地理解,您可以观看 部署 Dojo S1:E11 至第 18 集。

wix
回答 1 投票 0

如何在安装过程中动态修改Bundle版本

安装过程的第一步需要从文件中读取版本并动态使用它来修改捆绑包版本。 是否建议动态更改捆绑版本...

wix
回答 1 投票 0

间歇性 Windows 安装程序错误 2753

我写这篇文章是为了那些可能有同样问题的人。我有一个非常简单的安装程序包:WIX、1 个功能、4 个组件、1 个自定义操作,没有 UI。错误 2753 “文件...未标记为

回答 4 投票 0

Wix 工具集不会创建事件日志条目

我将 Util:EventSource 元素添加到此 stackoverflow 帖子的 Product.wxs 引用中。 我将 Util:EventSource 元素添加到我的 Product.wxs 引用中,指向此 stackoverflow 帖子。 <?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:Util="http://schemas.microsoft.com/wix/UtilExtension"> <Product Id="*" Name="FileDeletionRecordServiceSetup" Language="1033" Version="1.0.0.0" Manufacturer="HP GIS" UpgradeCode="7ec63c63-ad12-4cc7-bf7e-138caa10380f"> <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> <MediaTemplate EmbedCab="yes" /> <Feature Id="ProductFeature" Title="FileDeletionRecordServiceSetup" Level="1"> <ComponentGroupRef Id="ProductComponents" /> </Feature> <UI> <UIRef Id="WixUI_InstallDir" /> </UI> <Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" /> </Product> <Fragment> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="INSTALLFOLDER" Name="FileDeletionRecordService" /> </Directory> </Directory> </Fragment> <Fragment> <Component Id="svcInstallation" Directory="INSTALLFOLDER"> <File Id="FileDeletionRecordServiceEXE" Source="FileDeletionRecordService.exe" KeyPath="yes"/> <ServiceInstall Id="ServiceInstaller" Type="ownProcess" Name="FileDeletionRecordService" DisplayName="FileDeletionRecordService" Description="Record file deletion for specified directory" Start="auto" Account="NT AUTHORITY\LocalService" ErrorControl="normal" /> <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="FileDeletionRecordService" Wait="yes" /> </Component> </Fragment> <Fragment> <Component Id="cmpEventLog" Directory="INSTALLFOLDER"> <Util:EventSource Name="FileDeletionRecordSource" Log="FileDeletionRecordService" EventMessageFile="%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll" /> </Component> </Fragment> </Wix> 它不会创建事件日志条目,并且安装过程没有显示任何错误。 然后我尝试了本文中的另一种方法。但还是不行。 我尝试使用 msiexec /i FileDeletionRecordServiceSetup.msi /l*v install.log 安装,但没有看到任何似乎相关的日志(或者也许我不知道具体要查找什么)。 (日志太长,无法附加,因此不会包含在此处) 我认为我的wix版本是3.1(在wixproj中,项目版本是3.1) Rob Mensching 在我的另一篇 SO 帖子中回答了这个问题。 基本上,我应该将我的组件捆绑在 ComponentGroupRef 中并添加到 Feature,以便它们实际上可以包含在安装中。

wix
回答 1 投票 0

WiX 脚本仅包含欢迎和已完成屏幕

我需要一个 WiX 3 脚本来显示仅显示 2 个对话框:欢迎和已完成。就是这样,不需要 EULA、文件夹选择等。感谢所有帮助。

回答 3 投票 0

Wix 工具集不安装 Windows 服务

我在这个 stackoverflow 帖子中添加了代码参考。 下面是我的Product.wxs 我添加了代码参考到这个stackoverflow帖子。 以下是我的产品.wxs <?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:Util="http://schemas.microsoft.com/wix/UtilExtension"> <Product Id="*" Name="FileDeletionRecordServiceSetup" Language="1033" Version="1.0.0.0" Manufacturer="HP GIS" UpgradeCode="7ec63c63-ad12-4cc7-bf7e-138caa10380f"> <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> <MediaTemplate EmbedCab="yes" /> <Feature Id="ProductFeature" Title="FileDeletionRecordServiceSetup" Level="1"> <ComponentGroupRef Id="ProductComponents" /> </Feature> <UI> <UIRef Id="WixUI_InstallDir" /> </UI> <Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" /> </Product> <Fragment> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="INSTALLFOLDER" Name="FileDeletionRecordService" /> </Directory> </Directory> </Fragment> <Fragment> <Component Id="svcInstallation" Directory="INSTALLFOLDER"> <File Id="FileDeletionRecordServiceEXE" Source="FileDeletionRecordService.exe" KeyPath="yes"/> <ServiceInstall Id="ServiceInstaller" Type="ownProcess" Name="FileDeletionRecordService" DisplayName="FileDeletionRecordService" Description="Record file deletion for specified directory" Start="auto" Account="NT AUTHORITY\LocalService" ErrorControl="normal" /> <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="FileDeletionRecordService" Wait="yes" /> </Component> </Fragment> <Fragment> <Component Id="cmpEventLog" Directory="INSTALLFOLDER"> <Util:EventSource Name="FileDeletionRecordSource" Log="FileDeletionRecordService" EventMessageFile="%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll" /> </Component> </Fragment> </Wix> 它将内容安装到目录中,但未安装为 Windows 服务(没有服务条目添加到“服务”面板) 我尝试msiexec /i FileDeletionRecordServiceSetup.msi /l*v install.log看看是否有任何奇怪的事情,但似乎没有任何错误或相关消息。不确定是否是因为我对此不熟悉,所以不知道我应该寻找什么。 (日志太长,无法附加,因此不会包含在此处) 我认为我的wix版本是3.1(在wixproj中,项目版本是3.1) 从您提供的代码片段中,没有任何内容引用 svcInstallation 组件的片段。因此,链接器会忽略该片段中的代码。 假设服务和事件注册一起进行,我会像这样合并最后两个片段: <Fragment> <ComponentGroup Id='svcComponents' Directory="INSTALLFOLDER"> <Component Id="svcInstallation"> <File Id="FileDeletionRecordServiceEXE" Source="FileDeletionRecordService.exe" /> <ServiceInstall Id="ServiceInstaller" Type="ownProcess" Name="FileDeletionRecordService" DisplayName="FileDeletionRecordService" Description="Record file deletion for specified directory" Start="auto" Account="NT AUTHORITY\LocalService" ErrorControl="normal" /> <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="FileDeletionRecordService" Wait="yes" /> </Component> <Component Id="cmpEventLog"> <Util:EventSource Name="FileDeletionRecordSource" Log="FileDeletionRecordService" EventMessageFile="%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll" /> </Component> </ComponentGroup> </Fragment> 并在Feature中添加: <ComponentGroupRef Id='svcComponents' />

wix
回答 1 投票 0


WiX v4 引导程序 - 将 InstallFolder 设置为程序文件无法解决

我有一个 WiX v4 项目,它使用引导程序,在 中声明。我想根据程序文件文件夹设置默认的 InstallFolder,因此我的结构如下: 我有一个 WiX v4 项目,它使用引导程序,在 <Bundle> 中声明。我想根据程序文件文件夹设置默认的InstallFolder,所以我的结构如下: <Wix ...> <Bundle ...> <Variable Name="InstallFolder" Type="string" Value="[ProgramFilesFolder]MyProduct" /> <BootstrapperApplication> <bal:WixStandardBootstrapperApplication Theme="hyperlinkLicense" LicenseUrl="" /> </BootstrapperApplication> <Chain> ... </Chain> </Bundle> </Wix> 但是[ProgramFilesFolder]没有解决,我看到的只是这个: 我在网上看到了几个例子,表明这就是它的完成方式(wix 工具集中没有明显的文档显示如何解析包中的变量)。我做错了什么? 将变量 Type="string" 更改为 Type="formatted",变量 [ProgramFilesFolder] 将被解析

回答 1 投票 0

使用 PowerShell 脚本安装 MSI 包时 SQL 连接出错

我正在尝试在powershell中编写一个脚本,该脚本将在虚拟机上安装10台服务器。这只是简单的脚本,我在其中指定参数列表、MSI 包的路径并被动运行

回答 1 投票 0

Wix 工具集:如果 exe 已存在,则停止安装 msi

我们的产品的 exe 已安装在某些客户端计算机上,如果客户端计算机中已存在该 exe,我们需要阻止安装 msi。 我尝试创建...

回答 1 投票 0

Wix 布尔属性值不起作用

我有以下财产: 1 UI 中绑定到该属性的复选框: 我有以下财产: <Property Id="UPDATEDB">1</Property> UI 中绑定到该属性的复选框: <Control Id="updateDatabase" Type="CheckBox" CheckBoxValue="1" Height="15" Width="95" X="20" Y="74" Text="Update Database" Property="UPDATEDB" /> 还有一个自定义操作,它根据此属性的值执行某些操作 <CustomAction Id="RunDbMigration" Directory="INSTALLDIR" Return="check" ExeCommand='[DBMIGRATIONDIR]\DbMigration.exe' /> <InstallExecuteSequence> <Custom Action="RunDbMigration" After="InstallFinalize">UPDATEDB=1 AND NOT Installed</Custom> </InstallExecuteSequence> 如果我尝试从命令行为 UPDATEDB 传递 0 值: msiexec /i "Setup.msi" /l* UPDATEDB=0 或 msiexec /i "Setup.msi" /l* UPDATEDB="0" 无论如何,复选框的值都会被选中。也就是说,传入的 0 似乎受到尊重,并且 RunDbMigration 操作未运行... 这是怎么回事?为什么这是如此火箭科学? 正如其他人提到的,复选框不是 1/0 意义上的布尔值,而是 null/not-null 意义上的布尔值。 要从命令行取消设置 - 您需要使用类似的东西 msiexec /i "Setup.msi" /l* UPDATEDB="" 您的条件很可能在执行自定义操作之前专门查找 1 的值,这就是您的 CA 未运行的原因。 安装程序属性要么设置为一个值,要么不设置。在内部,该值只是一个字符串,因此“0”、“1”、“true”和“false”是相同的。 当复选框控件的属性设置为某个值(无关紧要)时,复选框控件将被选中;当其属性为空时,复选框控件将被取消选中。 此命令行设置属性并选中复选框: msiexec /i "Setup.msi" /l* UPDATEDB="0" 此命令行不设置属性,因此未选中该复选框: msiexec /i "Setup.msi" /l* 问题是 CheckBoxValue="1"。您可以在这里找到问题的解决方案:https://wix-users.narkive.com/HOW67H18/how-to-conditionally-check-uncheck-a-checkbox

回答 3 投票 0

将标志传递给 ExePackage 的 InstallCommand 不起作用

我正在尝试将弹性代理迭代到我的安装程序链中: ...

回答 1 投票 0

WIX 如何执行使用管理员权限运行已安装文件的自定义操作

在使用 WIX 创建的 Windows Installer msi 包中,我想执行一个自定义操作(用 C# 编写),该操作执行由安装程序安装的 powershell 脚本文件。 该脚本需要...

回答 1 投票 0

WIX - 从捆绑包中卸载 .NET 8

我尝试在我的应用程序中安装和卸载 .NET 8。但我有一个问题。一切都很好,应用程序安装和卸载,但我在卸载 .NET Runtime 和 ASP.NET Core 时遇到问题。 ...

回答 1 投票 0

创建一个新用户并使用该用户安装 Windows 服务

我正在开发一个新的 Wix 安装程序。 我想做的是将 .exe 复制到目录中。 创建一个新用户。 使用该新用户安装 Windows 服务。 <

回答 3 投票 0

WIX 捆绑包创建

我尝试创建一个包含 exe 的 MSI。使用 WIX 中的捆绑选项。这样做时出现错误。有人可以帮我解决这个问题吗?下面是代码: 我尝试创建一个包含 exe 的 MSI。使用 WIX 中的捆绑选项。这样做时出现错误。有人可以帮我解决这个问题吗?下面是代码: <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> <Bundle Version="1.0.0.0" UpgradeCode="7AE2E358-B5A0-44B1-9B29-FDD275992993"> <Chain> <ExePackage Id="Netfx4Full" Compressed="no" PerMachine="yes" Permanent="yes" Vital="yes" SourceFile="ca\dotNetFx40_Full_x86_x64.exe" DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=164193" DetectCondition="Netfx4FullVersion AND (NOT VersionNT64 OR Netfx4x64FullVersion)" /> </Chain> </Bundle> 错误 错误 LGHT0089:找到多个条目部分“{A1B42CCE-8AFE-11E2-AC8C-B3456288709B}”和“{8E644424-3113-462E-9197-32DF740AEB78}”。 单个目标中只能存在一个入口部分。 该错误表明您的项目正在使用包含多个以下元素的文件进行构建:Product、Module、Patch、PatchCreation、Bundle。在您的情况下,听起来您将一个带有 Bundle 元素的文件添加到了已经具有 Product 元素的项目中。目前的 WiX 工具集不支持这一点。您需要将 Bundle 元素放在单独的项目中。 因此,在创建引导程序和 MSI 时,您将有两个 .wixproj 文件。第一个 .wixproj 将包含您的 Product 信息。第二个 .wixproj 将包含您的 Bundle 信息,并具有对第一个 .wixproj 的项目引用,以便构建顺序正确。 我们也有同样的问题: 错误 WIX0089:找到多个条目部分“”和“”。单个目标中只能存在一个入口部分。 我们只是将产品从wix3切换到wix5。 我们已经毫无问题地更换了一种产品。 现在另一个产品,结构基本相同,也有上面提到的这个错误。 product.wxs 的开头是这样的: <?include .\Properties.wxi?> <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:ui="http://wixtoolset.org/schemas/v4/wxs/ui"> <Package ProductCode="$(var.ProductCode)" UpgradeCode="$(var.UpgradeCode)" Name="$(var.ProductName)" Language="!(loc.strLanguageCode)" Version="$(var.ProductVersion)" Manufacturer="$(var.CompanyName)" Scope="perMachine" Compressed="$(var.Compressed)" InstallerVersion="300" > <SummaryInformation Description="$(var.ProductName)" /> Properties.wxi 具有所有定义: <?define ProductCode = "*" ?> <?define UpgradeCode = "{DAFFCD3E-DED3-49E5-B805-9F4C86831B61}" ?> <?define CompanyName = "example company" ?> <?define AppName = "example product"?> <?define SetupName = "example stetup name"?> <?define ProductYear = "2025"?> <?define ProductName = "$(var.AppName) $(var.ProductYear)"?> 我们在这个项目中没有捆绑包,也没有第二个包或产品。 当我们直接在 Product.wxs 中使用 guid 定义 Product-Code 时,错误消息与错误中的 guid 相同: 错误 WIX0089:找到多个条目部分“{09757972-8D40-4624-AE0E-7F32AB22C186}”和“{09757972-8D40-4624-AE0E-7F32AB22C186}”。单个目标中只能存在一个入口部分。

wix
回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.