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

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

я погуглил и нашел ключевые слова повышенные привилегии и олицетворять может помочь мне.

<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>

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

1 ответов


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

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

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

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

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

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

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

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

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

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

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