如何获取正在安装的安装包的文件名?

How to access file name of the installation package being installed?

我使用 WiX 成功创建了 msi 安装程序包。现在我需要在代码中访问msi安装程序包的文件名(在资源管理器中显示的名称,如"myPackage.msi")(注意,用户可以将安装包名称更改为任何he/she想要的).有什么办法可以识别包文件名吗?也允许使用自定义操作。

仅供参考,我需要文件名来根据包文件名创建配置文件,名称对于不同的用户来说是唯一的。

您可以阅读 OriginalDatabase property, at least for a first-time install. It gets a little messier during maintenance, however, as a cached .msi package does not retain the original name, and you would have to store it, or perhaps use something like MsiGetProductInfo(..., INSTALLPROPERTY_PACKAGENAME, ...)(仅记录为适用于广告包,不适用于已安装的包)。因此,尽管不完全理解您在这里尝试做什么,但我不推荐您描述的方法。

因此,我建议为每个用户提供已知名称文件的位置,例如 %LOCALAPPDATA%\YourCompany\YourProduct\someconfig.file。这使得在安装上下文之外更新或使用文件变得更加容易。

关于命令行选项:看这个话题WIX: How to Select Features From Command Line

它向您展示了如何对功能/组件进行分组,然后您可以如何使用命令行选项 select 它们。

PS:您能否举一个更具体的例子,以便我们理解为什么某些文件需要被操作?这些影响安装程序的用户设置是什么?

编辑:以前的答案(在您提供更多信息后,很明显这没有用)。

创建变量(在单独的 Variables.wxi 文件中):

<?xml version="1.0" encoding="utf-8"?>
<Include>
  <?define ProductName = "..." ?>
  <?define CompanyName = "..." ?>
</Include>

然后您可以在任何地方使用这个变量,例如:

<Product Id="*" Name="$(var.ProductName)" Language="1033" Version="..." Manufacturer="$(var.CompanyName)" UpgradeCode="....">