2008-09-22 2 views
31

관리자가 설치해야하는 Nullsoft Install System을 사용하여 Windows 설치 프로그램을 작성하려고합니다. 설치 프로그램은 "logs"디렉토리를 만듭니다. 일반 사용자는이 응용 프로그램을 실행할 수 있기 때문에 일반 사용자는 해당 디렉토리에 쓰기 권한이 있어야합니다. 모든 사용자가 NSIS 스크립트 언어로 해당 디렉토리에 대한 쓰기 권한을 가질 수 있도록 지정하려면 어떻게합니까?NSIS에서 어떻게 디렉토리 권한을 설정합니까?

나는 이것이 일종의 나쁜 생각처럼 들린다는 것을 인정하지만이 응용 프로그램은 사적인 네트워크의 소수의 사람들 만 사용하는 내부 응용 프로그램입니다. 난 그냥 나쁜 일이 발생하면 왜 응용 프로그램이 고장 났는지 볼 수 있도록 저장된 로그 파일이 필요합니다. 사용자는 관리자가 될 수 없습니다.

답변

33

AccessControl 플러그인을 사용하고이 파일을 스크립트에 추가하십시오. 여기서 "logs"디렉토리는 설치 디렉토리에 있습니다.

AccessControl::GrantOnFile "$INSTDIR\logs" "(BU)" "FullAccess" 

이렇게하면 모든 사용자가 폴더에 액세스 할 수 있습니다.

3

편도 : 셸을 호출하고 cacls 또는 xcacls을 사용하십시오.

+2

+1 아무도이 사실을 이해하지 않으므로 아무 것도 없습니다. upvotes 슬프게도 .. – nawfal

2

왜 사용자의 % APPDATA % 디렉토리에 로그 디렉토리를 만들지 않습니까? 정말로 모든 로그를 설치 디렉토리에 넣어야합니까? 왜?

+0

다른 사용자가 너무 로그를 볼 수 있기를 바랍니다. 사용자가 APPDATA 디렉토리에있는 경우 사용자 1이 앱을 실행하면 사용자 1 또는 관리자 만 로그 파일을 볼 수 있습니다. –

9

Program Files 아래의 디렉터리에 대한 사용 권한을 변경하는 대신 모든 사용자가 쓸 수있는 위치에 로그를 두는 것이 좋습니다.

NSIS 설명서의 4.9.7.7 SetShellVarContext 섹션을 참조하십시오. $ APPDATA와 함께 사용하면 모든 사용자가 쓸 수있는 응용 프로그램 데이터 폴더를 가져올 수 있습니다.

+1

log4net에서이 작업을 수행하는 방법에 대한 답변을 살펴보십시오. http://stackoverflow.com/questions/468989/how-to-specify-common-application-data-folder-for-log4net/1889591#1889591 –

6

그것은 지금 오래된 문제입니다에 따라 "사용자"에 equivalente을하지만 대신 나는이 하나를 사용했다 디렉토리는 원하는대로 할 수있는 좋은 방법입니다. 사용자의 개인 APPDATA는 사용하지 말고 "모든 사용자"APPDATA 디렉토리를 사용하십시오! 이렇게하면 누구든지 로그 파일에 액세스 할 수 있습니다.

또한 GrantOnFile에서 (BU)를 사용하는 것이 일부 시스템 (Windows 7 x64 (잘 기억하는 경우))과 잘 작동하지 않습니다. 대신 SID "(S-1-5-32-545)"를 사용해야합니다 (모든 사용자의 SID입니다.이 값은 각 Windows OS에서 상수 임).

관련 문제