即使使用同一用户进行服务,也无法通过 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 服务时,它会抛出路径不存在的错误。
注意事项-
- 我用来登录的服务用户或用户是本地管理员用户,在创建服务时,我已将“./AdminUser”提供给
CreateService
。还提供了配置密码。
- VM 也连接到一个域。所以我有来自
default-domain\*
和 connected-domain\*
的用户。链接到 Azure 活动目录的连接域。
是否需要设置任何其他类型的用户登录服务?
我可以看到 here 它说本地用户无法访问网络资源,但我想知道因为我使用正确的凭据安装了路径,这有关系吗?
更新:
使用 运行ning 时遇到与 exe 相同的问题。
runas /user:USERNAME “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。
我有一个 windows 虚拟机并创建了一个管理员用户,比方说 - AdminUser。我已将该用户的 azure 文件共享安装到 Z: 驱动器。可以通过 unc 路径或驱动器路径访问共享。我还有一个 c# 实用程序,用于检查路径是否存在,当我 运行 它时它 returns 为真。这一切都很好。现在,当我使用该实用程序和相同的用户凭据创建 windows 服务时,它会抛出路径不存在的错误。 注意事项-
- 我用来登录的服务用户或用户是本地管理员用户,在创建服务时,我已将“./AdminUser”提供给
CreateService
。还提供了配置密码。 - VM 也连接到一个域。所以我有来自
default-domain\*
和connected-domain\*
的用户。链接到 Azure 活动目录的连接域。
是否需要设置任何其他类型的用户登录服务?
我可以看到 here 它说本地用户无法访问网络资源,但我想知道因为我使用正确的凭据安装了路径,这有关系吗?
更新: 使用 运行ning 时遇到与 exe 相同的问题。
runas /user:USERNAME “C:\full\path\of\Program.exe”
虽然用户帐户相同,但当 windows 服务作为 'user' 运行时,它获得的登录会话与交互式用户会话(具有 Z 驱动器)不同。除非您在属于 Windows 服务的代码中以编程方式将 Azure 文件共享加载为网络驱动器,否则您将无法访问它。
我们必须使用 cmdkey 来存储稍后 SMB 可以使用的凭据。使用上下文菜单或命令(例如
)与要用于该服务的用户一起启动 cmd.exerunas /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。