views:

73

answers:

1

Hello, 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

+1  A: 

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.

Miky Dinescu
This is going to be deployed to multiple machines, can you set it to the CurrentUserAccount? I fear that even creating a new account to run in will not pick up the proxy settings for the current user.
mytwocents
In order to answer your question, you have to think about how services run under Windows. Basically, a service can and most likely starts and runs even when a user is not logged on to the machine. Its one of the advantages of using services vs. normal windows applications. As such, you can't really set the service to run as `current user` because that doesn't mean anything. See also my last paragraph in the response.
Miky Dinescu