wix 相关问题

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

是否可以使用 MVVM 构建 Wix/Wix# UI?

我目前正在阅读使用 Wix# 构建自定义 UI,但由于我对 (WPF) MVVM 的经验比 WinForms 的经验更多,所以我想知道是否可以使用它。 可以吗?

回答 1 投票 0

如何将 Wixtool 集与 Github 操作集成?

我使用 wixtoolset 为我的软件构建版本。我想通过 GITHUB 操作自动化发布构建过程。此外,我能够弄清楚大部分事情,但我被困在一个问题上

回答 1 投票 0

通过 openFileDialog 选择时安装证书时出错(可能是错误?)

好吧,所以我决定在安装证书时制作一个漂亮的小选择器,它可以让您选择 .PFX 文件并输入它的密码,然后再安装它。我配置了一切都很好...

回答 1 投票 0

如何在使用 Wix Toolset 4 安装过程中添加文件?

所以我正在为用户安装一些证书,并且我想每次添加不同的.PFX文件;我希望安装此程序的管理员每次在安装过程中手动选择 .PFX 文件...

回答 1 投票 0

如何静默卸载 MSI 软件包?

我有一个 .msi 安装程序,是使用 WiX 工具集构建的。 安装此软件包后,我可以使用 Windows 资源管理器卸载它,方法是右键单击 .msi 文件,选择“卸载&q...

回答 1 投票 0

在 WIX 安装过程中运行批处理文件

我尝试了各种“解决方案”来解决这个问题,但没有成功。现在我的设置是这样的: 我尝试了各种“解决方案”来解决这个问题,但没有成功。现在我的设置是这样的: <Fragment> <CustomAction Id="BatchCmd" ExeCommand="[INSTALLFOLDER]registerDLL.bat" Directory="INSTALLFOLDER" Execute="deferred" Return="asyncWait" /> <InstallExecuteSequence> <Custom Action="BatchCmd" After="InstallFiles">NOT Installed</Custom> </InstallExecuteSequence> </Fragment> registerDLL 文件是在文件中其他位置定义的 WIX 组件的一部分。它已正确复制到 INSTALLFOLDER 目录中。 批处理文件根本不执行。而且我真的不知道如何调试这个。我的意思是天哪,运行一个简单的批处理文件再复杂不过了。 在 WIX 中运行批处理文件的最简单方法是什么? 本身并不完全是一个解决方案,尽管它是解决我的具体问题。 https://stackoverflow.com/a/1165130/5088769

wix
回答 1 投票 0

WIX CustomAction - 如何在安装/日志中获取更多信息

有人告诉我,WIX 中的 CustomAction 有一种方法可以在控制台日志中显示输出。我包含一个名为 XmlPreprocess.exe 的 .exe 来操作我的 web.config,基于 ...

回答 3 投票 0

如何在 WIX Api 中使用 $in 运算符按订单号过滤订单

我目前正在开发一个项目,我需要使用 $in 运算符根据订单号从 Wix API 检索订单。但是,我遇到了过滤器的问题,我正在接收......

回答 1 投票 0

使用 WIX 安装多个同名的不同文件?

我有一个 WiX 安装程序,需要将文件安装到两个目录。在一个目录中,我们需要安装该文件的 32 位版本,在另一个目录中安装 64 位版本。 然而,这些文件有...

回答 1 投票 0

为什么引用wixlib项目时构建时间会加倍?

我有大量使用相同文件的 msi 项目。文件引用已在每个项目中明确定义。我创建了一个 wixlib 项目,对文件进行热收集,r...

wix
回答 1 投票 0

Wix 4 设置文件夹权限

我正在尝试设置通过 Wix 4 安装应用程序的文件夹的 ACL 权限。我希望所有用户都能够读/写它,即使他们没有管理员访问权限。 以下是我的

回答 1 投票 0

Wix 更新绑定重定向值

