10

良い一日。

WIX (Windows Installer XML) テクノロジを使用して、製品のインストーラを作成しています。インストール後にチェックボックスをオンにすると、製品が起動することが予想されます。

これはしばらくの間機能していましたが、最近、Win 7 の UAC と Vista がアプリケーションの起動を停止していることがわかりました。いくつかの調査を行ったところ、属性を追加する必要があることが提案されました

Execute='deferred' および Impersonate='no'。

私はこれを行いましたが、遅延実行するには、InstallInitialize フェーズと IntallFinalize フェーズの間で CustomAction を実行する必要があることがわかりました。これは私が必要とするものではありません。起動チェックボックスがチェックされている場合、インストールのファイナライズ後に製品を起動する必要があります。権限を昇格させる他の方法はありますか?

ありとあらゆる回答、提案、共鳴を歓迎します。

4

3 に答える 3

5

残念ながら、Robが言及したトピックは、私が見つけたように、WindowsVistaまたは7では実際には役に立ちません。特にUACがオンになっている場合。

私がこれを回避する方法は、コマンドプロンプトを起動し、必要なアプリケーションを起動するCustomActionを使用することです。

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

お役に立てば幸いです。

レイ

于 2010-05-07T10:36:01.823 に答える
3

WiX ツールセットのドキュメントには、セットアップ後にインストール済みアプリケーションを実行する方法を説明するトピックがあります。

于 2010-05-01T21:51:37.370 に答える
2

WiX と DTF: ブートストラッパーを使用して、Vista で昇格された特権を強制する を参照して、昇格した msi 全体を実行する方法を確認してください。

GenerateBootstrapper タスクを使用して、.wixproj ファイルでこれを自動化できます。要約する:

次のように 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 がビルドごとに生成されます。

于 2010-07-22T20:18:25.423 に答える