将启动条件(搜索目标机器)的值传递给 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 等,完整列表在这里:
我正在使用 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 等,完整列表在这里: