从服务中获取当前的UserProfile路径

时间:2009-12-17 01:41:41

标签: c# .net windows-services

我写了一些代码来检测用户代理信息。这在我直接运行程序时有效,但如果程序被服务调用则不起作用。该服务无法知道当前用户文件夹路径以获取用户Firefox设置。该程序需要由服务运行...服务如何获得当前的用户配置文件才能使其工作?

代码示例:

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;

从桌面运行时,我得到了这个(找到工作文件):
C:\\Users\\myusername\\APPLICATION DATA\\MOZILLA\\FIREFOX\\PROFILES.INI

当从服务中运行时,我得到了这个(找不到文件):
C:\\Profiles\\NetworkService\\APPLICATION DATA\\MOZILLA\\FIREFOX\\PROFILES.INI

注意:myusername将替换为我的实际用户名

1 个答案:

答案 0 :(得分:1)

代码实际上以它应该工作的方式工作。要获取您的配置文件,您需要修改运行该服务的帐户。为此,请转到“控制面板”中的“服务管理”管理单元,右键单击您的服务,单击“属性”,然后将服务运行的帐户更改为您自己的帐户(在登录下)标签)。

当然,在阅读了两次问题之后,您实际想要做的就是获取登录用户的配置文件路径。如果是这种情况比我上面描述的情况不起作用。您需要采用不同的策略来获取当前登录的用户,然后获取用户配置文件的路径。所有这些都可以在注册表中找到。

WindowsIdentity类可能有所帮助,但您必须记住,在任何给定时间,在Windows计算机上,可能不止一个用户登录。我说{ {1}}因为在大多数用户计算机上,通常只有一个活动用户会话。但这并不意味着只有一个用户的进程正在运行。因此,根据您要完成的具体内容,可能还需要考虑其他事项。