即使使用同一用户进行服务,也无法通过 windows 服务访问 UNC 路径

Unable to access UNC path via windows service even when using same user for service

我有一个 windows 虚拟机并创建了一个管理员用户,比方说 - AdminUser。我已将该用户的 azure 文件共享安装到 Z: 驱动器。可以通过 unc 路径或驱动器路径访问共享。我还有一个 c# 实用程序,用于检查路径是否存在,当我 运行 它时它 returns 为真。这一切都很好。现在,当我使用该实用程序和相同的用户凭据创建 windows 服务时,它会抛出路径不存在的错误。 注意事项-

是否需要设置任何其他类型的用户登录服务?

我可以看到 here 它说本地用户无法访问网络资源,但我想知道因为我使用正确的凭据安装了路径,这有关系吗?

更新: 使用 运行ning 时遇到与 exe 相同的问题。

runas /user:USER­NAME “C:\full\path\of\Program.exe”

虽然用户帐户相同,但当 windows 服务作为 'user' 运行时,它获得的登录会话与交互式用户会话(具有 Z 驱动器)不同。除非您在属于 Windows 服务的代码中以编程方式将 Azure 文件共享加载为网络驱动器,否则您将无法访问它。

我们必须使用 cmdkey 来存储稍后 SMB 可以使用的凭据。使用上下文菜单或命令(例如

)与要用于该服务的用户一起启动 cmd.exe
runas /user:default-domain\domainServiceUser cmd

然后在新命令shell中使用cmdkey

cmdkey /add:<storagteAccountName>.file.core.windows.net\<shareName> /user:AZURE\<storageAccountName> /pass:<storageAccountKey>

重新运行该服务,它应该可以工作。

如果您还想将其安装为永久驱动器,可以使用

命令提示符

net use z: \<storagteAccountName>.file.core.windows.net\<shareName> /persistent:yes

功率shell

New-PSDrive -Name Z -PSProvider FileSystem -Root "\<storagteAccountName>.file.core.windows.net\<shareName>" -Persist

确保用户与用于 windows 服务的用户完全相同,包括域,即使用 default-domain\domainServiceUser 或 ./AdminUser 作为 运行 cmdkey。