我有一个无法修改在 Windows Server 上运行的 C# 服务。该服务在内部有一个函数,该函数使用 DriveInfo.GetDrives 来获取可用驱动器列表,并将该信息返回给 API。然而,虽然这会返回 C 驱动器,但它无法检测到从通过以下 Powershell 脚本创建的另一台计算机映射的驱动器:
$cred = Get-Credential -Credential myusername
New-PSDrive -Name "Z" -Root "\\192.168.1.24\SharedFolder" -Persist -PSProvider "FileSystem" -Credential $cred -Scope Global
Net Use
Read-Host -Prompt "Press Enter to exit"
我尝试创建具有访问驱动器权限的新用户,并让服务以该用户身份登录,更改映射驱动器的权限,并仔细检查以下注册表项是否存在(确实存在):
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"EnableLinkedConnections"=dword:00000001
我还尝试了以下各项来让服务在不同的系统帐户下运行:
sc config ServiceName obj= "NT AUTHORITY\Local Service" password= ""
sc config ServiceName obj= "NT AUTHORITY\Network Service" password= ""
但是没有任何效果。我创建了一个使用 DriveInfo.GetDrives 的简单 C# 应用程序,它返回 C 驱动器以及映射的 Z 驱动器。这显然是某种权限问题。我缺少什么?非常感谢任何帮助。
您需要在服务使用的用户下运行脚本。
该服务可能不会监视驱动器并使用启动期间可用的驱动器。在这种情况下,您需要延迟启动服务并在服务启动之前运行脚本。这可以通过您应该创建的另一个专用服务来完成。或者也许您可以使用系统调度程序在系统启动时运行脚本。