Я создал пользовательское действие, которое выполняется в InstallUISequence для повышения привилегий. Код проверяет, нет ли привилегий, он запускает новый процесс для одного и того же MSI.Закрыть 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;
}
}
Этот ЦС отлично работает, чтобы запустить повышенный MSI. Тем не менее, после того, как повышенный MSI завершает выполнение, Main MSI показывает сводный диалог. Есть ли способ, которым я могу пропустить его и закрыть MSI?
Это сработало для меня. Я создал свойство со значением по умолчанию 0 в коде wix, я обновляю это свойство, когда CA повышает привилегии и запускает новый MSI. Обновлен параметр InstallUISequence. Диалоговое окно резюме отображается только в том случае, если значение свойства равно 0. – Kaveesh