2009-10-26 5 views
7

기본 MSI 설치 프로그램을 사용하여 programdata 폴더 내에 파일 세트를 설치하려고합니다. 파일의 내용이 동적이며 설치 프로세스 중에 생성되므로 설치하는 동안 C# 코드로 파일을 생성합니다.MSI 설치 프로그램 파일/폴더 사용 권한

파일은 적절한 폴더에 만들어지며 파일 사용 권한을 제외한 모든 것이 좋습니다. 내가 알고 있듯이 파일은 상위 폴더 (사용하도록 설정된 경우)에서 사용 권한을 상속 받겠다 고 가정되지만이 경우에는 발생하지 않습니다. 작성한 파일은 일반 사용자에게 쓰기 가능해야하며 작성된 각 파일에 대해 사용 권한을 명시 적으로 설정하지는 않습니다. 설치 프로그램이 다른 사용 권한으로 실행되므로 파일이 상위 폴더에서 사용 권한을 상속받지 않을 수 있습니까?

미리 도움을 청하십시오.

+0

이게 이상합니다. 설치 후 사용 권한을 확인 했습니까? 즉 그들은 단지 읽기 전용이 아닙니다. –

+0

예. 문제는 설치 프로그램에서 생성 된 폴더에 관리자 (또는 이와 유사한 사용자)의 기본 사용 권한이 부여된다는 것입니다. 수동으로 폴더 사용 권한을 설정하여 일반 사용자가 쓸 수있게했습니다. 그러나 폴더에 생성 된 파일은 폴더에 수동으로 설정된 사용 권한을 상속하지 않습니다 (물론 관리자는 아마도 관리자로 실행되는 설치 프로그램에서 파일을 만듭니다). 어쩌면 해결책은 수동으로 파일에 대한 사용 권한을 조정하는 것이지만, 나는 좋은 접근법을 찾지 못합니다. – Kenneth

답변

3

설치 프로그램이 관리자 액세스 권한으로 실행되므로 프로그램 파일의 내용을 변경할 수 있습니다. 일반 사용자는 프로그램 파일 폴더와 ProgramData/Common Application Data 폴더에 대한 읽기 전용 액세스 권한을가집니다.

MSI의 lock permission table을 사용하면 설치 프로그램이 ProgramData/Common Application Data에서 작성한 후 폴더의 사용 권한을 변경할 수 있습니다. Visual Studio의 설치 프로젝트는 MSI의 잠금 권한 테이블을 지원하지 않으므로 사용자가 만든 폴더가 설치 프로젝트의 일반 사용자에게 쓰기 가능하도록하려면 SetNamedSecurityInfo를 사용하여 사용자 지정 작업에서 권한을 부여하거나 MSI 데이터베이스를 게시물로 수정해야합니다 빌드 단계. 또한 MSI의 잠금 권한 테이블을 처리 할 수있는 MSI 제작 소프트웨어를 찾을 수 있습니다.

+0

ProgramData 폴더 (Vista)에 대한 일반 사용자의 읽기/쓰기 액세스 권한이 있어야합니다. –

+0

공통 ProgramData는 일반 사용자 만 읽을 수 있습니다. 모든 사용자에게 R/W를 부여하려면 설치 프로그램이 하위 폴더를 만든 후 권한을 변경해야합니다. –

1

사용자 지정 작업을 사용하여 폴더 사용 권한을 수동으로 설정하고 다른 사용자 지정 작업을 사용하여 파일을 생성 및 설치하면 실행 순서에 따라 문제가 발생할 수 있습니다.

2

나는 매우 비슷한 문제가있어서 예 here을 사용하여 해결할 수있었습니다.

1

여기에도 비슷한 문제가 있습니다. 여기서 문제는 msi가 SYSTEM 사용자와 파일을 생성하고 있다는 것입니다. 그리고 런타임시 응용 프로그램은 기록 된 사용자 (이 파일에 대한 쓰기 권한이 없음)를 사용하고있었습니다. 설치 프로그램에서 만든 파일로 응용 프로그램을 초기화하는 동안 새 파일 (없는 경우)을 만듭니다. 그런 다음이 파일에 쓰기 권한이 있습니다. 그것은 좋은 연습은 아니지만 내 문제를 해결.

관련 문제