2011-07-06 47 views
5

Tôi có một ứng dụng bảng điều khiển đơn giản chạy hàng ngày (được gọi bằng trình lên lịch tác vụ của Windows) và phụ thuộc vào giá trị được tăng lên mỗi khi ứng dụng chạy. Để duy trì giá trị này, tôi đã chọn sử dụng tệp Settings.Settings.Làm cách nào để thay đổi giá trị của giá trị Cài đặt.settings

Vì vậy, tôi có một giá trị số nguyên được gọi là RunNumber với Phạm vi tài mà được tăng lên mỗi lần ứng dụng kết thúc hoạt động:

Properties.Settings.Default.RunNumber++; 
Properties.Settings.Default.Save(); 

Một phần lý do tôi đã chọn này là giá trị cũng được đặt vào ứng dụng. cấu hình file:

<setting name="RunNumber" serializeAs="String"> 
    <value>0</value> 
</setting> 

có nghĩa là nên RunNumber đã được tăng lên bất ngờ nó chỉ có thể được thay đổi trong app.config:

<setting name="RunNumber" serializeAs="String"> 
    <value>10</value> 
</setting> 

Mong đợi của tôi là lần sau khi ứng dụng của tôi đi đọc giá trị của RunNumber, nó sẽ lấy giá trị được đặt trong app.config (trong trường hợp này là 10). Điều này không xảy ra và thay vào đó trong lần chạy ứng dụng tiếp theo, nó sẽ sử dụng giá trị nó được sửa đổi lần cuối trong trường hợp này số chạy sẽ là 1 thay vì 10 mà tôi mong đợi.

Ứng dụng của tôi truy cập giá trị của RunNumber như thế này:

Properties.Settings.Default.RunNumber 

Làm thế nào tôi có thể thay đổi giá trị của RunNumber mà không cần phải sửa đổi các ứng dụng? Ý tưởng là nếu nó cần phải được thay đổi thành một giá trị bất ngờ tôi chỉ có thể sửa đổi giá trị trong app.config thay vì phải thay đổi một số mã và triển khai lại ứng dụng.

Trả lời

6

Giá trị được đặt trong app.configmặc định sử dụng khi một người dùng mới sử dụng ứng dụng của bạn và các thiết lập của mình cần phải được tạo ra. Sau khi chạy ứng dụng sau khi một user.config sẽ được tạo để lưu trữ cài đặt phạm vi người dùng.

Để bạn thay đổi giá trị theo cách thủ công, bạn cần thực hiện trong user.config tương ứng mà bạn sẽ tìm thấy ở đâu đó trong thư mục hồ sơ người dùng, bởi vì nếu bạn thay đổi app.config chỉ người dùng mới mới thấy thay đổi.

Trong Windows 7 mà không roaming profile và với một ứng dụng Windows Forms tên Example.Settings.CustomClass tôi nhận được thư mục sau đây cho user.config:

C:\Users\[user]\AppData\Local\Microsoft\Example.Settings.CustomCl_Url_3qoqzcgn1lbyw2zx3oz1o3rsw2anyjsn\1.0.0.0 
+0

Tuyệt vời. Cảm ơn câu trả lời rõ ràng. – Aesir

2

một giá trị số nguyên được gọi là RunNumber với Phạm vi tài

Phạm vi người dùng có nghĩa là các giá trị thực không được lưu trong App.config nhưng dưới thư mục Users\<user>\AppData\....

Nếu ứng dụng bảng điều khiển của bạn chạy dưới tài khoản Quản trị viên (hoặc không được đặt trong Tệp chương trình), bạn có thể sử dụng cài đặt Phạm vi ứng dụng.

0

Chỉ cần sử dụng Reload() trước khi truy cập vào lớp Settings của bạn. Bạn có thể sửa đổi lớp Settings được tạo để gọi Reload mỗi lần truy cập thuộc tính cụ thể.

1

Vì giá trị cho cài đặt phạm vi người dùng được lưu trữ trong tệp người dùng chứ không phải trong app.config, có thể cách tốt nhất là thêm khả năng gọi cho ứng dụng của bạn bằng một chuyển đổi cụ thể để đặt lại giá trị bạn muốn. ví dụ. myapp.exe /setcount=123.

Tất nhiên, bạn sẽ phải chạy ứng dụng với tư cách người dùng thích hợp để đảm bảo bạn đặt giá trị trong tệp chính xác.

+0

Tôi không nghĩ rằng bạn có thể làm điều đó với bộ lập lịch nhiệm vụ của windows. –

+0

Nó chỉ là một ứng dụng giao diện điều khiển thông thường được gọi bởi bộ lập lịch tác vụ, nếu tôi hiểu đúng. Trong trường hợp đó, bạn có thể gọi ứng dụng theo cách thủ công. OP cho rằng đây là một quy trình thủ công để chỉnh sửa tệp đôi khi - cách tiếp cận này cũng sẽ hạn chế khả năng xảy ra lỗi. – ZombieSheep

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