2009-07-28 19 views
15

Tôi đang sử dụng thiết lập inno để tạo gói cài đặt cho ứng dụng của mình và ứng dụng của tôi được viết bởi C# + .Net 2.0 + VSTS 2008. Inno setup =>http://www.jrsoftware.org/isinfo.php và tôi cài đặt ứng dụng của tôi trong thư mục Program Files/Foo (Foo là tên ứng dụng của tôi). Ứng dụng của tôi đang nhắm mục tiêu đến Windows Vista.vấn đề quyền ghi tập tin trong thư mục "Program Files"

Vấn đề tôi tìm thấy là chương trình của tôi không thể ghi vào thư mục Program Files/Foo. Và tôi cần sự cho phép của ghi vào thư mục này để lưu một số tập tin cấu hình. Điều kỳ lạ tôi nhận thấy là thư mục Program Files/Foo được đánh dấu là chỉ đọc và tôi đã kiểm tra tất cả các thư mục trong Program Files được đánh dấu chỉ đọc, chẳng hạn như Office.

Câu hỏi của tôi là,

  1. Tại sao tất cả các thư mục được đánh dấu là read only dưới Program Files? Nó có nghĩa là chúng ta không nên ghi vào các thư mục ứng dụng riêng lẻ trong Program Files? Nếu không, chúng ta nên ghi thông tin vào đĩa như thông tin cấu hình được lựa chọn lần cuối của một ứng dụng riêng lẻ ở đâu?
  2. Nếu chúng tôi có thể ghi vào các thư mục ứng dụng riêng lẻ trong Program Files, giải pháp là gì? Tôi không muốn ứng dụng của tôi chạy với tư cách quản trị viên để giải quyết vấn đề này và nếu có giải pháp để ghi vào thư mục này, tôi muốn yêu cầu quyền tối thiểu nếu có thể.

Trả lời

14

Bạn nên ghi dữ liệu cấu hình cụ thể sử dụng vào thư mục Application Data cho người sử dụng hiện tại, bằng cách sử dụng special folders enumEnivronment.GetFolderPath.

+0

thư mục ứng dụng riêng lẻ trong Program Files không được đề xuất để viết? bất kỳ hướng dẫn nào được xuất bản? – George2

+1

Windows XP - Hướng dẫn dành cho Ứng dụng –

+0

Đó là đi bộ xung quanh. :-) Nếu cho Windows Vista, bất kỳ hướng dẫn hay phương pháp hay nhất nào được công bố mà chúng tôi nên lưu trữ dữ liệu vào AppData? – George2

6

Một giải pháp thông thường sẽ được cài đặt file cấu hình vào Application Data thư mục ví dụ như sau:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 
+0

thư mục ứng dụng riêng lẻ trong Tệp chương trình không được đề xuất để viết? bất kỳ hướng dẫn nào được xuất bản? – George2

12

Thực hành tốt nhất là không lưu trữ dữ liệu cấu hình trong thư mục Tệp chương trình. Thay vào đó, lưu trữ dữ liệu của ứng dụng của bạn trong% AppData% \ YourApplicationName. Tùy thuộc vào việc bạn muốn lưu trữ dữ liệu cấu hình của bạn cho mỗi người dùng hoặc trong một thư mục chung được chia sẻ, sử dụng một trong những enums sau để có được đường dẫn thư mục:

string userAppData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
string commonAppData = Envrionment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); 

Theo mặc định, Vista người dùng không chương trình chạy với tư cách là Quản trị viên và do đó các chương trình đó có chỉ đọc quyền truy cập vào các thư mục trong "Tệp Chương trình". Người dùng có thể thay đổi hành vi này bằng cách tắt UAC và bạn có thể yêu cầu người dùng của bạn thực hiện điều đó, nhưng trong cài đặt văn phòng, người dùng có thể không có tùy chọn đó. Đó là lý do tại sao bạn sử dụng AppData thay thế - các ứng dụng luôn có thể đọc ghi dữ liệu vào thư mục AppData.

Thông tin về UAC có thể được tìm thấy tại trang web của Microsoft. Mặc dù trang này khá dài, đây là điểm khởi đầu để hiểu UAC: http://msdn.microsoft.com/en-us/library/bb530410.aspx

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