2009-09-23 22 views
5

Tôi đang viết một dịch vụ Windows cần duy trì một số dữ liệu khi khởi động lại/khởi động lại dịch vụ. Hiện tại tôi đang viết các tệp trong một thư mục được trả về bởi Application.UserAppDataPath, nhưng điều đó dường như không mang lại cho tôi câu trả lời nhất quán. Làm cách nào để xác định đúng nơi để ghi dữ liệu?Ở đâu trên hệ thống tập tin nên một dịch vụ Windows lưu giữ dữ liệu của nó?

+0

Mỗi dịch vụ được chạy với quyền của một số người dùng. Không nên lưu trữ dữ liệu trong applicationData của người dùng (tôi đoán bạn gọi nó là Application.UserAppDataPath)? Vấn đề với vị trí này là gì? –

+0

Dịch vụ đang chạy dưới dạng LocalSystem. Tuy nhiên, tài khoản LocalSystem không có thư mục riêng trong "Documents and Settings"; trong các thử nghiệm của tôi, nó sử dụng thư mục LocalService nhưng, chúng tôi nhận được các báo cáo rằng dịch vụ đôi khi lưu trữ dữ liệu ở một nơi và sau đó tìm kiếm dữ liệu trong một vị trí khác. Trong registry có vẻ như đường dẫn AppData của LocalSystem là% USERPROFILE% \ Application Data để có vẻ như% USERPROFILE% không cho chúng ta một câu trả lời nhất quán. –

Trả lời

4

Điều đó tùy thuộc vào việc dịch vụ của bạn có đang chạy với tài khoản hệ thống hay với tài khoản người dùng cụ thể.

  • Tài khoản tài khoản. Lưu trữ các tệp trong thư mục CommonApplicationData:

    đường dẫn chuỗiForSystem = Environment.GetFolderPath (Environment.SpecialFolder.CommonApplicationData);

  • Tài khoản người dùng. Lưu trữ các tệp trong thư mục ApplicationData:

    đường dẫn chuỗiForUser = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData);

4

Nếu bạn muốn nó nhất quán (tức là người dùng bất khả tri) hãy thử Application.CommonAppDataPath.

+0

Tôi đồng ý. Nếu dịch vụ đang chạy dưới dạng LocalSystem thì có nghĩa là lưu trữ dữ liệu trong đường dẫn dữ liệu độc lập với người dùng. –

+1

Application.CommonAppDataPath được bao gồm trong System.Windows.Forms.dll. Tôi có thực sự cần tham khảo Winforms từ Windows Service không? – qub1n

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