2014-11-27 2 views
1

설치자가 InstallPrivileges="elevated"입니다.관리자 권한이 상승 된 설치 관리자가 실행 파일을 상승시키지 않습니다.

<CustomAction Id="SetProp" Property="Launch" Value ="&quot;[INSTALLDIR]myapp.exe&quot;"/> 
<CustomAction Id="Launch" BinaryKey="WixCA" DllEntry="CAQuietExec64" Execute="deferred" Return="ignore" Impersonate="no"/> 

과 같이 일정 :

<Custom Action="SetProp" Before="Launch">NOT Installed</Custom> 
    <Custom Action="Launch" Before="InstallFinalize">NOT Installed</Custom> 

하지만 Uachelper에 따라 나는 elevcated 상태로 실행하려면이 CA를 사용하여 파일 테이블 내부에 App.exe가

<Component Id="myapp" Guid="*"> 
    <File Id="myapp" Source="myapp.exe"/> 
    </Component> 

포함 클래스 (C#) 및 누락 된 결과이 프로세스는 상승되지 않지만 자세한 로그 및 myapp.exe 로그에는 오류가 표시되지 않습니다.

또한 유형 2 사용자 정의 작업 (binarykey 등), 유형 18 사용자 정의 작업 (파일 키 등)을 사용하고 myapp.exe에 필수 관리자와 함께 app.manifest를 포함하려고했습니다.

설치하는 동안 myapp.exe를 올리려고 아무 것도 작동하지 않았습니다.

해결 방법 설치가 완료된 후 myapp.exe를 수동으로 시작하는 것으로 나타났습니다 ([INSTALLDIR]로 이동하여 myapp.exe를 더블 클릭하고 uac 등을 나타낼 것입니다).하지만 피하고 싶습니다. 나는 또한 runas을 사용하려고 생각했지만 이것이 작동하는지 또는 이것이 가능한지 확실하지 않습니다.

이 모든 내용은 http://wixtoolset.org/documentation/manual/v3/customactions/qtexec.html, https://stackoverflow.com/a/10028939/4096653 및 기타 많은 질문을 바탕으로 작성되었습니다.

무엇이 누락 되었습니까? 아니면 내가 뭘 시도 할 수 있습니까?

답변

2

기본적으로 사용자 지정 작업은 지연되고, 가장하지 않으며 InstallInitialize와 InstallFinalize 사이에서 시퀀싱되고 시스템마다 설치되는 경우에만 상승되며 시스템 계정과 함께 상승됩니다. 실제로 작동하는지 여부는 코드가 HKCU에 대한 액세스 권한이있는 대화 형 사용자, PersonalFolder와 같은 사용자 프로필 항목으로 실행되고 있지 않음을 인식하고 처리 할 준비가되었는지 여부와 코드가 데이터의 위치를 ​​알고 있는지 여부에 따라 다릅니다. 커스텀 액션 실행 파일이 실행될 때 CreateProcess() 타입의 호출 (쉘 실행 호출이 아님)을 통해 UAC 다이얼로그/매니페스트 점검 작업이 진행되지 않습니다. 따라서 지연된 상태이고 InstallFinalize 전에 WiX 게시 된 게시물이 올바른지 확인하십시오. UACHelper 클래스가 시스템으로 실행되고 상승했을 때 어떤 생각을하는지 전혀 모르겠습니다. ProcessMonitor/Explorer는 귀하의 권리/토큰이 무엇인지 알려줍니다.

대화 형 사용자가 Explorer에서 실행 한 것처럼 동작하기 때문에 exe의 명시 적 셸 실행을 가장 한 실행자 사용자 지정 동작을 만드는 경우 작동합니다. 앱을 실행하면 설치를 수행하는 사용자가 admin 인 경우 권한 상승을 요청합니다. 코드에서 ProcessStartInfo.UseShellExecute = true, ShellExecute() Win32와 같은 것입니다.

가장 된 CA를 상승시켜야하는 경우 MSI를 관리자로 실행하거나 MSI를 실행하는 고도 매니페스트가있는 프로그램에서 시작해야합니다.

앱을 처음 실행할 때 자동으로 실행하고, 실행하고 실행했는지 여부를 기억해야한다는 충고가 많이 있습니다. 상승 된 부트 스트 래퍼를 사용하지 않으면 MSI에서 상승 된 사용자로 실행하는 것이 너무 복잡합니다.

+0

설명 : 상승 된 CA에 대한 요구 사항이 모두 있으며 MSI도 관리자 권한으로 실행됩니다. 그러나 2를 입력해도 18 CA를 입력하고 조용한 exec가 myapp.exe를 올리기 위해 작동하지 않습니다. 이 값을 현재 사용자 (시스템 계정이 아닌)로 올리려면 Launcher 응용 프로그램을 호출 할 다른 elevatd CA를 만들어야합니다. 이 런처 앱은 shellexecute를 사용하여 myapp.exe를 호출하여 현재 사용자에게 UAC 창을 표시합니다. 나는 그것을 올바르게 이해 했는가? – sceiler

+0

맞습니다. 정상 체크인을하는 것이 매우 쉽고 런처가 완료되거나 실행 CA가 대기해야하는 경우 전체 설치를 계속할지 결정해야합니다. – PhilDW

0

나는 당신이에서 실행 순서를 실행하고 싶은 InstallExecuteSequence에서

에서 사용자 지정 작업을 예약 한 가정

이 앱이 네 그래서 로컬 시스템으로 사용자를 실행하려면로 가장 전환을 시도 할 수 없을 정도로 수 있습니다 Impersonate="Yes"

관련 문제