我创建了一个自定义操作,该操作在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?
答案 0 :(得分:2)
看起来您已经让Custom Action Return Values几乎完全按照自己的意愿行事了。但是它仍会导致正在执行的InstallUISequence Table的终止标志之一。在这种情况下,您必须想出一种方法来阻止它显示Dialog;也许只是为这种情况提供一个条件。
答案 1 :(得分:1)
在UI中处理此问题的典型方法是提供一个自定义对话框(或至少一个信息对话框),只显示启用“取消”按钮,这样用户就无法执行“下一步”以推进安装。您可以通过设置导致显示自定义对话框的属性来执行此操作。换句话说,它与安装无法继续的任何其他情况相同 - 禁用“下一步”按钮并仅保留“取消”。
我不知道你的意思是"摘要对话框"。