2015-10-27 3 views
0

Я создал пользовательское действие, которое выполняется в 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?

ответ

1

Похоже, вы получили свой Custom Action Return Values, чтобы сделать практически то, что хотите. Однако он по-прежнему приводит к одному из флажков завершения выполнения InstallUISequence Table. Вы должны придумать способ предотвратить отображение Диалога в этом случае; возможно, предоставив условие только для этого случая.

+0

Это сработало для меня. Я создал свойство со значением по умолчанию 0 в коде wix, я обновляю это свойство, когда CA повышает привилегии и запускает новый MSI. Обновлен параметр InstallUISequence. Диалоговое окно резюме отображается только в том случае, если значение свойства равно 0. – Kaveesh

1

Типичным способом борьбы с этим в пользовательском интерфейсе является предоставление настраиваемого диалога (или, по крайней мере, информационного диалога), который появляется только при включенной кнопке «Отмена», поэтому пользователь не может сделать «Далее» для продвижения установки. Вы сделали бы это, установив свойство, которое вызывает отображение настраиваемого диалога. Другими словами, это то же самое, что и в любой другой ситуации, когда установка не может продолжаться - отключите кнопку «Далее» и оставьте только отмену отмены.

Я не знаю, что вы подразумеваете под «сводным диалогом».

+0

Спасибо за ответ Phil! – Kaveesh