2012-06-26 5 views
16

mam postarać się C:\Users\<username>\AppData\Local folder ścieżki używającGet AppData Local ścieżkę folderu w C service # okien

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) 

w usłudze C# Windows, ale zwraca jakąś inną ścieżkę

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

nie każdy masz pojęcie, jak zrobić to poprawnie?

+0

to nastąpić podczas wdrażania aplikacji? – Rozuur

+9

To normalne, ponieważ twoja usługa działa na koncie 'Local System'. –

+4

Odebranie -1 komuś ustawionemu (bez komentarza) - wydaje mi się rozsądnym pytaniem i pułapką, w którą może wpaść wiele osób. – Wolf5370

Odpowiedz

7

Czy prowadzisz usługę pod kontem użytkownika? Jeśli nie, usługa skorzysta z własnego profilu, jak widzisz. Jeśli ta usługa jest "zalogowana" przez użytkownika, możesz przekazać folder do usługi i pominąć sprawdzanie lokalne. W przeciwnym razie spróbuj uruchomić usługę pod kontem użytkownika (lub utwórz dla niego konto).

+0

Pozwól mi zmienić pytanie, chcę uzyskać tę ścieżkę "C: \ Users \ nazwa_użytkownika \ AppData \ Local", więc co "ServiceAccount" powinienem użyć do tego? lub w jaki sposób uzyskać tę ścieżkę w usługach windowsowych C#. –

+0

Kiedy mówisz "nazwa użytkownika", masz na myśli prawdziwy folder użytkownika, czy po prostu chcesz mieć folder dla twojej aplikacji? Jak powiedział Coon w swoich komentarzach, jeśli chcesz konkretnego użytkownika bez aktywnego zalogowania się i przekazania tych informacji, to jest to zagrożenie bezpieczeństwa i jako taki będzie problem. Coon i ja są poprawne w tym, co mówimy, ale odpowiadamy na różne pytania, więc musisz określić, w jaki sposób twoja usługa jest używana i jaki dostęp chce. W takim razie możemy dalej posuwać się dalej. – Wolf5370

+0

nazwa użytkownika jest bieżącym użytkownikiem zalogowany. –

3

Folder AppData dla każdego użytkownika jest przechowywany w rejestrze.

Stosując tę ​​ścieżkę:

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

Biorąc pod uwagę zmienną zawierające ciąg sid SID użytkowników, można uzyskać ich ścieżka AppData tak:

string path=Registry.GetValue(regKeyFolders.Replace("<SID>", sid), regValueAppData, null) as string;