Запустите приложение после завершенной установки с включенным контролем учётных записей

Добрый день.

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

Это работало в течение некоторого времени теперь, но мы недавно узнали, что контроль учётных записей Победы 7, и Vista мешает приложению запуститься. Я провел некоторое исследование, и было предложено мне, чтобы я добавил атрибуты

Выполните ='deferred' и явитесь олицетворением ='no'.

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

Любой и все ответы, предложения или обоснования будут цениться.

10
задан Andreas Niedermair 11 March 2015 в 14:22
поделиться

3 ответа

В документации набора инструментов WiX есть тема под названием How To: Run the Installed Application After Setup, в которой рассказывается, как это сделать.

3
ответ дан 4 December 2019 в 01:30
поделиться

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

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

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

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

Рэй

5
ответ дан 4 December 2019 в 01:30
поделиться

См. 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, который будет запускаться с повышенными правами, будет генерироваться при каждой сборке.

2
ответ дан 4 December 2019 в 01:30
поделиться