2012-02-06 2 views
0

사용자 수준에서 MSI 패키지를 설치하고 HKLM에서 여러 레지스트리 키를 설정하려고합니다. 두 번째는 관리자 수준이 필요하며 NSIS :: UAC 플러그인을 사용하여 수행 할 수 있습니다. 그러나 사용자가 선택한 체크 박스에 대해 InnerInstance (관리자 수준의 권한으로)에 알릴 수있는 방법이 필요합니다. 이러한 정보를 교환하기 위해 다음과 같은 가능한 방법이 있습니다 (단 1 또는 0)유니 코드 NSIS 설치 프로그램 및 UAC 플러그인 : 내부 및 외부 인스턴스 간의 데이터 교환 방법

    두 인스턴스는

더 성공에 액세스 할 수 없습니다 폴더에

  • INI 파일, APPDATA은 다르다 및 COMMONAPPDATA은 관리 수준, TMP를 요구 이 프로파일 이름에 의존하기 때문에 옵션도 아니다

    • 글로벌 응용 프로그램 변수

    성공하지 못했습니다. 변수가 없습니다. BTW 나는 간단한 콘솔을 실행하는 경우에도 변수를 설정하고 다른 콘솔을 실행 - 내가 설정 한 플러그인을 쓰기 변수

    • 을보고 세마포어 얻을

    은 간단한 설치를 위해 너무 복잡한다고 가정하지 않았다 다른 옵션을 사용할 수 없습니다 경우 문제는, 그러나 그것을 선택합니다

    • SyncVariable 매크로

    ! 맥 RO _SyncVariable _variable Lprefix L $ {LINE} 푸시 $ R0 고토 _SyncVariableInner $ {Lprefix} _SyncVariableOuter $ {Lprefix} 정의! strcpy를 $ R0 $ {_ 변수} 반환 _SyncVariableInner $ {Lprefix} : 를 ! insertmacro UAC_AsUser_Call 라벨 _SyncVariableOuter $ {Lprefix} $ {UAC_SYNCREGISTERS} strcpy와의 $ {_ 변수} $ R0 은! Lprefix 팝업 $ R0 확정적! 을 macroend! !insertmacro _SyncVariable

    작동하는 가정

    , BU를 SyncVariable을 정의 t은하지 않았다

    • 새로운 UAC 플러그인을 가져 오기 - 나는 이진 파일을 얻을 수있는 최신 버전 NSIS 유니 코드 그래서

    구축 지원하지 않았기 때문에, 보지 않은 사람이 링크와 함께 나를 도울 수 , 생각?

  • +0

    어떤 플러그인 버전을 사용하고 있습니까? – Anders

    답변

    0

    NSIS의 공식 유니 코드 빌드는 존재하지 않지만 포크 된 프로젝트가 있지만 UAC 플러그인은이 구성에서 지원되지 않으므로 컴파일 된 DLL을 제공하지 않습니다 (이 경우 컴파일 된 버전을 얻을 수 있습니다. NSIS IRC 채널에서 물어보십시오).

    이러한 종류의 하이브리드 설치 프로그램은 제대로 작동하기 어렵 기 때문에 IMHO를 수행해서는 안됩니다. 액세스 제어 플러그인을 사용하여 모든 사용자에게 $windir\temp\{yourguid} 또는 HKLM\Software\{yourguid}에 대한 쓰기 권한을 부여하면 정보를 교환 할 수는 있지만 이는 잠재적 인 보안 구멍이기도합니다.명명 된 전역 커널 객체 (세마포어, 메모리 맵 등)에 동일한 문제가 있습니다.

    +0

    몇 가지 HKLM 키가 필요하므로 권한을 높이는 작은 C++ 프로그램을 작성하고 전체 NSIS 설치 프로그램이 사용자 수준에서 유지됩니다. –