繁体   English   中英

Wix工具集:如何在自定义操作中确定安装模式

[英]Wix Toolset: How to determine installation mode in a Custom Action

是否有机会在“自定义操作”中检查安装模式的类型。 我想为安装和卸载模式创建一个自定义操作,但是根据该模式执行不同的逻辑。

就像是:

public static ActionResult CreateBackUpAction(Session session)
{
    //if (InstallType == "Install")
    //{
    //  BackUpFiles();
    //}
    //else if (InstallType == "Remove")
    //{
    //    DeleteBackUpFiles();
    //}

    return ActionResult.Success;
}

我知道理想情况下,两种情况下我应该有两种不同的操作,但是我想减少安装程序源中的行数。

您应该能够使用会话对象的Item获取当前安装的属性值。 session [“ REMOVE”](应该为“ ALL”)的值将告诉您这是卸载,而session [“ Installed”]的值则是全新安装。

但是,是的,出于以下几个原因,您应该使用以下类型的条件来调用单独的自定义操作:

  1. 这意味着您不必担心延迟的自定义操作和属性,并且不需要将延迟的自定义操作模型与CustomActionData一起使用,因为Windows会处理它。 例如,如果推迟了自定义操作,则可能无法使用会话[“ REMOVE”]。 该文档没有说明在延迟的自定义操作中可以使用Installed或REMOVE属性,因此您将使用session.CustomActionData和另一个自定义操作来对其进行设置。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa370543(v=vs.85).aspx

  1. 对进程外方法的托管代码自定义操作调用并不便宜。 当您可以使用“未安装”作为条件时,您将调用所有该机制并返回。 如果您具有可以更改的功能或维修,那么如果您在通话中没有任何条件,则将再次呼叫并再次返回(什么也没做)。

  2. 您没有应对回滚的好方法,因为(例如)如果卸载失败并回滚,我认为您实际上更希望保留要用代码删除的那些备份文件。 换句话说,在安装失败,卸载失败,回滚以及升级现有已安装产品的情况下,不清楚要如何处理这些备份文件。

我也认为,比起一大堆有条件的大型代码,执行某件事的几个较小的,集中的自定义操作更易于处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM