Подтвердить что ты не робот

Запуск ExeCommand в customAction как режим администратора в установщике Wix

Я новичок в установщике wix. Я разработал настройку с помощью установщика wix для своего приложения, и мне нужно выполнить Custom Action для запуска команды в cmd.exe. В XP он работает нормально. Но в Windows 8 и 7 приглашение cmd должно запускаться как администратор.

У меня есть googled и нашли ключевые слова Повышенные привилегии и олицетворять могли бы помочь мне.

<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine"   InstallPrivileges="elevated"></Package>

Как вы можете видеть выше, я использовал атрибут InstallScope, установленный для perMachine, и я использовал Impersonate = "No" в элементе CustomAction:

 <CustomAction Id='comReg' Directory='INSTALLLOCATION'  Impersonate='no'  
  ExeCommand='"[NETFRAMEWORK40CLIENTINSTALLROOTDIR]regasm.exe" "[INSTALLLOCATION]myProduct.dll"  /codebase' Return='check' />

Но при установке я не получал никаких изменений. Мне нужна командная строка, чтобы открыть и запустить указанную выше команду в режиме администратора.

И кто-нибудь может рассказать мне об этих ключевых словах " Повышенные привилегии и олицетворять"

<InstallExecuteSequence>
  <Custom Action='comReg' After='InstallFinalize'>NOT REMOVE</Custom>
  <Custom Action='comUnreg' Before='RemoveFiles'>REMOVE</Custom>
</InstallExecuteSequence>

Как это сделать?

4b9b3361

Ответ 1

Документация wix здесь объясняет атрибут Impersonate:

Этот атрибут указывает, должен ли установщик Windows, который выполняет роль LocalSystem, олицетворять пользовательский контекст пользователя установки при выполнении этого пользовательского действия. Обычно значение должно быть "да", за исключением случаев, когда пользовательские действия требуют повышенных привилегий для внесения изменений в машину.

Вам также необходимо понять разницу между отложенными и немедленными пользовательскими действиями. См. Атрибут Execute на той же странице справки:

Этот атрибут указывает планирование пользовательского действия. Это значение атрибута должно быть одним из следующих:

отложила   Указывает, что пользовательское действие выполняется в script (возможно, с повышенными привилегиями). немедленным   Указывает, что пользовательское действие будет выполняться в течение обычного времени обработки с правами пользователя. Это значение по умолчанию.

В настоящее время ваше пользовательское действие является немедленным, что означает, что он работает с привилегиями пользователя. См. этот пост в блоге для получения подробной информации, но особенно:

Любые немедленные пользовательские действия олицетворяют вызывающего пользователя. До Windows Vista это не было проблемой, так как на данный момент у установочного административного пользователя был привилегированный токен. С введением UAC в Windows Vista административный токен по умолчанию с включенным UAC является фильтрованным токеном и не имеет всех привилегий. Поскольку немедленные пользовательские действия не должны изменять состояние машины - только для сбора данных состояния и планирования пользовательских действий для запуска отложенных - это все равно не должно быть проблемой. В конце концов, на этом этапе генерация сценариев установки и отката - это все, что должно продолжаться.

Вы никогда не должны изменять состояние машины с помощью немедленного пользовательского действия. Используйте отложенную, и держите себя за другого, и она должна работать:

<CustomAction Id='comReg' Directory='INSTALLLOCATION' Execute='deferred' Impersonate='no' ExeCommand='"[NETFRAMEWORK40CLIENTINSTALLROOTDIR]regasm.exe" "[INSTALLLOCATION]EAWordImporter.dll" /codebase' Return='check' />

EDIT. Запланируйте пользовательское действие с помощью элемента InstallExecuteSequence:

<InstallExecuteSequence>
    <Custom Action='comReg' Before='InstallFinalize'/>
</InstallExecuteSequence>