Reputation: 857
I wrote some code to detect a users proxy information. This works when I run the program directly, but it doesn't work if the program from being called by a service. The service isn't able to know the current users folder path to grab the users Firefox settings. The program needs to be run by a service... how can the service get the current userprofile to make this work?
Code sample:
public static string FIREFOX_PROXY_PATH = @"\APPLICATION DATA\MOZILLA\FIREFOX\";
public static string FIREFOX_PROXY_PROFILE_FILE_NAME = "PROFILES.INI";
string strProfPath = System.Environment.GetEnvironmentVariable("USERPROFILE") + FIREFOX_PROXY_PATH + FIREFOX_PROXY_PROFILE_FILE_NAME;
When run from a desktop I get this (works- file is found):
C:\\Users\\myusername\\APPLICATION DATA\\MOZILLA\\FIREFOX\\PROFILES.INI
When run from within a service I get this (fails- file not found):
C:\\Profiles\\NetworkService\\APPLICATION DATA\\MOZILLA\\FIREFOX\\PROFILES.INI
Note: myusername is replaced with my actual user name
Upvotes: 2
Views: 4100
Reputation: 55720
The code actually works the way it is supposed to work. In order to get your profile you need to modify the account under which the service runs as. To do this, go to the Services management snap-in in Control Panel and right-click on your service, click Properties and then change the account the service runs as to your own account (under the Log On tab).
Of course, after reading your question twice it seems that what you actually would like to do is obtain the path to the profile for the logged on user. If that's the case than what I describe above will not work. You will need to employ a different tactic to get the currently logged on user, then obtain the path to the users profile. All this is available in the Registry.
The WindowsIdentity class may help but you have to keep in mind that at any given time, on a Windows machine, there may be more than one user logged in. I say may
because on most user computers, there is usually only one active user session. But that doesn't mean that only one user's processes are running. So, depending on what exactly you are trying to accomplish, there may be other things you need to take into consideration.
Upvotes: 1