2009-01-13 4 views
3

NSIS를 사용하여 설치 프로그램을 작성했으며 C :/Program Files/App Name /과 같은 표준 위치에 일부 파일 (DLL 등)을 설치해야합니다. 또한 현재 사용자의 Application Data 디렉토리에 파일을 설치해야합니다. 문제는 사용자가 Vista의 관리자가 아닌 경우 권한을 높이고 환경 변수를 변경해야 현재 사용자가 관리자 사용자로 표시되어 결국 관리자 대신에 사용자 디렉토리에 설치된다는 것입니다. 실제 사용자. 설치 프로그램을 시작할 때 사용자 이름을 붙잡고 나서 들어 올릴 수 없을 때 권한 상승을해야합니다. 관리자로서 설치 프로그램을 실행할 때 실제 사용자를 파악할 수있는 합리적인 방법이 있습니까?관리자로 실행할 때 현재 로그온 한 사용자

편집 : 불행히도 처음 실행시 데이터를 복사하는 것은 옵션이 아닙니다. MS 워드 템플리트이기 때문에 사용자의 디렉토리에 쓰고있는 것 없이는 앱이 작동하지 않습니다. 내 물건은 템플릿없이 실행되지 않으므로 설치시 템플릿을 작성해야하며 Word는 템플릿이 사용자의 AppData 디렉토리에 있어야합니다.

답변

3

모든 NSIS 설치 관리자는이 UAC 플러그인을 사용합니다 : http://nsis.sourceforge.net/UAC_plug-in.

설치 프로그램을 실행하자마자 관리자 권한으로 승격 할 수 있습니다. 이렇게하면 모든 작업을 수행하는 설치 프로그램의 두 번째 인스턴스가 생성됩니다. 그러나 원래 프로세스에서 실행할 코드 세그먼트를 설치 프로그램을 시작한 사용자로 호출 할 수 있습니다. 당신은 사용자 보장 할 수 없기 때문에 그냥 응용 프로그램의 첫 번째 실행에서 이러한 것들을 수행 OS X의 트릭을,

Section "Install My Program" SecMain 
    ...  
    # Install files to common folders 
    ... 
    !insertmacro UAC.CallFunctionAsUser CopyUserWordTemplate 
    ... 
SectionEnd 

Function CopyUserWordTemplate 
    SetOutPath $LOCALAPPDATA 
    File "MyWordTemplate.dot" 
FunctionEnd 
1

Windows 7 Logo Program 문서를 살펴보십시오. 상태 :

컴퓨터 설치의 경우 설치 중에 사용자 데이터가 처음 설치 될 때 쓰여지는 것이 아니라 설치하는 동안 사용자 데이터가 저장되어야합니다. 설치시 날짜를 저장할 올바른 사용자 위치가 없기 때문입니다.

응용 프로그램이 한 명의 사용자만을 대상으로하는 경우. 그런 다음 로컬 설정 폴더 (비스타와 윈도우 7에서 약간 다른 이름으로 생각합니다)에 설치해야합니다.

+0

+1 수행

그래서 당신은 너무 같은 설치 섹션을 가질 수있다 앱을 실행 한 사람이 앱을 설치 한 사람입니다. –

+0

불행히도 그건 옵션이 아닙니다. MS 워드 템플리트이기 때문에 사용자의 디렉토리에 쓰고있는 것 없이는 앱이 작동하지 않습니다. 내 물건은 템플릿없이 실행되지 않으므로 설치시 템플릿을 작성해야하며 Word는 템플릿이 사용자의 AppData 디렉토리에 있어야합니다. – alanc10n

2

다른 사용자가 응용 프로그램을 실행하려고하면 어떻게됩니까? 그렇다면 파일을 사용할 수 없습니다 - 이것은 여러 달 동안 함께 싸웠던 문제입니다 ...

제가 발견 한 가장 좋은 해결책은 활성 설치라고하는 조금 알려진 (완전히 문서화되지 않은) Windows 기능을 활용하는 것이 었습니다.. 작동 원리에 대한 설명은 http://www.etlengineering.com/installer/activesetup.txt을 참조하십시오.

이것은 IE가 위의 링크를 요약하기 위해 사용자 별 설정을 설치하는 데 사용하는 것과 동일한 기능입니다. 기본적으로 사용자가 로그인 할 때마다 Windows가 확인하는 레지스트리 키를 만듭니다. HKCU 키의 값이 적 으면 HKLM에서 발견 된 것보다, 정의 된 스크립트/프로그램/무엇이든 실행합니다. 사용자 별 파일을 프로그램 파일 폴더에 설치 한 다음 Active Setup 기능을 사용하여 다음에 로그인 할 때 사용자 프로필에 복사합니다. 설치가 완료 될 때 설치되어 있는지 확인해야하는 경우 설치가 완료되면 다시 부팅을 예약하십시오.

PS. NSIS 대신 MSI를 사용하면 설치 프로그램을 시작할 때 상승 할 필요가 없으며 Vista가 Execute 시퀀스 시작 부분에서 고도를 트리거해야합니다 (설치 프로그램이 제대로 설계된 경우 - 거의 없습니다). 그러나 NSIS를 사용하는 경우 그러면 설치 관리자가 실행될 때 표고를 트리거해야한다고 생각합니다.

편집 : 하하, 내 정확한 문제는 MS Word 템플릿에서도 발생했습니다. Word 템플릿에서 찾은 솔루션은 HKLM\SOFTWARE\Microsft\Windows\CurrentVersion\App Paths\Winword.exe에서 설치 디렉터리를 읽고 해당 레지스트리 키에 포함 된 경로 아래의 STARTUP 폴더에 설치하는 것입니다. 사용자는 디지털 서명이되어 있어도 매크로를 처음 실행할 때 매크로를 허용할지 묻는 메시지가 표시되지만 모든 사용자가 매크로를 사용할 수 있습니다. 나중에 사용 권한 오류가 발생하지 않도록 읽기 전용으로 템플릿을 설정해야합니다.

+0

이것은 아주 멋지다. 나는 이것을 설정하고 내가해야 할 모든 일을하는지 알아 보겠다. 그렇다면 매우 도움이되었습니다. 실제로, 당신은 나의 시험의 결과에 관계없이 매우 도움이되었습니다. 감사. – alanc10n

+0

대단한 트릭, 고마워. – Roel

관련 문제