具有完整文件路径的 WiX 安装程序文件搜索

标签 wix installation windows-installer

我正在使用 WiX 创建 MSI,并且 MSI 接受作为用户输入属性的安装程序逻辑将使用的文件名的路径。我试图通过确定该文件是否存在来验证该属性,但是有了完整的文件路径,我无法弄清楚如何让它与 DirectorySearch 合作和 FileSearch模式。

所以,假设用户像这样运行 MSI: msiexec /i myinstaller.msi CUSTOMFILE="C:\test\input.txt"

然后我需要运行类似的东西:

<Property Id="CUSTOMFILEEXISTS">
  <DirectorySearch 
    Id="LocationConfigDirSearch" 
    Path="[CUSTOMFILE_DIR]" Depth="0">

    <FileSearch Name="[CUSTOMFILE_FILENAME]"></FileSearch>
  </DirectorySearch>
</Property>

但是我:

  1. 不知道如何将文件名分成几个部分。类似于 Path.GetDirectory([CUSTOMFILE])Path.GetFileName([CUSTOMFILE])会很理想。或者;
  2. 无法弄清楚如何按原样使用完整文件名来确定文件是否存在。例如,DirectorySearch 上的一个属性对于 IgnoreFileName="true" ,但我知道这样的属性不存在。

我是否需要达到编写扩展代码或自定义操作的程度?我希望这是一个足够简单的要求,不需要走那么远。

最佳答案

FileSearch elementSignature table 的抽象在 Windows 安装程序中。文件名列不支持 Formatted数据类型,因此您不能在该属性中放置属性。

您可以做的是标准化一个固定的文件名,并让用户提供一个包含目录路径而不是文件路径的属性。然后我认为您可以使用 AppSearch 在该目录中查找文件而无需编写自定义操作。

否则,在没有任何状态更改的情况下进行简单发现的自定义操作并不是世界上最糟糕的事情。请注意不要引入任何托管脆弱性。 Windows Installer 中的 ActiveScript (VB/JScript) 支持是出了名的脆弱。我发现 C#/DTF 管理的自定义操作是可以接受的,但不是每个人都接受。剩下的 C/C++ 可能非常可靠,但更难编码。这是一个简单的 CA,因此它应该非常简单。

关于具有完整文件路径的 WiX 安装程序文件搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24275966/

相关文章:

wix - 从以前的 Visual Studio 安装程序升级到 Wix

c# - 根据条件回滚安装

WiX ExitCode forceReboot 导致无限重启

c# - 保存 Windows 服务的属性(Wix 安装程序)

button - Wix UI 如何将焦点从一个按钮控件更改为另一个?

android - Android NDK 更新版本的 (OSX) 路径在哪里?

WiX:防止 32 位安装程序在 64 位 Windows 上运行

installation - 如何在WiX中至少需要两个可选组件之一?

environment-variables - 如何从Inno Setup安装程序设置全局环境变量?

unix - 我应该在哪里安装 phpDocumentor 2?