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/