我有一个安装程序需要更改 app.config 中的 bindingRedirect 值。目前,我有: 我有一个安装程序需要更改 app.config 中的 bindingRedirect 值。目前,我有: <util:XmlFile Id="Config" Action="setValue" ElementPath="configuration/runtime/assemblyBinding/dependentAssembly/assemblyIdentity[\[]@publicKeyToken='89845dcd8080cc91'[\]]/bindingRedirect/@newVersion" File="[INSTALLFOLDER]\app.config" Value="13.0.0.0"/> 但这会引发错误,因为它找不到节点。我猜这是因为 BindingRedirect 不是 assemblyIdentity 的子元素。 我将如何更新 newVersion 字段? 谢谢 您的元素路径不正确。这不是有效的 XPath 查询(具有特定于 msi 的转义)。您可能需要一个前导的正斜杠。 这就是这个问题的解决方案,如果其他人也遇到这个问题! <util:XmlFile Id="Config" Action="setValue" ElementPath="configuration/runtime/assemblyBinding/dependentAssembly[\[]assemblyIdentity/@publicKeyToken='89845dcd8080cc91'[\]]/bindingRedirect/@newVersion" File="[INSTALLFOLDER]\app.config" Value="13.0.0.0"/> 并且配置文件中的 assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" 需要更改为 assemblyBinding @JWoodley13,你是我的英雄,非常感谢你的回答。 为了使其与 WiX v4.0.2 一起使用,我还需要安装全局工具并安装 WixToolset.Util.wixext 扩展,然后才能在 .wixproj 中将其作为 PackageReference 引用。 在命令行上: dotnet tool install --global wix --version 4.0.2 wix extension add -g WixToolset.Util.wixext 在.wixproj中: <ItemGroup> <PackageReference Include="WixToolset.Util.wixext" Version="4.0.2" /> </ItemGroup> 在 .wxs 文件中,导入更新的 wxs 和 wxs/util 命名空间: <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util"> 我也调整了 xpath 以使用包名称: <Component Id="ChangeConfig" Guid="18C80C2F-D0CC-486D-A80A-23646BBAB8FF"> <util:XmlFile Id="Config" Action="setValue" ElementPath="configuration/runtime/assemblyBinding/dependentAssembly[\[]assemblyIdentity/@name='Newtonsoft.Json'[\]]/bindingRedirect/@newVersion" File="[INSTALLFOLDER]\app.config" Value="13.0.0.0"/> </Component>

回答 3 投票 0

如何从yml文件中的nuget恢复任务中过滤.wixproj?

在我的 yml 构建文件中,我有一个 nuget 任务,它可以恢复我的 sln 的所有 nuget 包,但是该 sln 中有一个 wix 项目引发以下错误。 “NU1503:跳过恢复

回答 1 投票 0

如何使用javascript更新wix中的自定义组件

我正在使用自定义 HTML 和 javascript 开发一个 wix 网站。 虽然我知道块的 id 是 html2,但我无法从其下面的 javascript 更新 insidehtml。它不会更新。 我知道价值是

回答 1 投票 0

尝试使用 ProjectReference 将应用程序发布为独立的,以便在 WiX v4 项目中使用

我正在尝试使用 WiX v4 创建安装,它将发布另一个 C# 项目,收获其文件,然后将其打包到安装程序中。我能够让它工作,但问题是......

回答 1 投票 0

如何在CMAKE中使用WIX V4构建Windows安装包

我尝试使用CMAKE + WIX构建安装包。 WIX 的最新版本是 v4。 不幸的是,CPack 失败了,因为它正在寻找一个工具 Candle.exe,该工具已在 WIX v4 中删除,如 oppo...

回答 1 投票 0

如何在 WiX 制作的 MSI 文件属性中显示产品版本?

如何在 MSI 文件属性中显示产品版本(如 Windows 资源管理器所示)? 我们的安装程序是使用 WiX 创建的。我们所看到的只是显示为修订版本的产品 GUID

回答 3 投票 0

WIX 工具集 - 自定义操作命令无法正确检测 Windows 10 版本

我有一个安装程序,可以部署并运行单独的 .exe 文件以将驱动程序部署到系统。不幸的是,微软似乎在 Windows 10 及更高版本中放弃了对 VersionNT 宏的支持......

回答 3 投票 0

从 Rust 自定义操作内部读取时,Wix CustomActionData 属性值 10 次中有 2 次为空

