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

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

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

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

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

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

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

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

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

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

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

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...