2013-03-23 35 views
6

Tôi có một chương trình mà tôi sẽ triển khai bằng cách sử dụng gói để triển khai được tích hợp vào VS.Cho phép người dùng chỉnh sửa tệp cấu hình sau khi triển khai

Bây giờ tôi có tệp app.config mà tôi muốn người dùng có thể sửa đổi (ngay cả sau khi chạy chương trình), nhưng tôi không biết chính xác trình cài đặt kết xuất tệp và tôi không mong đợi người dùng root trên hệ thống tập tin của họ.

Điều tôi đang nghĩ là - tôi yêu cầu người dùng chỉ định một số thư mục (cần phải xảy ra kể từ khi trò chơi) - tôi kiểm tra tệp cấu hình ở đó và nếu không có, tôi sao chép từ thư mục gốc thư mục chương trình có thể xem - sau đó đọc chương trình trong thư mục 'lưu'.

Điều đó nói rằng, âm thanh của nó giống như một giải pháp rất xấu xí và hacky - có giải pháp nào tốt hơn không?

Trả lời

8

Tôi sẽ không khuyến khích người dùng sửa đổi app.config. App.config được sao chép vào cùng thư mục với ứng dụng của bạn và thường chứa các cài đặt mà ứng dụng của bạn phụ thuộc vào để chạy chính xác, ví dụ: Chuỗi kết nối DB, mặc định hệ thống, v.v. Bạn đang chơi trò chơi nguy hiểm bằng cách cho phép người dùng thay đổi cài đặt trong đó trực tiếp.

Cách tiếp cận an toàn hơn là xuất tệp XML khác vào thư mục tài liệu người dùng nơi họ có thể ghi đè cài đặt ứng dụng. Để ứng dụng của bạn tải trong app.config trước, sau đó ghi đè các giá trị đó bằng bất kỳ cài đặt nào được tìm thấy trong tệp cấu hình của người dùng.

Tôi cũng khuyên bạn nên triển khai một số loại giao diện người dùng cho điều này, ngay cả khi nó thực sự cơ bản. Người dùng trung bình của bạn sẽ không thoải mái khi chỉnh sửa XML trực tiếp, quá nhiều biên độ cho lỗi.

+0

Đồng ý - cho phép người dùng chỉnh sửa ứng dụng.config trực tiếp yêu cầu sự cố vì bạn khó xử lý bất kỳ ngoại lệ nào có thể xảy ra. Nếu bạn cuộn lớp serlializable của riêng bạn và quản lý lưu trữ của chính mình, nó dễ dàng hơn để xử lý các ngoại lệ. –

+0

Thú vị, không xem xét điều đó. Tôi nghĩ rằng tôi sẽ cuộn định dạng của riêng mình vì tôi không quá nhiều người hâm mộ XML sửa đổi tay, và tôi không chắc có bao nhiêu tham số tôi cần (có thể là tấn) – Haedrian

+0

Không có gì chống lại việc lăn của bạn định dạng riêng, tuy nhiên, chỉ cần lưu ý rằng bạn cũng sẽ cần phải cuộn serializer của riêng bạn. Ở đâu như .NET có hỗ trợ XML tuyệt vời, trong đó sẽ làm một cái gì đó như thế này tầm thường. – James

1

Bạn có thể sử dụng cài đặt ứng dụng (hoặc người dùng) để duy trì bất kỳ thay đổi nào mà người dùng có thể muốn thực hiện trong cấu hình. Xem lớp ApplicationSettingsBasethis article. Giả sử ứng dụng của bạn có chứa một thiết lập người dùng gọi Score, quản lý nội bộ của một lớp được gọi là MyUserSettings:

public class MyUserSettings : ApplicationSettingsBase 
{ 
    [UserScopedSetting()] 
    [DefaultSettingValue(0)] 
    public int Rank 
    { 
     get 
     { 
      return (int)this["Score"]; 
     } 
     set 
     { 
      this["Score"] = value; 
     } 
    } 
} 

Bạn có thể lưu các giá trị hiện tại, thường là khi các hình thức chính là đóng cửa, sử dụng Save phương pháp:

myUserSettings.Save(); 

Nếu bạn muốn người dùng sửa đổi một số cài đặt trực tiếp, bạn có thể sử dụng lưới thuộc tính hoặc biểu mẫu của riêng bạn liên kết với cá thể của lớp MyUserSettings. Nếu cài đặt được đánh dấu là "Người dùng", thì các giá trị sẽ được lưu trữ trong tệp user.config, trong %InstallRoot%\Documents and Settings\username\Local Settings hoặc %InstallRoot%\Documents and Settings\username\Application Data (đối với cấu hình chuyển vùng).

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