C# 从本地系统帐户下运行的windows服务获取当前用户目录
我有一个在“本地系统”下运行的windows服务。在“OnStart”方法中,我使用C# 从本地系统帐户下运行的windows服务获取当前用户目录,c#,windows-services,C#,Windows Services,我有一个在“本地系统”下运行的windows服务。在“OnStart”方法中,我使用 eventLog.WriteEntry($"Path: {Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), @"Pictures")}") 它记录为“路径:C:\WINDOWS\system32\config\systemprofile\Pictures” 但与我使用Console.WriteLine在
eventLog.WriteEntry($"Path: {Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), @"Pictures")}")
它记录为“路径:C:\WINDOWS\system32\config\systemprofile\Pictures”
但与我使用Console.WriteLine在控制台应用程序中尝试的相同,它记录了“路径:C:\Users\john\Pictures”
在windows服务中,我需要在从控制台应用程序获取时访问当前用户目录
请在这方面帮助我。该服务的当前用户是本地系统。它不是在用户帐户“john”下运行,而是在特殊系统帐户“Local system”下运行。如果希望windows服务以用户“john”的身份运行,则可以在安装服务时指定,或在windows中的“services”实用程序中对其进行更改。我认为windows服务不必与用户配置文件交互。你想达到什么目标?是否要处理当前记录的用户图片?然后,您可以尝试获取登录的用户配置文件。请注意,可以登录多个用户基本上我正在构建一个windows服务,该服务将从图片库“C:\Users\john\pictures”下的特定文件夹(如“test”)将图像/图片上载到azure blob存储。我使用FileSystemWatcher接收新文件的通知并开始上传。我假设系统中只有一个用户。假设您需要,但Windows是多用户和多会话的(例如RDP会话、快速用户切换、runas登录、计划任务、跨肩UAC),那么您如何确定在这里使用哪个用户的配置文件?这是否为通过命名管道发送的请求提供服务?在这种情况下,您可以使当前线程模拟请求客户端;查找.NET等效的
ImpersonateNamedPipeClient
。可以使用获取当前用户会话和本地用户配置文件路径。然而,只有在有用户登录的情况下,服务才会工作,并且不做任何其他操作。windows服务的理念是即使没有用户登录也能工作。你可以换成