2014-01-21 3 views
1

Это мой первый треск при написании установщика MSI. Есть множество сообщений здесь и в других местах для пользовательских команд в установщике WIX относительно UAC. Однако не найдено ни одной проблемы, которая разрешает мою проблему.WIX Custom Action для запуска повышенного приложения

Мне нужно запустить приложение, поднятое в моем MSI. Я пытаюсь запустить приложение .NET (скомпилированное для запуска в качестве администратора), которое установит драйвер устройства. Я использую .NET exe для отображения приглашения «подключить устройство» к пользователю, если это необходимо, а затем выполнить фактическую установку драйвера в неуправляемом коде.

MSI немедленно вызывает приглашение UAC, но приложение запускается без повышения и не работает. Выполнение из командной строки с повышенными правами не помогает. Я где-то читал, что добавление манифеста в установку может помочь ... это не так.

Вот мой WIX код:

<?xml version="1.0"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="*" UpgradeCode="12345678-1234-1234-1234-111111111111" 
      Name="FlashBoot Driver" Version="0.0.1" Manufacturer="ACME Corp" Language="1033"> 
     <Package InstallerVersion="200" Compressed="yes" Comments="Windows Installer Package"/> 
     <Media Id="1" Cabinet="product.cab" EmbedCab="yes"/> 

     <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder"> 
      <Directory Id="INSTALLDIR" Name="FlashBoot Driver"> 
       <Component Id="AppFiles" Guid="12345678-1234-1234-1234-222222222222"> 
        <File Id="AppFile1" Source="C:\App\Release\Setup.exe"/> 
        <File Id="AppFile2" Source="C:\App\Release\Setup.exe.manifest"/> 
        <File Id="AppFile3" Source="C:\App\Release\Unmanaged.dll"/> 
       </Component> 
      </Directory> 
     </Directory> 
     </Directory> 

     <Feature Id="DefaultFeature" Level="1"> 
     <ComponentRef Id="AppFiles"/> 
     </Feature> 

     <CustomAction Id="OurAction" 
        Execute="deferred" 
        Impersonate="no" 
        Return="ignore" 
        FileKey="AppFile1" 
        ExeCommand="" /> 

     <InstallExecuteSequence> 
     <Custom Action="OurAction" Before="InstallFinalize" /> 
     </InstallExecuteSequence> 

    </Product> 
</Wix> 

ответ

0

Я решил это за счет того, Launch Installer WIX спутниковое приложение, которое в свою очередь, запускает программу установки драйвера. Новое приложение не требует повышения, в то время как установщик драйверов требует повышения. Дополнительным преимуществом является то, что новое приложение может определить, нужно ли ему запускать 32 или 64-битную версию установщика драйверов.

Было бы неплохо узнать, есть ли способ запустить приложение, требующее повышения непосредственно из установщика WIX.

+0

необходимо настроить настраиваемое действие для запуска отложенного без олицетворения, это заставит его работать с правами администратора под учетной записью LocalSystem. Кроме того, пользовательское действие должно быть упорядочено после стандартного действия InstallFiles, чтобы убедиться, что все ваши ресурсы находятся на компьютере, когда вы пытаетесь установить/использовать их. Этот метод применяется для пользовательских действий из любого пакета MSI, независимо от того, какой инструмент он использовал для его создания. –

+0

@Bogdon Mitrache, спасибо за ваш ответ. Я думал, что делаю то, что ты предлагаешь. Как вы можете видеть, выполнение отложено, а олицетворение отключено. Что касается секвенирования после InstallFiles, разве «до InstallFinalize» не выполняет одно и то же? –

+0

хм, извините, я, должно быть, пропустил ваш фрагмент, действительно, ваше настраиваемое действие настроено и запланировано правильно. Что говорит журнал установки? Кроме того, если вы посмотрите с Process Explorer на процесс вашего пользовательского действия EXE, под какой учетной записью он запущен? Возможно, ваш EXE должен запускаться под текущим пользователем администратора, поэтому, даже если он работает под учетной записью System с правами администратора, это не удастся. –