【问题标题】:Wix: Custom Action to read version text from file and set launch conditionWix:从文件中读取版本文本并设置启动条件的自定义操作
【发布时间】:2011-11-30 03:55:12
【问题描述】:

我遇到了一个 Wix 情况,它的解决方案似乎是几个步骤的组合。我只是不知道这些步骤是什么或如何构建它们。

我的安装取决于正在安装的另一个程序的某个版本(例如 OtherApp v2.1.6)。我需要将其指定为启动条件。

棘手的部分是,在 OtherApp 安装中指定版本的唯一位置是文本文件 (version.dat)。所以我需要编写一个自定义操作来从 dat 文件中读取该版本字符串并将其分配给属性或条件,所有这些都在启动条件之前。

我尝试了一个批处理文件来打开该文本文件,并将找到的版本与作为参数传递到批处理文件中的版本进行比较。如果版本相同或更高(假设向后兼容),批处理文件将返回 0,如果版本较旧,则返回 1。但是,我无法获得正确执行批处理文件的自定义操作。

我也尝试过使用 VBScript 的不同方法,但均未成功。

任何人都可以就我应该如何设置这个场景提供任何见解吗?我以为我知道,但我发现我一点头绪都没有。

感谢您的帮助!

【问题讨论】:

    标签: batch-file wix custom-action text-files launch-condition


    【解决方案1】:

    你是在正确的方式。读取 TXT 文件的自定义操作必须立即执行并在 LaunchCondition 标准操作之前运行。您应该在 InstallUISequenceInstallExecuteSequence 这两个序列中安排此自定义操作 - 如果您的安装在安静或基本 UI 模式下运行,则仅考虑 InstallExecuteSequence,否则两个序列都会运行。该自定义操作应从文件中读取版本,并设置 MSI 属性。此属性应稍后在启动条件下使用。

    您创建自定义操作所使用的语言并不重要。因此,请随意选择对您方便的技术。但是,请记住 VBScript custom actions suck。 :-)

    如果您的应用程序是 .NET 应用程序,这意味着 .NET 是您安装的先决条件,因此您可以利用该选项在 C# 中创建自定义操作。 DTF(与 WiX 附带的 MSI 数据库通信的 API)非常方便。例如,为了设置一个属性,您可以使用以下语法:

    session["OTHER_APP_IS_INSTALLED"] = 1;
    

    【讨论】:

    • 我自己找到了 C# 自定义操作,并在昨天在这里检查响应之前尝试过。我几乎可以使用它,只是我似乎无法通过会话将参数传递给 C# 代码。我想将其他应用程序所需的版本号存储在 Wix 中,并将其作为参数传递给 C#。我尝试过网络示例,但我的 session.CustomerActionData 集合始终为空。这里有什么建议吗?
    • 不,CustomActionData 有不同的用途。当您有一个延迟的自定义操作,即修改目标系统的操作,并且您想向它传递一些参数时,您可以通过 CustomActionData 方法执行此操作。在您在此处描述的情况下,您应该创建即时自定义操作,并且此类操作可以访问 Session 对象和所有属性。因此,如果您想将值传回,只需设置一个属性,或者如果您需要将数据用作参数,请读取一个属性
    • 就是这样!!一旦我理解了它,我简直不敢相信它是多么容易。非常感谢!!
    猜你喜欢
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2011-08-17
    相关资源
    最近更新 更多