假设一些Windows服务使用的代码需要映射网络驱动器,而不需要UNC路径。当服务启动时,如何使驱动器映射可用于服务的会话?作为服务用户登录并创建持久映射将不会在实际服务的上下文中建立映射。


当前回答

使用此信息的风险自负。(我已经在XP和Server 2008 x64 R2上进行了测试)

对于这个hack,你将需要SysinternalsSuite由Mark Russinovich:

第一步: 打开提升的cmd.exe提示符(以管理员身份运行)

第二步: 使用PSExec.exe再次提升到根目录: 导航到包含SysinternalsSuite的文件夹并执行以下命令 Psexec -i -s cmd.exe 您现在处于nt authority\系统的提示符中,您可以通过键入whoami来证明这一点。需要使用-i是因为驱动器映射需要与用户交互

第三步: 使用以下命令将持久映射驱动器创建为SYSTEM帐户 Net使用z: \\servername\sharedfolder /persistent:yes

就是这么简单!

警告:您只能从SYSTEM帐户中删除与创建映射相同的映射。如果您需要删除它,请按照步骤1和步骤2执行,但将步骤3中的命令更改为net use z: /delete。

注意:新创建的映射驱动器现在会出现在这个系统的所有用户面前,但他们会看到它显示为“断开连接的网络驱动器(Z:)”。别被名字骗了。它可能声称是断开连接的,但它对每个人都适用。这就是为什么你可以告诉这个黑客是不支持的M$。

其他回答

而不是依赖于一个持久驱动器,你可以设置脚本映射/取消映射驱动器每次你使用它:

net use Q: \\share.domain.com\share 
forfiles /p Q:\myfolder /s /m *.txt /d -0 /c "cmd /c del @path"
net use Q: /delete

这对我很有用。

ForcePush,

注意:新创建的映射驱动器现在会出现在这个系统的所有用户面前,但他们会看到它显示为“断开连接的网络驱动器(Z:)”。别被名字骗了。它可能声称是断开连接的,但它对每个人都适用。这就是为什么你可以告诉这个黑客是不支持M$…

It all depends on the share permissions. If you have Everyone in the share permissions, this mapped drive will be accessible by other users. But if you have only some particular user whose credentials you used in your batch script and this batch script was added to the Startup scripts, only System account will have access to that share not even Administrator. So if you use, for example, a scheduled ntbackuo job, System account must be used in 'Run as'. If your service's 'Log on as: Local System account' it should work.

What I did, I didn't map any drive letter in my startup script, just used net use \\\server\share ... and used UNC path in my scheduled jobs. Added a logon script (or just add a batch file to the startup folder) with the mapping to the same share with some drive letter: net use Z: \\\... with the same credentials. Now the logged user can see and access that mapped drive. There are 2 connections to the same share. In this case the user doesn't see that annoying "Disconnected network drive ...". But if you really need access to that share by the drive letter not just UNC, map that share with the different drive letters, e.g. Y for System and Z for users.

这里有一个很好的答案: https://superuser.com/a/651015/299678

例如,你可以使用符号链接。

mklink /D C:\myLink \\127.0.0.1\c$

找到一种方法授予Windows服务访问网络驱动器。

以Windows Server 2012自带NFS磁盘为例:

步骤1:写一个批处理文件挂载。

写一个批处理文件,例如:C:\mount_nfs.bat

echo %time% >> c:\mount_nfs_log.txt
net use Z: \\{your ip}\{netdisk folder}\ >> C:\mount_nfs_log.txt 2>&1

步骤2:将磁盘挂载为NT AUTHORITY/SYSTEM。

打开“Task Scheduler”,创建一个新任务:

运行“系统”,在“系统启动”。 创建操作:运行"C:\mount_nfs.bat"。

经过这两个简单的步骤,我的Windows ActiveMQ服务在“本地系统”特权下运行,无需登录即可完美执行。

您既不想从“System”更改服务运行的用户,也不想找到一种狡猾的方式将映射运行为System。

有趣的是,这可以通过使用“at”命令,简单地将您的驱动器映射安排到未来一分钟,它将在系统帐户下运行,使驱动器对您的服务可见。