windows-services - 使用本地系统帐户的 Windows 服务启动的可执行文件无法访问网络共享

标签 windows-services credentials network-share

我有一个由 Windows 服务启动的可执行文件,该程序将在客户机器上运行,并且需要连接到远程共享以执行特定任务。此共享是由客户通过 UI 指定的,因此我们事先不知道这一点,这意味着它不能“硬编码”,也不能预先映射共享。

以前我们要求客户登录他们的机器并在登录时运行可执行文件,但我们一直希望让我们的程序在服务中运行而不需要登录,主要是为了让客户更容易并防止任何意外注销关闭我们的软件。所以这也意味着我们不知道客户机器上存在哪些本地用户帐户,因此我们必须使用本地系统帐户启动服务。

如上所述,我们现在有一个包装服务来启动可执行文件并执行各种任务。这在大多数情况下似乎工作正常并且可以很好地访问底层网络 - 我们软件的目的主要涉及捕获数据包等。

但是,当软件尝试连接到 Windows 共享(UNC 名称)时,它无法连接。而如果可执行文件是手动启动的,它连接正常。

我通常看到的解决此类问题的建议似乎都说使用用户帐户,因为系统帐户无法访问网络共享,但在我们的情况下这是不可能的。有没有其他方法可以让这个工作?

编辑:我忘了提到这个应用程序可以(并且最常见的是)在 Win2K 上而不是 XP 上运行,我认为我说本地网络帐户在 XP 之前不可用是正确的?

最佳答案

如果您可以更改 Windows 服务,使其在网络服务帐户下运行,那么您的可执行文件将能够访问网络共享(这是创建网络服务帐户的原因之一)。

本地系统和本地服务帐户没有任何网络凭据,因此无法在网络上进行身份验证。这是设计使然。

编辑: IIRC,网络服务帐户是在 Server 2003 中引入的,并添加到 XP 服务包之一。

如果您不能依赖可用的网络服务帐户,那么您可以考虑创建一个专用域帐户,将帐户的凭据存储在某处,从您的服务内部读取它们,然后在访问网络共享之前登录并模拟该用户。或者,Windows 服务可以直接作为专用帐户运行,在这种情况下,它需要“作为服务登录”权限。

关于windows-services - 使用本地系统帐户的 Windows 服务启动的可执行文件无法访问网络共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/249928/

相关文章:

c# - 在windows服务中传递参数

security - 每个存储桶的 Amazon S3 安全凭证

amazon-web-services - 如何在Jenkins作业DSL中加载AWS凭证?

Windows 网络共享上的 svn 存储库

c# - 枚举网络共享

python - 服务中的桌面通知

c# - 安装 Windows 服务 - 未完成帐户名和安全 ID 之间的映射

c# - 使用 C# 通过 Windows 服务打印 PDF

linux - 如何保护 docker-compose 文件中的凭据

ios4 - 如何从 iOS 设备访问 WiFi 网络共享