2012-06-26 22 views
16

Bir C# Windows hizmeti içindeC# windows hizmetinde AppData Local klasör yolunu alın

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) 

kullanılarak C:\Users\<username>\AppData\Local klasör yolunu almak için denemek am ama

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

herhangi mu başka yolunu döndürür Doğru bir şekilde nasıl yapılacağı hakkında bir fikriniz var mı?

+0

oluşur? – Rozuur

+9

Hizmetiniz "Yerel Sistem" hesabının altında çalıştığı için normaldir. –

+4

-1 Birisi set (yorumsuz) - benim için makul bir soru gibi görünüyor ve birçok tuzağa düşebilir. – Wolf5370

cevap

7

Bu hizmeti bir kullanıcı hesabı altında mı çalıştırıyorsunuz? Aksi takdirde, hizmet gördüğünüz gibi kendi profilini kullanır. Bu hizmet bir kullanıcı tarafından "oturum açmışsa", klasöre hizmete geçebilir ve yerel denetimi atlayabilirsiniz. Aksi takdirde, servisi bir kullanıcı hesabı altında çalıştırmayı deneyin (veya bunun için bir hesap oluşturun).

+0

Soruyu değiştirmeme izin verin, "C: \ Users \ username \ AppData \ Local" yolunu almak istiyorum, bunun için ne "ServiceAccount" kullanmalıyım? veya C# windows hizmetinde bu yolu nasıl alacağım. –

+0

"Kullanıcı adı" derken gerçek bir kullanıcının klasörünü mi kastediyorsunuz yoksa sadece sizin için bir klasör mü istiyorsunuz? Coon'un sözlerinde söylediği gibi, aktif bir kullanıcının aktif bir şekilde oturum açıp o bilgiyi geçmesini istemiyorsanız, o zaman bu bir güvenlik riskidir ve bu nedenle bir sorun olacaktır. Coon ve ben söylediklerimizin her ikisinde de doğruyuz, ama farklı soruları yanıtlıyoruz, bu yüzden hizmetinizin nasıl kullanıldığını ve hangi erişimin istediğini belirtmeniz gerekiyor. O zaman belki daha fazla olabiliriz. – Wolf5370

+0

kullanıcı adı, geçerli kullanıcı giriş yaptı. –

3

Her kullanıcı için AppData klasörü kayıt defterinde saklanır.

bu yolu kullanarak: Kullanıcıların Sid içeren değişken bir sid dize göz önüne alındığında

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

, bu gibi onların AppData yol alabilirsiniz: Eğer uygulamanın dağıtımını yaparken

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