windows-installer 相关问题

Windows Installer是Windows提供的安装服务,基于MSI文件的创建和安装。在实践中,将有一个工具用于生成MSI文件,您应该使用Windows Installer和该工具(WiX,Visual Studio安装项目,InstallShield,高级安装程序等)标记您的问题。您的问题可能在于构建,设计或安装MSI文件。

如何在 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

无法找到适用于 Windows 7 的 Python 3.8.17 Windows 安装包

我是Python初学者,最近在Python官方网站上查找Python 3.8安装包时遇到了一个问题。我的目标系统是Windows 7,所以我无法使用

回答 1 投票 0

使用 Inno Setup 修补 Install Shield 应用程序

嗨,我有一个问题,我需要一些指导。 我有一个旧的应用程序,它有一个安装屏蔽安装程序,但我没有安装程序脚本。现在我想为此做一个简单的补丁

回答 2 投票 0

-如果执行的 msi 安装程序最初请求许可,则等待和 -Passthru 将“被忽略”

我正在尝试制作一个脚本来检查PC是否已经安装了某个应用程序,并且已经安装了正确的版本(在我的例子中是MySQL 8.0.32),并执行预下载的msi文件来安装...

回答 1 投票 0

WiX 中与平台无关的 .NET 兼容性检查

我正在使用 WiX 为 32 位和 64 位系统构建 MSI 安装程序。该软件包有一些先决条件,需要在安装之前检查,以便用户更容易知道发生了什么

回答 1 投票 0

如何获取安装程序类中安装 MSI 的路径

我添加了一个 Installer 类,并且在该类中我重写了 Install 方法。在这个方法中我想获取安装MSI的路径? (目录用户已选择安装

回答 2 投票 0

Inno Setup:大型安装程序,在安装程序之外压缩数据

我制作了一个大型安装程序(大约 5GB)并且工作正常,但是由于主安装程序非常大,因此在双击它和实际获取安装程序 windows 之间往往需要一段时间...

回答 1 投票 0

Wix中的环境变量,二进制文件在哪里

我有 WiX 4.0.3 版本,我找不到将它们添加到 WiX 4.0.3 的 PATH 的二进制文件。我在哪里可以找到它们? 有人能帮我吗? 控制台返回: ` 运行蜡烛.exe [11:39:19.574]jdk。

回答 1 投票 0

msiexec 支持的文件类型

我正在使用 Splunk 研究提供给 msiexec 的软件包和相应的文件扩展名。我的印象是 msiexec 只能使用 MSI 文件进行安装或 DLL ...

回答 1 投票 0

使用 WixQuietExec 静默执行 Powershell 脚本

我是使用 WixToolset 的新手,我正在尝试使用 WixQuietExec 执行 ps1 文件 - https://wixtoolset.org/docs/v3/customactions/qtexec/。如果我直接使用

回答 1 投票 0

WiX ProgramFiles64Folder 的行为类似于 ProgramFilesFolder (x86)

我构建了一个简单的安装程序,将文件复制到 Program Files 下的文件夹中。尽管将组件定义为 Win64,将目录定义为 ProgramFiles64Folder,但运行时的 MSI 会更改

回答 1 投票 0

MSI 错误:需要管理权限

当我从本地磁盘和网络共享运行msi文件时,它可以在Win7上运行。 但是当我在Win8-10上运行msi文件时出现错误: 此应用程序需要管理权限 我设置为产品...

回答 2 投票 0

如何确定 WiX 安装程序是安静的还是交互式的?

WiX 中是否有办法确定安装程序是在安静模式下运行还是以交互方式运行?

回答 3 投票 0

WiX - 安装先决条件和第 3 方应用程序

我有一个用于我的 C# 应用程序的 wix Windows 安装程序。一切正常,我可以安装和卸载该应用程序。但我有一些先决条件和其他第三方应用程序,我...

回答 2 投票 0

Python 文件的安装程序或可执行文件

我一直在尝试将我的python项目转换为可移植的形式。我尝试使用 pyinstaller --onefile python_script.py。我在我的 Windows 笔记本电脑上工作得很好,但是当我在我的朋友之间分享它时......

回答 1 投票 0

使用注册表搜索/条件卸载 WiX 工具集

我正在尝试通过 *.msi 文件卸载应用程序。 *.msi 文件是由我的 WixToolset-Project 生成的。 我的问题是卸载过程因RegistrySearch El而失败...

回答 1 投票 0

在命令行上设置公共属性值

在 msi 的命令行上设置公共属性值遵循以下模式 MyInstaller.msi PUBLICPROPERTY="someValue" 这适用于“命令提示符”,即 cmd.exe 和 powershell。 但 我的机构...

回答 1 投票 0

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