c# - LocalService 的 'Access is denied' 的解决方法

标签 c# .net windows security windows-services

我有一个 Windows 服务,它代表使用单独的前端 UI 配置服务的登录用户执行一些与网络相关的操作。 UI 和 Windows 服务使用套接字接口(interface)进行通信,即 UI 向服务发送命令,服务向 UI 发送数据进行处理/显示。这种设置已经为我们工作了多年。

最近,安全策略要求我们的 Windows 服务不能再作为 LocalSystem 运行。 ,但必须以 LocalService 的身份运行.在大多数情况下,这是一个平淡无奇的变化。然而...

Windows 服务功能的一部分是在用户指定的位置创建一个日志文件并将数据写入该日志文件,直到用户告诉它停止。如果用户在 C:\级别指定目录(例如 C:\MyLogs ),则 Windows 服务可以正常工作。但是如果用户在她的 MyDocuments 文件夹中指定了一个目录(例如 C:\Users\<username>\Documents\MyLogs ),Windows 服务将失败并返回 System.UnauthorizedAccessException这么说

Access to <location> is denied.



我花了一段时间,但我终于明白,作为 LocalService 运行的 Windows 服务无权访问登录用户的配置文件文件夹,例如 MyDocuments、AppData 等。

有解决方法吗?

我想到了一些选项,但由于我在 Windows 安全方面并不精通,我的 Google 忍者技能非常弱,因为我不确定要搜索什么。这是我的几个具体问题。我将不胜感激社区可以提供的任何指导。
  • Windows 服务有没有办法模拟登录的用户帐户,以便它可以创建目录和文件,就好像用户直接执行它一样?
  • 是否可以向用户的配置文件文件夹添加权限,以便 LocalService 帐户可以在那里创建目录和文件?
  • 最佳答案

    是的,您可以向文件夹添加权限。右键单击文件夹|属性 |安全 |编辑 |添加...

    在“输入对象名称”文本框中输入“本地服务”,单击“检查名称”和“确定”并修改 LOCAL SERVICE 帐户中的权限/

    enter image description here

    关于c# - LocalService 的 'Access is denied' 的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45641880/

    相关文章:

    c# - 将集合 (HashSet) 隐式转换为 IEnumerable<T>

    c++ - "Is there a better way?"Windows Vista 上的 wininet 错误 12029

    c# - 根据其他列中的值更改 DataGridTextColumn 单元格上的字符串格式,并保持值可排序

    c# - 当前上下文中不存在该变量

    .net - 如何在 Visual Studio Team Services 中发布和访问 nuget 包

    python - 使用 py2exe 构建控制台可执行文件,收到 suds 导入错误

    c++ - MFC CDialog::Create 在 x64 上挂起

    c# - 如何从结果中读取每个 xml 节点

    c# - 提交表单导致 URL 中出现未知代码

    c# - UWP SQLite-PCL 获取查询运行速度非常慢