假设一些Windows服务使用的代码需要映射网络驱动器,而不需要UNC路径。当服务启动时,如何使驱动器映射可用于服务的会话?作为服务用户登录并创建持久映射将不会在实际服务的上下文中建立映射。
当前回答
我发现了一个解决方案,它与使用psexec的解决方案类似,但不需要额外的工具就可以工作,并且可以在重新启动后继续工作。
只需添加一个计划任务,在“作为运行”字段中插入“system”,并使用简单的命令将任务指向一个批处理文件
net use z: \servername\sharedfolder /persistent:yes
然后选择“在系统启动时运行”(或类似的,我没有英文版本),你就完成了。
其他回答
我发现了一个解决方案,它与使用psexec的解决方案类似,但不需要额外的工具就可以工作,并且可以在重新启动后继续工作。
只需添加一个计划任务,在“作为运行”字段中插入“system”,并使用简单的命令将任务指向一个批处理文件
net use z: \servername\sharedfolder /persistent:yes
然后选择“在系统启动时运行”(或类似的,我没有英文版本),你就完成了。
这里有一个很好的答案: https://superuser.com/a/651015/299678
例如,你可以使用符号链接。
mklink /D C:\myLink \\127.0.0.1\c$
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.
我还不能评论(在声誉方面),但创建了一个帐户,只是为了回答@Tech Jerk @spankmaster79(好名字lol)和@NMC问题,他们在回复“我发现了一个解决方案,与psexec类似,但不需要额外的工具,并在重启后幸存。”
解决方案是在登录帐户中浏览到该文件夹,即:
\\servername\share
并让它提示登录,并输入您在psexec中用于UNC的相同凭据。之后就开始工作了。在我的例子中,我认为这是因为提供服务的服务器与我要映射到的服务器不属于同一个域。我在想,如果UNC和计划任务都是指IP而不是主机名
\\123.456.789.012\share
它可能会完全避免这个问题。
如果我曾经得到足够的代表点在这里,我会把这作为一个回复。
找到一种方法授予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服务在“本地系统”特权下运行,无需登录即可完美执行。
推荐文章
- 在Sublime Text 2中使用Ctrl+D进行多个选择时,我如何跳过匹配?
- #定义WIN32_LEAN_AND_MEAN具体排除了什么?
- 最好的轻量级web服务器(只有静态内容)的Windows
- npm犯错!错误:EPERM:操作不允许,重命名
- 崇高的文本从命令行
- 如何将MongoDB作为Windows服务运行?
- 如何保持Python脚本输出窗口打开?
- 使用.bat文件检查文件夹是否存在
- 如何查看Windows库(*.lib)的内容
- 在Windows中删除大文件夹最快的方法是什么?
- NPM卡住给出相同的错误EISDIR:对目录的非法操作,读取错误(本机)
- Windows 10环境变量太大
- 如何使用Windows命令行更改目录
- .msi和setup.exe文件之间的具体区别是什么?
- 如何在NERDTree中显示隐藏文件(以句点开始)?