【问题标题】:Unable to access UNC path via windows service even when using same user for service即使使用同一用户进行服务,也无法通过 Windows 服务访问 UNC 路径
【发布时间】:2021-10-26 07:05:32
【问题描述】:

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

  • 服务用户或我用来登录的用户是本地管理员用户,在创建服务时,我已将“./AdminUser”提供给CreateService。还提供了配置密码。
  • VM 也连接到域。所以我有来自default-domain\*connected-domain\* 的用户。链接到 azure 活动目录的连接域。

我需要将其他类型的用户设置为登录服务吗?

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

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

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

【问题讨论】:

    标签: windows azure service azure-active-directory


    【解决方案1】:

    我们必须使用 cmdkey 来存储 SMB 以后可以使用的凭据。使用上下文菜单或命令,例如,使用要用于服务的用户启动 cmd.exe。

    runas /user:default-domain\domainServiceUser cmd
    

    然后在新的命令外壳中使用 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
    

    Powershell

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

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

    【讨论】:

    • 谢谢。我错过了 cmdkey,直接通过net use z: 使用凭据。
    【解决方案2】:

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

    【讨论】:

    • 没有启用域的 VM 并非如此。假设我有一个名为“xyz”的用户。因此,如果我通过 xyz 登录,安装驱动器,然后使用与用户相同的“xyz”创建服务,它可以访问驱动器。但是在域连接的虚拟机中执行相同的步骤,找不到驱动器。这里的“xyz”是使用本地/默认域。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2019-11-15
    相关资源
    最近更新 更多