我写了一些代码来检测用户代理信息。这在我直接运行程序时有效,但如果程序被服务调用则不起作用。该服务无法知道当前用户文件夹路径以获取用户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将替换为我的实际用户名
答案 0 :(得分:1)
代码实际上以它应该工作的方式工作。要获取您的配置文件,您需要修改运行该服务的帐户。为此,请转到“控制面板”中的“服务管理”管理单元,右键单击您的服务,单击“属性”,然后将服务运行的帐户更改为您自己的帐户(在登录下)标签)。
当然,在阅读了两次问题之后,您实际想要做的就是获取登录用户的配置文件路径。如果是这种情况比我上面描述的情况不起作用。您需要采用不同的策略来获取当前登录的用户,然后获取用户配置文件的路径。所有这些都可以在注册表中找到。
WindowsIdentity类可能有所帮助,但您必须记住,在任何给定时间,在Windows计算机上,可能不止一个用户登录。我说{ {1}}因为在大多数用户计算机上,通常只有一个活动用户会话。但这并不意味着只有一个用户的进程正在运行。因此,根据您要完成的具体内容,可能还需要考虑其他事项。