2009-10-10 29 views
5

Tôi cần lưu cài đặt sau đó có sẵn cho tất cả người dùng của ứng dụng trên máy đã cho. Nó cần phải hoạt động trên Vista/Win 7 và ứng dụng sẽ không được bắt đầu với tư cách quản trị viên.Cách lưu cài đặt cho Tất cả người dùng trong Vista

  • Không thể Lưu vào thư mục chương trình như thư mục Program Files được bảo vệ trên Vista
  • Không thể lưu vào HKEY_LOCAL_MACHINE như đó là bảo vệ quá
  • Không thể lưu vào máy chủ hoặc web- dịch vụ

Tôi có thể lưu dữ liệu vào đâu? Ngay cả khi các quyền ứng dụng đã được nâng lên trong quá trình thực thi, thì sự lo lắng của tôi là registry đã được ảo hóa trong Vista - và vì vậy tôi sẽ kết thúc với một HKEY_LOCAL_MACHINE đặc biệt chỉ dành cho người dùng hiện tại.

Tôi đang sử dụng .NET

Trả lời

9

Common Application Data

System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) 

Đây là một con đường hệ thống tập tin mà bạn có thể sử dụng để lưu dữ liệu trên nhiều người sử dụng và nhiều phiên bản của hệ điều hành. Đường dẫn có thể khác nhau tùy thuộc vào phiên bản nhưng vì bạn đang sử dụng các biến môi trường, dòng trên sẽ giải quyết cho một đường dẫn có thể sử dụng được.

Edit:
Muốn thêm này như là một lưu ý vì nó đã được chỉ ngụ ý; nó không yêu cầu quyền cao để ghi vào thư mục này, nó có nghĩa là cho chính xác mục đích này.

+0

Awsome! Chính xác những gì tôi đang tìm kiếm. Cảm ơn! –

8

Khi Quintin trả lời đúng, đường dẫn% ALLUSERSPROFILE% (Environment.SpecialFolder.CommonApplicationData in .NET) là những gì bạn đang tìm kiếm.

Hai điều quan trọng cần lưu ý, tuy nhiên, khi làm như vậy:

  • Đó là thực hành tốt để tạo ra một thư mục con cho công ty và ứng dụng của bạn sử dụng trình cài đặt ứng dụng của bạn. Ví dụ:

    Dim DataPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) 
    DataPath = IO.Path.Combine(DataPath, "ACME Corp.") 
    DataPath = IO.Path.Combine(DataPath, "Widget App") 
    DataPath = IO.Path.Combine(DataPath, "1.0") '//Optional, but possibly handy to easily migrate configuration files across major app versions 
    
  • Mặc dù tất cả người dùng sẽ đọc truy cập vào các thư mục mà bạn tạo ra, viết truy cập là theo mặc định giới hạn ở những tài khoản đã tạo ra thư mục, cũng như các thành viên của nhóm quản trị và LocalSystem. Nếu tất cả người dùng có thể sửa đổi tệp cấu hình chung (được tạo bởi một người dùng nhưng được viết lại bởi người dùng không phải quản trị viên khác), bạn sẽ cần phải sắp xếp quyền truy cập này một cách rõ ràng. Một lần nữa, điều này được thực hiện tốt nhất từ ​​cài đặt ứng dụng của bạn, nhưng có thể được thực hiện từ mã là tốt, ví dụ như khi ứng dụng của bạn chạy đầu tiên:

    Dim di As New IO.DirectoryInfo(DataPath) 
    Dim ds = di.GetAccessControl 
    ds.AddAccessRule(New Security.AccessControl.FileSystemAccessRule(...)) 
    di.SetAccessControl(ds) 
    
+0

Cảm ơn, điều này chắc chắn sẽ khiến tôi hiểu! –

-1

Đây là một cách giải quyết khác cho phép bạn kéo dài cài đặt cho tất cả người dùng:

  1. Đặt tệp cài đặt trong tệp chương trình để ứng dụng của bạn đọc.
  2. Để sửa đổi tệp cài đặt này, hãy tạo ứng dụng mới được thiết kế để ghi vào tệp cài đặt.
  3. Launch cài đặt này sửa đổi ứng dụng từ ứng dụng chính của bạn với động từ thiết lập để 'chạy như'

    Process p = new Process(); 
    p.StartInfo = new ProcessStartInfo("changeXMLSettings.exe"); 
    p.StartInfo.Verb = "runas"; 
    p.Start(); 
    

này sẽ nhắc nhở cho độ cao và cung cấp cho các thiết lập thay đổi sự cho phép ứng dụng ghi vào các file chương trình danh mục.

+0

Xem xét chúng tôi đã có một giải pháp hoàn toàn tốt (và chính xác hơn) cho điều này đã được đăng khoảng 4 năm trước, tại sao bạn lại muốn sử dụng cách giải quyết này? –

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