在 Windows 服务中访问网络共享的正确方法

Tip*_*psy 5 windows network-share service local-system net-use

我有一项 Windows 服务,需要按需访问远程 CIFS 共享。每当它需要访问共享时,它首先尝试使用提供的凭据“安装”它,

NET USE \\host\share password /USER:user
Run Code Online (Sandbox Code Playgroud)

使用共享的内容,然后删除共享。

NET USE \\host\share /DELETE
Run Code Online (Sandbox Code Playgroud)

目前,该服务仅在第一次使用共享时有效。在随后的尝试中,它不起作用,并且出现以下错误:

NET 失败,退出代码为 2

然而,当从命令行手动运行时,相同的逻辑都可以正常工作;它仅在服务上下文中失败。

我的问题是:是否有更好、更正确的方法来处理 Windows 服务中的网络共享?根据这篇文章NET USE不建议在服务中使用,即使不使用驱动器盘符。我是否NET USE应该使用其他替代方案,或者该服务是否只需要以默认用户以外的用户身份运行LocalSystem

理想情况下,共享应该仅在直接需要时才可访问;因此,如果可能的话,我想保留每次删除共享的逻辑。

Dan*_*Dan 6

您应该以特定用户帐户运行该服务,并且该用户帐户应该有权访问共享。

像这样输入用户名和密码是一种非常糟糕的工作方式。不仅是为了安全,还为了便携性和管理。

  • 关键是该服务应该在有权访问共享(或任何网络资源)的用户的上下文中运行,因此根本不需要在代码或应用程序配置中弄乱凭据。 (2认同)