2010-02-17 4 views
10

안녕하세요.UAC를 켜고 설치가 완료되면 응용 프로그램을 시작하십시오.

저는 WIX (Windows Installer XML) 기술을 사용하여이 제품의 설치 프로그램을 작성했습니다. 예상 된 동작은 설치 후 확인란을 선택하면 제품이 시작된다는 것입니다.

이 기능은 현재 다소 효과가 있지만 최근에는 Windows 7 및 Vista의 UAC가 응용 프로그램 실행을 중지하고 있음을 알게되었습니다. 몇 가지 조사를 해본 결과, 속성을 추가해야한다고 제안되었습니다.

Execute = 'deferred'및 Impersonate = 'no'.

내가 그랬지 만 연기 된 것을 실행하면 CustomInction이 InstallInitialize와 IntallFinalize 단계 사이에서 수행되어야한다는 것을 알게되었습니다. 그건 내가 필요로하는 것이 아니야. 시작 체크 박스가 선택되어 있으면 설치 완료 후 실행할 제품이 필요합니다. 권한을 높이는 다른 방법이 있습니까?

모든 대답, 제안 또는 공명은 인정 될 것입니다.

답변

5

Rob이 언급 한 주제가 Windows Vista 나 7에서 실제로 도움이되지 않습니다. 특히 UAC가 켜져 있습니다.

내가이 문제를 해결 한 방법은 명령 프롬프트를 시작하고 사용자가 원하는 응용 프로그램을 시작하는 CustomAction을 사용하는 것입니다.

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

희망이 있습니다.

레이

2

는 전체 MSI가 상승 실행할 수있는 WiX and DTF: Using a bootstrapper to force elevated privileges in Vista를 참조하십시오.

GenerateBootstrapper 작업을 사용하여 .wixproj 파일에서이를 자동화 할 수 있습니다. 요약하면 :이처럼 .wixproj 파일을

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

수정 :

이 같은 setup.manifest 만들기

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

을 이제 상승 실행할 올바른 SETUP.EXE가 될 것입니다 모든 빌드에서 생성됩니다.