SpringBoot Windows 自启动 - 通过 Windows Service 服务实现
Windows Service 服务中,不能访问挂载目录(网络映射盘)
在Windows操作系统中,系统服务(Services)、计划任务(Scheduled Tasks)以及很多系统调用都是以SYSTEM系统账号进行操作的。用 net use 挂载,或者在文件管理器上直接挂载,挂载卷是以 Administrator 身份进行挂载的,而 SYSTEM 账号无法使用 Administrator 挂载的文件卷。
net use X: \\172.16.0.88\Tools /persistent:yes /user:share share
详见:https://www.cnblogs.com/vipsoft/p/17059153.html
注意:资源管理器里的映射网络磁盘,Windows Service 无法访问,需使用命令创建
@GetMapping("/network")
public String testPath(HttpServletRequest request) {
String path=request.getParameter("path");
String result = "";
if (FileUtil.exist(path)) {
result = ("挂载目录,存在 => " + path);
} else {
result = ("挂载目录,不存在 => " + path);
}
return result;
}
http://localhost:8080/demo/network?path=D%3A\
SpringBoot 做成 Windows Service 服务:https://www.cnblogs.com/vipsoft/p/17236063.html
做成 Windows Service 服务后,挂载盘不可访问,如下图所示:
此方案,服务器重启后失效,需要重新配置 (可以跳过,看解决方案2)
https://learn.microsoft.com/zh-cn/sysinternals/downloads/psexec
psexec -i -s cmd.exe
net use z: \\10.10.x.xxx\test /persistent:yes
不可以在登录后的系统中创建,通过 whoami 输出会发出执行用户不同
同样是使用命令,只是利用 任务计划程序 ,使得系统重启后,能够再次执行挂载。
使用命令映射 Y 盘,注意此命令运行映射的盘符不可以在资源管理器中的同名,否则会报已存在
MapNetworkDrive.bat
ECHO ON
ECHO This will map the drive, but is being run by task scheduler AS the user SYSTEM
ECHO which should make it accessible to the user SYSTEM
ECHO List the existing drives first.
if not exist G:\ (
net use G: \\172.16.0.88\Tools /persistent:yes /user:share share
ECHO %Date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2% >> D:\MapNetworkDrive.log
net use >> D:\MapNetworkDrive.log
) else (
ECHO %Date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2% >> D:\MapNetworkDrive.log
ECHO "exist G:\" >> D:\MapNetworkDrive.log
net use >> D:\MapNetworkDrive.log
)
ECHO See what user this batch job ran under
whoami >> D:\MapNetworkDrive.log
ECHO need to exit to allow the job to finish
EXIT
执行: net use X: \\172.16.0.88\Tools /persistent:yes /user:share share
确保命令可以正确运行(有时候服务器会限制连接数,导致挂载失败)
关键 -- 使用命令创建 任务计划
schtasks /create /tn "MapNetworkDrive" /tr "D:\MapNetworkDrive.bat" /sc onstart /RU SYSTEM /RL HIGHEST
重点:nt authority\system
会记录新的网络连接。
状态 本地 远程 网络
-------------------------------------------------------------------------------
OK G: \\172.16.0.88\Tools Microsoft Windows Network
命令成功完成。
nt authority\system