2014-09-18 2 views
2

InstallShield에서 MSI 프로젝트를 작성했으며 일부 지원 드라이버 항목을 설치하기 위해 사용자 정의 조치로 installscript 메소드를 추가했습니다. 매개 변수가있는 실행 파일을 실행하려면 "LaunchAppAndWait"방법을 사용하고 있습니다.LaunchAppAndWait을 사용하여 Installshield MSI 프로젝트에서 실행 파일을 관리자로 실행하십시오.

LaunchAppAndWait("C:\\Windows\\System32\\RUNDLL32.exe", szWBW, LAAW_OPTION_WAIT); 

szWBW 내가 EXE 파일을 전달하고 내 매개 변수 문자열입니다. 이 실행 파일을 관리자 권한으로 명령 줄에서 실행하면 정상적으로 작동합니다. 관리자 권한이 없으면 실패합니다.

MSI 설치 프로그램을 실행할 때이 줄이 제대로 실행되지 않고 "작업을 완료 할 수 없습니다"라는 오류 메시지가 반환됩니다 (오류 메시지 : 0x000007b). 따라서이 문제를 해결하려면 관리자로 실행하고 싶습니다. 지금까지 관리자로서이 특정 라인을 실행하는 솔루션을 찾을 수 없었습니다.

EXE를 실행하기 위해 다른 방법을 시도했습니다.

cd C:\Windows\System32\ 
C:\Windows\System32\RUNDLL32.exe szWBW 

다음은 변환기 도구로 EXE 파일로 만듭니다. 내 프로젝트의 사용자 지정 작업에서이 EXE 호출하십시오. 이 방법은 EXE 설정에서 잘 작동합니다. EXE 설정은 관리자 권한으로 내 EXE를 실행하기 때문입니다. 그러나 MSI는 이것을하지 않고 제대로 실행하지 못했습니다.

(참고 :. 내가 MSI 설치하지 EXE 설정이 필요합니다)

누군가 나에게이 문제를 해결할 수있는 솔루션을 제공하십시오.

미리 감사드립니다.

+0

는 사용자 지정 작업은 즉시 수 있습니다 높은. 대신 지연시켜야합니다. 즉, 시작할 위치이며, [WindowsFokder] 속성 http://msdn.microsoft.com/en-us/library/aa372816(v=vs.85)에서 경로를 결정합니다.aspx이며 64 비트 시스템에서 32 비트 설정을 사용하면 문제가 발생할 수 있습니다. – PhilDW

답변

1

제한된 권한으로 MSI 기반 설치 프로그램을 실행하는 것이 좋습니다. 이 중 일부는 MSI를 시작한 사용자 컨텍스트에서 항상 실행되는 지연되지 않는 작업으로 유출되며 해당 옵션이있는 지연된 작업이 실행됩니다. 따라서 PhilDW가 언급 한 것처럼 시스템 컨텍스트에서 지연된 을 실행하도록 사용자 지정 동작을 설정할 수 있으면 필요한 동작을 수행 할 수 있습니다 (따라서 실행되는 exe). RunDll32를 호출하는 대신 UseDLL 및 관련 InstallScript API를 사용하는 것이 좋습니다. 그러나 잠재적 인 최적화 일뿐입니다.

경우에 따라서는 Windows Installer가 허용하지 않는 경우가 더 많습니다. 이 경우 두 가지 잘못된 옵션이 있습니다. 첫 번째 잘못된 옵션은 setup.exe의 매니페스트를 관리자로 항상 실행되도록 변경하는 것입니다. 이렇게하면 제한된 권한 컨텍스트를 완전히 피하려고 시도하지만 일반적으로 유지 관리 중에 또는 setup.exe를 사용하여 설치를 시작하지 않는 경우이 작업이 중단됩니다.

두 번째 잘못된 옵션은 LaunchAppAndWait 대신 LaunchApplication을 사용하고 LAAW_OPTION_USE_SHELLEXECUTE 옵션을 포함합니다. ShellExecute를 사용하면 새로 실행 된 실행 파일을 향상시키는 UAC 프롬프트를 표시 할 수 있습니다. ShellExecute (즉, CreateProcess)가 없으면 UAC 프롬프트가 표시되지 않습니다. 이 경우 사용자가 수락 할 수있는 추가 UAC 프롬프트가 나타나기 때문에 바람직하지 않습니다.

(runasLAAW_SHELLEXECUTEVERB 설정 여담으로, 당신은 Windows Vista 이상에 대한 관리 권한을 필요로하지 않는 EXE 파일을 올리고 있습니다.) 실행되지 않도록

+0

지침에 따라 "LaunchAppAndWait"대신 "LaunchApplication"을 사용하고 사용자 정의 작업에 "시스템 컨텍스트에서 지연"을 사용했습니다. 그것은 나를 위해 잘 작동했습니다. :) –