从自定义操作关闭MSI

时间:2015-10-27 18:28:21

标签: wix

我创建了一个自定义操作,该操作在InstallUISequence中执行以提升权限。代码检查特权是否不存在,它启动为同一MSI提升的新进程。

public static ActionResult ElevateInstaller(Session session)
{
    WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
    bool hasAdministrativeRight = principal.IsInRole(WindowsBuiltInRole.Administrator);

    if (!hasAdministrativeRight)
    {
        ProcessStartInfo processInfo = new ProcessStartInfo();
        processInfo.Verb = "runas";
        processInfo.FileName = "msiexec";
        processInfo.Arguments = "/i \"" + session["OriginalDatabase"] + "\"";

        try
        {
            using (Process exeProcess = Process.Start(processInfo))
            {
                exeProcess.WaitForExit();
            }

            return ActionResult.SkipRemainingActions;
        }
        catch (Exception e)
        {          
           return ActionResult.UserExit;
        }
    }         
    else
    {
        return ActionResult.Success;
    }
}

此CA可以正常启动升级的MSI。但是,在提升的MSI完成执行后,主MSI显示摘要对话框。有没有办法可以跳过它并关闭MSI?

2 个答案:

答案 0 :(得分:2)

看起来您已经让Custom Action Return Values几乎完全按照自己的意愿行事了。但是它仍会导致正在执行的InstallUISequence Table的终止标志之一。在这种情况下,您必须想出一种方法来阻止它显示Dialog;也许只是为这种情况提供一个条件。

答案 1 :(得分:1)

在UI中处理此问题的典型方法是提供一个自定义对话框(或至少一个信息对话框),只显示启用“取消”按钮,这样用户就无法执行“下一步”以推进安装。您可以通过设置导致显示自定义对话框的属性来执行此操作。换句话说,它与安装无法继续的任何其他情况相同 - 禁用“下一步”按钮并仅保留“取消”。

我不知道你的意思是"摘要对话框"。