在 WIX 代码中,我们声明了延迟的自定义操作,该操作将保护凭证和 辅助自定义操作,为其设置 CustomActionData 值,如下所示: 在 WIX 代码中,我们声明了延迟的自定义操作,该操作将保护凭证和 辅助自定义操作,为其设置 CustomActionData 值,如下所示: <CustomAction Id="SetUserNamePasswordForDefferedAction" Property="HandleAccountInfoCustomAction" Value="[ACCOUNT_USERNAME],[ACCOUNT_PASSWORD],[INSTALLLOCATION],[SERVICEACCOUNT]" HideTarget="no" Return="check" /> <CustomAction Id="HandleAccountInfoCustomAction" DllEntry="handle_account_info" BinaryKey="service_account_dll" Execute="deferred" HideTarget="no" Impersonate="no" Return="check"/> <Binary Id="service_account_dll" SourceFile="service_account.dll" /> <InstallExecuteSequence> <Custom Action="HandleAccountInfoCustomAction" Before="InstallFinalize">NOT Installed</Custom> <Custom Action="SetUserNamePasswordForDefferedAction" Before="HandleAccountInfoCustomAction">NOT Installed</Custom> </InstallExecuteSequence> service_account_dll 在 Rust 中实现,但以 C 格式导出入口点 handle_account_info。读取自定义操作数据的 Rust 代码如下: unsafe fn retrieve_property_from_msi_db( h_install: MSIHANDLE, property_name_str: &str, ) -> StdResult<String, u32> { let property_name = get_ptr_to_cstring(property_name_str); custom_action_log(&format!("Retrieve {property_name_str} from MSI db")); let mut msi_get_property_call_count = 0usize; let mut res; let mut req_status; let mut buff = [0u8; BUFFER_SIZE]; res = 0u32; req_status = 234u32; // ERROR_MORE_DATA while (WIN32_ERROR(req_status) == ERROR_MORE_DATA || res == 0) && msi_get_property_call_count < 5 { res = buff.len() as u32; req_status = MsiGetPropertyA( h_install, PCSTR::from_raw(property_name), PSTR::from_raw(buff.as_mut_ptr()), Some(&mut res as *mut u32), ); if msi_get_property_call_count > 0 && WIN32_ERROR(req_status) == ERROR_MORE_DATA { // Register the occurrence of a known race condition in MSI custom_action_log(format!("WARN: Multiple calls to MsiGetPropertyA ({msi_get_property_call_count}) returned ERROR_MORE_DATA.").as_str()); } if res == 0 { custom_action_log(format!("WARN: MsiGetPropertyA returned 0 bytes for property {property_name_str}.").as_str()); std::thread::sleep(Duration::from_millis(10)); } msi_get_property_call_count += 1; if res as usize > BUFFER_SIZE { custom_action_log(format!("Custom action buffer size is too small: Needed {res}/available {BUFFER_SIZE}.").as_str()); return Err(ERROR_INSTALL_FAILED.0); } } if ERROR_SUCCESS != WIN32_ERROR(req_status) { custom_action_log(format!("Failed to retrieve user name from MSI:WIN_32ERROR {:?}, req_status: {req_status}", WIN32_ERROR(req_status)).as_str()); return Err(ERROR_INSTALL_FAILED.0); } let property = std::str::from_utf8_unchecked(&buff[..res as usize]); Ok(property.to_string()) } 十分之二或三我在自定义操作日志中收到以下内容: 2023-11-14 13:29:47 - Retrieve CustomActionData from MSI db 2023-11-14 13:29:47 - WARN: MsiGetPropertyA returned 0 bytes for property CustomActionData. 2023-11-14 13:29:47 - WARN: MsiGetPropertyA returned 0 bytes for property CustomActionData. 2023-11-14 13:29:47 - WARN: MsiGetPropertyA returned 0 bytes for property CustomActionData. 2023-11-14 13:29:47 - WARN: MsiGetPropertyA returned 0 bytes for property CustomActionData. 2023-11-14 13:29:47 - WARN: MsiGetPropertyA returned 0 bytes for property CustomActionData. 2023-11-14 13:29:47 - service_account CustomActionData data retrieved from MSI db. 2023-11-14 13:29:47 - TROUBLESHOOTING: CustomActionData: 2023-11-14 13:29:47 - CustomActionData property is not in the expected format 成功运行会产生以下日志: 2023-11-14 13:28:48 - Retrieve CustomActionData from MSI db 2023-11-14 13:28:48 - service_account CustomActionData data retrieved from MSI db. 2023-11-14 13:28:48 - TROUBLESHOOTING: CustomActionData: ,,C:\MyApp,NT Authority\Local Service 请帮忙:-) 我通过改变策略解决了自己的问题。长话短说,自定义操作现在是一个独立的可执行文件,其中参数通过命令行传递,而不是在 DLL 中实现并由 wix 安装程序应用程序加载的自定义操作。 Wix 支持在不记录命令行参数的情况下执行此操作,因此不会记录密码。基本上,我遵循了这篇文档文章,特别是WixSilentExec风格。 我对为什么从 Wix 直接访问 dll 变得不稳定的理解是,通过 MSI 数据库中的 CustomActionData 属性传递参数值的机制很容易出现竞争条件。

回答 1 投票 0

Wix4 如何在安装后启动 GUI 提升的应用程序

安装完成后,我需要以提升用户(管理员)身份启动 GUI 应用程序,并且我还想检查应用程序的退出代码。 我知道在 CustomAction 上你可以设置 Imperson...

回答 1 投票 0

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