Установщик WiX всегда должен запускаться от имени администратора - PullRequest
14 голосов
/ 25 мая 2011

Я разработал пользовательский установщик с WiX для приложения .NET WPF. Он работает нормально, если я щелкаю правой кнопкой мыши и запускаю от имени администратора, однако при работе без некоторых компонентов не удается установить из-за недостаточных прав доступа.

Компоненты включают SQL Server Express 2008 R2, FoxIt Reader, компонент ActiveX и некоторые другие. Также требуется, чтобы некоторые сценарии SQL выполнялись во вновь установленной базе данных - в любом случае все они требуют прав администратора.


Я пытался добавить атрибуты InstallScope = "perMachine" и InstallPrivileges = "повышенные" в узел Package, но, похоже, это не имело значения.

Я уверен, что это что-то глупое, но я не смог найти ничего в справочнике или в Интернете.

Ответы [ 3 ]

23 голосов
/ 25 мая 2011

Я думаю, что если вы просто добавите

<Property Id="MSIUSEREALADMINDETECTION" Value="1" />

, это должно решить проблему.Дайте мне знать, если нет, и я смогу еще проверить.

0 голосов
/ 15 апреля 2018

Добавьте это к вашему элементу пакета.

<Property Id="ALLUSERS" Value="1" />    <!--equals to install="permachine" at package element but this element depricated -->
<Property Id="MSIUSEREALADMINDETECTION" Value="1" /> 

<Condition Message="Please Run as Administrator.">
      Privileged
</Condition>

Затем создайте простой sfx файл архива для MSI файла с Winrar и эти опции:

  • Вкладка «Настройка»> Запуск после ввода ввода : имя вашего MSI-файла

  • Вкладка «Дополнительно»> Отметить Запрос административного доступа Флажок опции

0 голосов
/ 30 ноября 2016

Для меня я должен был выполнить команду реестра, чтобы удалить системную переменную среды через элемент CustomAction WiX, который требовал прав администратора.

Использование CustomAction → Impersonate = "no" работало для меня, как упомянуто всообщение https://stackoverflow.com/a/8657472/3205679.

Код пользовательского действия WiX:

<CustomAction Id = "Uninstall_MYSYSENV"
              Directory  = "INSTALLFOLDER"
              ExeCommand = 'cmd.exe /c &quot;reg delete       "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session    Manager\Environment" /v MYSYSENV /f&quot;'
              Execute    = "deferred"
              Impersonate= "no"
              Return     = "asyncNoWait"
              />

<InstallExecuteSequence>
      <Custom Action="Uninstall_MYSYSENV"
              After="InstallInitialize">Installed AND NOT UPGRADINGPRODUCTCODE</Custom>
</InstallExecuteSequence>
...