2010-02-17 4 views
10

Buona giornata.Avvia l'applicazione al termine dell'installazione, con UAC attivato

Ho creato un programma di installazione per il nostro prodotto utilizzando la tecnologia WIX (Windows Installer XML). Il comportamento previsto è che il prodotto viene avviato, se la casella di controllo è selezionata dopo l'installazione.

Questo funziona da un po 'di tempo, ma abbiamo scoperto recentemente che UAC di Win 7 e Vista sta bloccando l'avvio dell'applicazione. Ho effettuato alcune ricerche e mi è stato suggerito di aggiungere gli attributi

Execute = 'posticipato' e Impersonato = 'no'.

Cosa ho fatto, ma poi ho scoperto che per eseguire il posticipato, è necessario eseguire CustomAction, tra le fasi InstallInitialize e IntallFinalize; che non è ciò di cui ho bisogno. Ho bisogno che il prodotto venga avviato DOPO l'installazione finalizzata, SE la casella di controllo del lancio è selezionata. C'è un altro modo per elevare le autorizzazioni?

Tutte le risposte, suggerimenti o risonanze saranno apprezzate.

risposta

5

Sfortunatamente, l'argomento che Rob ha menzionato non aiuta molto per Windows Vista o 7 come ho trovato. Soprattutto con UAC attivato.

Il modo in cui mi sono aggirato in questo consiste nell'utilizzare una CustomAction che avvia il prompt dei comandi e avvia l'applicazione desiderata.

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

Spero che questo aiuti.

Ray

2

Vedere WiX and DTF: Using a bootstrapper to force elevated privileges in Vista come è possibile eseguire l'intero msi elevato.

È possibile automatizzarlo nel file .wixproj con l'aiuto dell'attività GenerateBootstrapper. Per riassumere:

Creare un setup.manifest come questo:

<?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> 

e modificare il file .wixproj in questo modo:

<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\[email protected])</WindowsSDK> 
</PropertyGroup> 
<PropertyGroup Condition="$(WindowsSDK) == ''"> 
    <WindowsSDK>$(registry:HKEY_CURRENT_USER\SOFTWARE\Microsoft\Microsoft SDKs\[email protected])</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> 

Ora una corretta setup.exe che si svolgerà elevata sarà generato su ogni build.