2012-06-26 30 views
16

Tôi đang cố gắng để có được con đường C:\Users\<username>\AppData\Local thư mục sử dụngNhận appdata đường dẫn thư mục địa phương trong C# cửa sổ dịch vụ

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) 

trong một dịch vụ C# Windows, nhưng nó sẽ trả về một số con đường khác

C:\Windows\ServiceProfiles\LocalService\AppData\Local 

Liệu bất kỳ có bất kỳ ý tưởng làm thế nào để làm điều đó một cách chính xác?

+0

nào nó xảy ra khi bạn triển khai ứng dụng của bạn? – Rozuur

+9

Đó là điều bình thường, vì dịch vụ của bạn chạy dưới tài khoản 'Hệ thống cục bộ'. –

+4

Mất đi -1 ai đó đặt (không bình luận) - có vẻ như một câu hỏi hợp lý với tôi và một cái bẫy có thể rơi vào. – Wolf5370

Trả lời

7

Bạn có đang chạy dịch vụ trong tài khoản người dùng không? Nếu không, dịch vụ sẽ sử dụng hồ sơ của chính nó như bạn thấy. Nếu dịch vụ này được "đăng nhập" bởi người dùng, thì bạn có thể chuyển thư mục đó tới dịch vụ và bỏ qua việc kiểm tra cục bộ. Nếu không, hãy thử chạy dịch vụ theo tài khoản người dùng (hoặc tạo một tài khoản cho nó).

+0

Hãy để tôi thay đổi câu hỏi, tôi muốn có được đường dẫn này "C: \ Users \ username \ AppData \ Local", vì vậy những gì "ServiceAccount" tôi nên sử dụng cho điều này? hoặc làm thế nào tôi sẽ nhận được con đường này trong dịch vụ C# windows. –

+0

Khi bạn nói "tên người dùng" bạn có nghĩa là một thư mục của người dùng thực sự hay bạn chỉ muốn một thư mục cho ứng dụng của bạn? Như Coon nói trong bình luận của mình, nếu bạn muốn một người dùng cụ thể mà không cần họ chủ động đăng nhập và truyền thông tin đó, thì đó là một nguy cơ bảo mật và như vậy sẽ là một vấn đề. Các Coon và tôi đều chính xác trong những gì chúng tôi nói, nhưng chúng tôi đang trả lời các câu hỏi khác nhau, vì vậy bạn cần phải xác định cách dịch vụ của bạn đang được sử dụng và những gì truy cập nó muốn. Sau đó, có lẽ chúng ta có thể tiếp tục nhiễm bệnh gan. – Wolf5370

+0

tên người dùng là người dùng hiện tại đã đăng nhập. –

3

Thư mục AppData cho mỗi người dùng được lưu trữ trong sổ đăng ký.

Sử dụng con đường này:

const string regKeyFolders = @"HKEY_USERS\<SID>\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"; 
const string regValueAppData = @"AppData"; 

Cho một xâu sid biến có chứa những người sử dụng sid, bạn có thể nhận con đường AppData của họ như thế này:

string path=Registry.GetValue(regKeyFolders.Replace("<SID>", sid), regValueAppData, null) as string; 
Các vấn đề liên quan