Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get appdata\local folder path in C# windows service

I am try to get C:\Users\<username>\AppData\Local folder path using

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

in a C# Windows service, but it returns some other path

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

Does any have any idea how to do it correctly?

like image 295
AMIT SHELKE Avatar asked Jun 26 '12 05:06

AMIT SHELKE


People also ask

Where can I find AppData in CMD?

Run a command shell (start/Run, then "cmd") and type "set". This will list all the environmental variables available. Having said that, USERPROFILE is perfectly valid. There's also APPDATA and LOCALAPPDATA.


2 Answers

Are you running the service under a user account? If not, the service will use its own profile as you see. If this service is "logged into" by a user, then you could pass the folder to the service and bypass local checking. Otherwise, try running the service under a user account (or create an account for it).

like image 115
Wolf5370 Avatar answered Oct 31 '22 01:10

Wolf5370


The AppData folder for each user is stored in the registry.

Using this path:

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

Given a variable sid string containing the users sid, you can get their AppData path like this:

string path=Registry.GetValue(regKeyFolders.Replace("<SID>", sid), regValueAppData, null) as string;
like image 22
Derrick Avatar answered Oct 31 '22 03:10

Derrick