是否有机会在自定义操作中检查安装模式的类型。 我想为安装和卸载模式创建一个自定义操作,但是根据模式执行不同的逻辑。
类似的东西:
public static ActionResult CreateBackUpAction(Session session)
{
//if (InstallType == "Install")
//{
// BackUpFiles();
//}
//else if (InstallType == "Remove")
//{
// DeleteBackUpFiles();
//}
return ActionResult.Success;
}
我知道理想情况下,对于这两种情况,我应该有两种不同的操作,但我希望尽量减少安装程序源中的行数。
答案 0 :(得分:2)
您应该能够使用会话对象的Item来获取当前安装的属性值。会话的价值[" REMOVE"](它应该是" ALL")将告诉你它是一个卸载,以及会话的价值["已安装" 34;]如果它是全新的安装。
但是,是的,您应该使用这些类型的条件来调用单独的自定义操作,原因如下:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa370543(v=vs.85).aspx
对进程外方法的托管代码自定义操作调用并不便宜。当您可以使用Not Installed作为条件时,您将调用所有该机制并返回。如果您有可以更改的功能,或者修复发生,那么如果您没有呼叫条件,您将再次呼叫并再次返回(没有做任何事情)。
您没有很好的方法来处理回滚,因为(例如)如果卸载失败并回滚我假设您实际上更愿意保留您要删除的备份文件用你的代码。换句话说,在安装失败,卸载失败,回滚以及升级现有已安装产品时,您不清楚要对这些备份文件执行什么操作。
< / LI> 醇>我还认为,与一个充满条件的大型代码相比,一些较小的专注自定义操作可以做一件事更容易处理。