Добрый день.
Я создавал установщик для нашего продукта с помощью WIX (Windows Installer XML) технология. Ожидаемое поведение состоит в том, что продукт запускается, если флажок проверяется после установки.
Это работало в течение некоторого времени теперь, но мы недавно узнали, что контроль учётных записей Победы 7, и Vista мешает приложению запуститься. Я провел некоторое исследование, и было предложено мне, чтобы я добавил атрибуты
Выполните ='deferred' и явитесь олицетворением ='no'.
Который я сделал, но затем узнал, что для выполнения задержанный CustomAction должен быть выполнен между InstallInitialize и фазами IntallFinalize; который не является тем, в чем я нуждаюсь. Мне нужен продукт для запуска ПОСЛЕ ТОГО, КАК установка завершает, ЕСЛИ флажок запуска проверяется. Там какой-либо другой путь состоит в том, чтобы поднять полномочия?
Любой и все ответы, предложения или обоснования будут цениться.
В документации набора инструментов WiX есть тема под названием How To: Run the Installed Application After Setup, в которой рассказывается, как это сделать.
К сожалению, тема, которую упомянул Роб, не очень помогает для Windows Vista или 7, как я обнаружил . Особенно с включенным UAC.
Я решил обойти это с помощью CustomAction, который запускает командную строку и запускает нужное вам приложение.
<CustomAction
Id="LaunchApp"
Directory="YourDirectory"
ExeCommand="[SystemFolder]cmd.exe /C app.exe" />
Надеюсь, что это поможет.
Рэй
См. 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, который будет запускаться с повышенными правами, будет генерироваться при каждой сборке.