【问题标题】:Get appdata\local folder path in C# windows service在 C# windows 服务中获取 appdata\local 文件夹路径
【发布时间】:2012-06-26 05:38:24
【问题描述】:

我正在尝试使用 C:\Users\<username>\AppData\Local 文件夹路径

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

在 C# Windows 服务中,但它返回一些其他路径

C:\Windows\ServiceProfiles\LocalService\AppData\Local

有没有人知道如何正确地做到这一点?

【问题讨论】:

  • 部署应用时会出现这种情况吗?
  • 这很正常,因为您的服务在Local System帐户下运行。
  • 拿走了某人设置的-1(没有评论)-对我来说似乎是一个合理的问题,而且许多人可能会陷入陷阱。
  • @Wolf5370:是我。我也准备举报它,但我注意到了你的评论。我认为用户只想要一个特定的用户个人资料文件夹,而不是 any 个人资料文件夹。在我看来,这里发生的事情是正常行为,要求被夸大了。

标签: c# windows-services


【解决方案1】:

您是否在用户帐户下运行该服务?如果没有,该服务将使用自己的配置文件,如您所见。如果用户“登录”了该服务,那么您可以将文件夹传递给该服务并绕过本地检查。否则,请尝试在用户帐户下运行服务(或为其创建帐户)。

【讨论】:

  • 让我换个问题,我想得到这个路径“C:\Users\username\AppData\Local”,那么我应该使用什么“ServiceAccount”呢?或者我将如何在 C# windows 服务中获取此路径。
  • 当您说“用户名”时,您是指真实用户的文件夹,还是您只想为您的应用程序创建一个文件夹?正如 Coon 在他的 cmets 中所说,如果您希望特定用户没有主动登录并传递该信息,那么这是一个安全风险,因此将是一个问题。 The Coon 和我的说法都是正确的,但我们回答的问题不同,因此您需要指定您的服务是如何使用的以及它想要什么样的访问权限。那么也许我们可以更进一步。
  • 用户名是当前登录的用户。
【解决方案2】:

每个用户的 AppData 文件夹存储在注册表中。

使用此路径:

const string regKeyFolders = @"HKEY_USERS\<SID>\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders";
const string regValueAppData = @"AppData";

给定一个包含用户 sid 的变量 sid 字符串,您可以像这样获取他们的 AppData 路径:

string path=Registry.GetValue(regKeyFolders.Replace("<SID>", sid), regValueAppData, null) as string;

【讨论】:

  • 请注意,这个注册表项似乎没有为内置用户设置,例如LocalSystem
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
相关资源
最近更新 更多