Запустите приложение после завершения установки с включенным UAC - PullRequest
10 голосов
/ 17 февраля 2010

Добрый день.

Я создавал установщик для нашего продукта с использованием технологии WIX (Windows Installer XML). Ожидаемое поведение заключается в том, что продукт запускается, если флажок установлен после установки.

Это работает уже некоторое время, но недавно мы узнали, что UAC в Win 7 и Vista не позволяют запускать приложение. Я провел некоторое исследование, и мне предложили добавить атрибуты

Execute = 'deferred' и Impersonate = 'no'.

Что я и сделал, но потом обнаружил, что для выполнения отложенного необходимо выполнить CustomAction между фазами InstallInitialize и IntallFinalize; что не то, что мне нужно. Мне нужен продукт для запуска ПОСЛЕ финализации установки, ЕСЛИ установлен флажок запуска. Есть ли другой способ повысить разрешения?

Будем благодарны за любые ответы, предложения или отзывы.

Ответы [ 3 ]

5 голосов
/ 07 мая 2010

К сожалению, тема, о которой говорил Роб, на самом деле не помогает для Windows Vista или 7, как я обнаружил. Особенно с включенным UAC.

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

<CustomAction 
    Id="LaunchApp" 
    Directory="YourDirectory" 
    ExeCommand="[SystemFolder]cmd.exe /C app.exe" />

Надеюсь, это поможет.

Ray

3 голосов
/ 02 мая 2010

В документации набора инструментов WiX есть тема под названием Как: запускать установленное приложение после установки , в котором описано, как это сделать.

2 голосов
/ 23 июля 2010

См. WiX и DTF: использование загрузчика для принудительного повышения привилегий в Vista , как вы можете запустить всю msi повышенную

Вы можете автоматизировать это в файле .wixproj с помощью задачи GenerateBootstrapper. Подведем итог:

Создайте файл setup.manifest следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="Setup" type="win32" />
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

И измените ваш файл .wixproj так:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <!-- standard PropertyGroups and ItemGroups -->

 <PropertyGroup>
   <WindowsSDK>$(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows@CurrentInstallFolder)</WindowsSDK>
 </PropertyGroup>
 <PropertyGroup Condition="$(WindowsSDK) == ''">
   <WindowsSDK>$(registry:HKEY_CURRENT_USER\SOFTWARE\Microsoft\Microsoft SDKs\Windows@CurrentInstallFolder)</WindowsSDK>
 </PropertyGroup>

 <PropertyGroup>
   <mt_exe>$(WindowsSDK)bin\mt.exe</mt_exe>
 </PropertyGroup>

 <ItemGroup>
   <BootstrapperFile Include="Microsoft.Windows.Installer.3.1" >
     <ProductName>Windows Installer 3.1</ProductName>
   </BootstrapperFile>
   <!-- more BootstrapperFile items -->
 </ItemGroup>

 <Target Name="Bootstrapper"
         Inputs="$(OutDir)$(TargetFileName)"
         Outputs="$(OutDir)\Setup.exe"
         Condition=" '$(OutputType)'=='package' " >
   <GenerateBootstrapper ApplicationName="application name"
                         ApplicationFile="$(TargetFileName)"
                         BootstrapperItems="@(BootstrapperFile)"
                         ComponentsLocation="Relative"
                         OutputPath="$(OutputPath)"
                         Culture="en-US"
                         Path="$(WindowsSDK)\Bootstrapper" />
 </Target>

 <Target Name="PatchSetupExe" DependsOnTargets="Bootstrapper">
   <Exec Command='"$(mt_exe)" -manifest setup.manifest -outputresource:$(OutDir)\Setup.exe;#1' IgnoreExitCode='false' />
 </Target>

 <Import Project="$(MSBuildExtensionsPath)\Microsoft\WiX\v3.0\Wix.targets" />

 <PropertyGroup>
   <BuildDependsOn>$(BuildDependsOn);Bootstrapper;PatchSetupExe</BuildDependsOn>
 </PropertyGroup>
</Project>

Теперь правильный setup.exe, который будет работать с повышенными правами, будет генерироваться при каждой сборке.

...