2008-09-22 41 views
31

Tôi đang cố gắng xây dựng trình cài đặt Windows bằng cách sử dụng Hệ thống Cài đặt Nullsoft yêu cầu cài đặt bởi Quản trị viên. Trình cài đặt tạo một thư mục "nhật ký". Vì người dùng thường xuyên có thể chạy ứng dụng này nên thư mục đó cần phải được người dùng thông thường ghi. Làm cách nào để chỉ định rằng tất cả người dùng phải có quyền để có quyền ghi vào thư mục đó bằng ngôn ngữ kịch bản NSIS?Làm thế nào để bạn thiết lập quyền truy cập thư mục trong NSIS?

Tôi thừa nhận rằng điều này nghe giống như một ý tưởng tồi, nhưng ứng dụng chỉ là một ứng dụng nội bộ được sử dụng bởi chỉ một vài người trên mạng riêng. Tôi chỉ cần các tệp nhật ký được lưu để tôi có thể thấy lý do ứng dụng bị hỏng nếu xảy ra sự cố. Người dùng không thể được quản trị viên.

Trả lời

33

Sử dụng plugin AccessControl và sau đó thêm plugin này vào tập lệnh, trong đó thư mục "nhật ký" nằm trong thư mục cài đặt.

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

Cấp quyền truy cập đầy đủ vào thư mục cho tất cả người dùng.

3

Một cách: gọi vỏ và sử dụng cacls hoặc xcacls.

+2

+1 .. không ai hiểu điều này và do đó không upvotes sadly .. – nawfal

2

Tại sao không tạo thư mục nhật ký trong thư mục% APPDATA% của người dùng? Bạn có thực sự cần phải đặt tất cả các bản ghi trong thư mục cài đặt không? Tại sao?

+0

Tôi muốn những người dùng khác có thể xem nhật ký. Nếu chúng nằm trong thư mục người dùng APPDATA, thì nếu người dùng 1 chạy ứng dụng, chỉ người dùng 1 hoặc quản trị viên mới có thể xem tệp nhật ký. –

9

Thay vì thay đổi quyền trên các thư mục trong Tệp chương trình, tại sao không đặt nhật ký ở vị trí có thể ghi bởi tất cả người dùng.

Xem phần 4.9.7.7 SetShellVarContext trong tài liệu NSIS của bạn. Bạn có thể sử dụng nó với $ APPDATA để lấy thư mục dữ liệu ứng dụng có thể ghi cho tất cả người dùng.

+1

Hãy xem câu trả lời này để biết cách thực hiện điều này trong log4net: http://stackoverflow.com/questions/468989/how-to-specify-common-application-data-folder-for-log4net/1889591#1889591 –

13

AccessControl::GrantOnFile "<folder>" "(BU)" "FullAccess" không hoạt động đối với tôi trên máy Windows Server 2008. Thay vào đó tôi phải dùng cái này:

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

S-1-5-32-545 là equivalente để "Người dùng" theo http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q243330

6

Đây là một vấn đề cũ bây giờ nhưng theo đề nghị của Sören APPDATA thư mục là một cách tốt đẹp để làm những gì bạn muốn, điều này là: Không dùng APPDATA personnal của người dùng nhưng dir "Tất cả người dùng" APPDATA! Bằng cách này, mọi người sẽ có thể truy cập tệp nhật ký ;-)

Ngoài ra, tôi đọc ở đâu đó sử dụng (BU) trên GrantOnFile không hoạt động tốt với một số hệ thống (Win 7 x64 nếu tôi nhớ rõ) bạn nên sử dụng SID "(S-1-5-32-545)" thay vào đó (đó là SID của tất cả người dùng, giá trị này là một hằng số trên mỗi HĐH Windows)

Các vấn đề liên quan