【问题标题】:Windows Service getting access denied exception while writing to Network DriveWindows 服务在写入网络驱动器时获得拒绝访问异常
【发布时间】:2017-02-01 12:53:07
【问题描述】:

我有一个交互式 Windows 服务,它在本地系统帐户上运行,并且选中了与桌面交互复选框(这对于我的项目是强制性的,因为我的服务需要使用 UI 调用 .exe)。我在写入网络驱动器时遇到访问被拒绝的异常。我正在从配置文件传递 UNC 路径。我尝试在我想要访问的文件夹上为匿名用户提供完全控制访问权限,但它仍然无法正常工作。我无法在网络服务帐户或其他一些帖子中建议的任何其他帐户下运行我的 Windows 服务,因为我希望它与桌面交互复选框被选中。有什么办法可以做到吗?

编辑:网络驱动器的UNC路径://server/ABC/pqr

我的服务应该在 pqr 文件夹中创建 .txt 文件。也应该有权删除它。

我已尝试为 pqr 文件夹创建匿名用户并对其进行完全控制,但我仍然遇到拒绝访问异常。正如我之前提到的,我无法在本地系统帐户以外的任何其他帐户下运行它,因为它会自动禁用该服务属性中的与桌面交互选项。有没有办法让它在网络服务帐户下运行并仍然保持交互(与服务属性中选中的桌面选项交互)?

【问题讨论】:

  • 访问实际上是通过“匿名”用户完成的吗?我猜不是。您可以打开“全部”的目标 - 但管理员对此并不满意:) 您能否在(目标计算机的)Windows 事件日志中看到哪些用户被拒绝访问?
  • 我知道您说您必须具有“与桌面交互”功能,但正是这一方面阻碍了您使用标准解决方案并且有标准的解决方法 (将代码分为服务代码和UI代码,在用户登录时运行后者,并使用RPC让两组代码进行通信)。

标签: c# .net-4.5


【解决方案1】:

尝试使用以下名为 SimpleImpersonation 的块包

这样您就可以像这样包装用于访问远程文件位置的代码:

    using (Impersonation.LogonUser(domain, username, password, logonType))
{
    // do whatever you want as this user.
}

它对我有用。我用它来远程打开和关闭 Windows 服务。像这样:

 await Task.Factory.StartNew(() =>
            {
                using (
                    Impersonation.LogonUser(serviceInfo.Domain, serviceInfo.User, serviceInfo.Pswd,
                        Environment.MachineName.Equals(serviceInfo.ComputerName,
                            StringComparison.InvariantCultureIgnoreCase)
                            ? LogonType.Network
                            : LogonType.Interactive))
                {
                    var service = new ServiceController(serviceInfo.ServiceName, serviceInfo.ComputerName);
                    if (service.Status == ServiceControllerStatus.Stopped)
                    {
                        service.Start();
                        service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(60));
                    }
                    else
                    {
                        service.Stop();
                        service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(60));
                    }
                }
            });

(sn-p 取自项目站点)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 2013-01-05
    相关资源
    最近更新 更多