gpt4 book ai didi

c# - 如何通过调用带字符串参数的 WiX 自定义操作的 Installshield 创建自定义操作?

转载 作者:太空宇宙 更新时间:2023-11-03 21:36:41 27 4
gpt4 key购买 nike

Installshield 是否有可能运行一个 WiX 自定义操作,该操作采用除必需的 session 参数之外的其他参数?例如:

[CustomAction]
public static ActionResult CustomAction1(Session session, string param)
{
session.Log(param);
return ActionResult.Success;
}

(注意第二个参数)

我正在通过 Installshield 2012 创建 Type 1 自定义操作。它需要一个函数名称,但我看不到添加参数的方法。 我想我希望能在这里破解,所以如果通过 MSI 数据库存在不受支持的机制,请分享

我能够使用 Installshield Interop,甚至仅限于字符串参数,它允许在我的安装项目中二进制重用的一个很好的解决方案,其中安装项目控制特定参数,而不是自定义操作代码本身。

最佳答案

我不认为可以将额外的参数传递给自定义操作方法。它由 Windows Installer 调用,它需要一个定义明确的签名似乎是合理的。

但是,您可以变通。如果您需要将一些数据传递给自定义操作,您可以为此使用 Session 对象。

如果您的自定义操作是即时的,您可以像这样在自定义操作代码中处理 MSI 属性:

session["PROPERTYNAME"] = "some value";

在即时自定义操作中,session 对象可以寻址属性表中的任何属性。

如果您的自定义操作被推迟,则有一种机制可以将必要的数据传递给它。您应该创建一个通常的即时“设置属性”自定义操作,并将必要的数据传递给名为延迟 CA 名称的属性。样本通常比将其塑造成文字更清晰:

<!-- This is a subsidiary CA, note the property name is equal to the deferred CA name -->
<CustomAction Id="SetForMyDeferredCA" Return="check" Property="MyDeferredCA" Value="source=[SourceFolder];target=[TargetFolder]"/>
<!-- And this is the deferred CA which does the job -->
<CustomAction Id="MyDeferredCA" Return="asyncWait" Execute="deferred" BinaryKey="CustomActions" DllEntry="MyMethodName" />

在延迟 CA 中,您可以像这样处理传递的数据:

var source = session.CustomActionData["source"];
var target = session.CustomActionData["target"];

希望这对您有所帮助。

关于c# - 如何通过调用带字符串参数的 WiX 自定义操作的 Installshield 创建自定义操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21397099/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com