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

前端之家收集整理的这篇文章主要介绍了windows-services – 由Windows服务启动的可执行文件使用本地系统帐户无法访问网络共享前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个由 Windows服务启动的可执行文件,该程序将在客户机器上运行,并且需要连接到远程共享以执行特定任务.此份额由客户通过UI指定,因此我们事先并不知道这意味着它不能“硬编码”,或者预先映射共享.

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

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

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

我一般看到解决这类问题的建议似乎都说使用用户帐户,因为系统帐户无法访问网络共享,但在我们的例子中这是不可能的.有没有其他方法可以让这个工作?

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

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

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

编辑:IIRC,网络服务帐户在Server 2003中引入,并添加到其中一个XP服务包中.

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

猜你在找的Windows相关文章