문제

관리자가 설치해야 하는 Nullsoft Install System을 사용하여 Windows 설치 프로그램을 구축하려고 합니다.설치 프로그램은 "logs" 디렉터리를 만듭니다.일반 사용자가 이 애플리케이션을 실행할 수 있으므로 일반 사용자가 해당 디렉토리에 쓸 수 있어야 합니다.모든 사용자가 NSIS 스크립트 언어로 해당 디렉토리에 대한 쓰기 액세스 권한을 갖도록 지정하려면 어떻게 해야 합니까?

나는 이것이 일종의 나쁜 생각처럼 들린다는 것을 인정하지만 애플리케이션은 개인 네트워크에서 소수의 사람들만이 사용하는 내부 앱일뿐입니다.문제가 발생하는 경우 앱이 중단되는 이유를 확인할 수 있도록 저장된 로그 파일이 필요합니다.사용자는 관리자가 될 수 없습니다.

도움이 되었습니까?

해결책

사용 액세스 제어 플러그인을 설치한 다음 이를 스크립트에 추가하세요. 여기서 "logs" 디렉터리는 설치 디렉터리에 있습니다.

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

그러면 모든 사용자에게 폴더에 대한 전체 액세스 권한이 부여됩니다.

다른 팁

AccessControl::GrantOnFile "<folder>" "(BU)" "FullAccess" Windows Server 2008 시스템에서는 작동하지 않았습니다.대신에 나는 이것을 사용해야 했습니다:

AccessControl::GrantOnFile "<folder>" "(S-1-5-32-545)" "FullAccess"

S-1-5-32-545는 다음에 따라 "사용자"와 동일합니다. http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q243330

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

NSIS 설명서의 4.9.7.7 SetShellVarContext 섹션을 참조하세요.$APPDATA와 함께 사용하면 모든 사용자가 쓸 수 있는 애플리케이션 데이터 폴더를 얻을 수 있습니다.

지금은 오래된 문제이지만 Sören APPDATA 디렉토리에서 제안한 대로 원하는 작업을 수행하는 좋은 방법은 다음과 같습니다.사용자의 개인 APPDATA를 사용하지 말고 "모든 사용자" APPDATA 디렉토리를 사용하세요!이렇게 하면 누구나 로그 파일에 액세스할 수 있습니다 ;-)

또한 GrantOnFile에서 (BU)를 사용하면 일부 시스템(잘 기억한다면 Win 7 x64)에서는 제대로 작동하지 않는다는 내용을 읽었습니다. 대신 SID "(S-1-5-32-545)"를 사용해야 할 수도 있습니다. (모든 사용자의 SID이며, 이 값은 각 Windows OS에서 상수입니다.)

일방 통행:쉘을 호출하고 사용하십시오. cacls 또는 xcacls.

사용자의 %APPDATA% 디렉토리에 로그 디렉토리를 생성하면 어떨까요?정말로 모든 로그를 설치 디렉터리에 넣어야 합니까?왜?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top