将启动条件(搜索目标机器)的值传递给 MSI 中的自定义操作

Pass value from Launch Condition (Search Target Machine) to Custom Action in MSI

我正在使用 Visual Studio 2015 创建 MSI。我想检查 TARGETDIR 中已经存在的特定文件,并将搜索结果传递给 c# 中的自定义操作。到目前为止,我在“启动条件”视图中创建了搜索并相应地设置了属性。

然后,我在自定义操作视图中将 属性 名称作为自定义数据参数传递:

/CONFIG_EXISTS="[CONFIG_EXISTS]"

但是当我读取自定义操作代码中的值时,它的值为空,但我希望找到一个布尔值,至少是字符串形式。

protected override void OnAfterInstall(IDictionary savedState){
    var existingConfig = Context.Parameters["CONFIG_EXISTS"]; // Always has "" as value
    .... // Other code

我在这里错过了什么?如何在我的自定义操作 C# 代码中获取搜索条件的结果?

您的搜索失败,因为它在安装的早期运行,在 TARGETDIR 初始化之前(请记住,TARGETDIR 也可以通过提供安装文件夹的对话框进行更改)。因此,您应该根据标准 Windows 安装程序文件夹属性重新定义您的搜索,例如 ProgramFilesFolder、CommonFilesFolder 等,完整列表在这里:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa370905(v=vs.85).aspx#system_folder_properties