[英]Using a WiX custom action to set a property's value
我正在修改现有的WiX安装程序以处理更新我们其中一个产品的现有安装。 有几个值的默认值在属性中指定。 这些属性将显示给用户进行编辑,然后由现有安装程序写入自定义配置文件。
我的代码需要足够智能,以检测它是否正在进行全新安装而不是安装旧版本。 如果它正在进行全新安装,则需要将属性设置为默认值。 但是如果它正在进行升级,则代码需要从现有配置文件中检索这些属性的值,并将其显示给用户。
从我已经完成的阅读中,我觉得我需要使用51类自定义动作来设置属性。 但是,如何实现此自定义操作?
我想我必须首先定义自定义操作以将其放入自定义操作表中,然后我需要在某个地方粘贴一个标记来调用它。 然后我需要定义它。
我怎样才能做到这一点? 一些示例代码是什么?
在对自定义操作进行更多研究之后,我相信我已经弄明白这一切。 我在.wxs文件中添加了一个<Binary>标记,以标识自定义操作所在的位置。 然后我在CustomAction中引用了Binary标签的ID。 最后,我在InstallExecuteSequence部分添加了一个Custom标记,该部分通过ID引用了CustomAction标记。
上面提到的最终Custom标签需要进入InstallUISequence部分,而不是InstallExecuteSequence部分,因为在显示对话框之前需要调用自定义操作。
至于Custom Action本身的实现,我在解决方案中添加了一个新的C#Custom Action库项目。 在那里,我实现了一个方法,用[CustomAction]属性修饰。 此方法使用存储在Session对象中的属性值作为参数传递给方法,并确定当前版本的可执行文件的路径。 然后,它完成了在程序的配置文件中找到需要跨版本保留的值并将它们写入升级脚本的其他属性所需的工作。
例:
[CustomAction]
public static ActionResult SetProperty(Session session)
{
try
{
session.Log("Begin SetProperty action");
session["PROPERTY_NAME"] = "value"
}
catch (Exception exception)
{
session.Log("ERROR in custom action SetProperty {0}", exception.ToString());
return ActionResult.Failure;
}
return ActionResult.Success;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.