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 服务后,挂载盘不可访问,如下图所示:

解决方案1(可以跳至方案2)

此方案,服务器重启后失效,需要重新配置 (可以跳过,看解决方案2)

下载PsExec

https://learn.microsoft.com/zh-cn/sysinternals/downloads/psexec

执行命令

  1. 运行CMD,执行 psexec -i -s cmd.exe

  2. 在新开的CMD窗口中运行网络映射 net use z: \\10.10.x.xxx\test /persistent:yes

  3. 输入用户名和密码映射成功
  4. 重启服务,成功访问网络映射盘

解决方案2

不可以在登录后的系统中创建,通过 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

重启系统

日志文件 MapNetworkDrive.log

重点:nt authority\system

会记录新的网络连接。

状态       本地        远程                      网络

-------------------------------------------------------------------------------
OK G: \\172.16.0.88\Tools Microsoft Windows Network 命令成功完成。 nt authority\system

Windows Service 服务中,不能访问挂载目录(网络映射盘)的更多相关文章

  1. [开发笔记]-Windows Service服务相关注意事项

    注意一:报错:“本地计算机上的 *** 服务启动后停止.某些服务在未由其他服务或程序使用时将自动停止.” 该问题主要的原因是 Service服务程序中有错误. 遇到这个问题时,无论是重新安装服务,还是 ...

  2. C# Windows Service服务的创建和调试

    前言 关于Windows服务创建和调试的文章在网络上的很多文章里面都有,直接拿过来贴在这里也不过仅仅是个记录,不会让人加深印象.所以本着能够更深刻了解服务项目的创建和调试过程及方法的目的,有了这篇记录 ...

  3. SpringBoot Windows 自启动 - 通过 Windows Service 服务实现

    SpringBoot 在Windows运行时,有个黑窗体,容易被不小心选中或关闭,或者服务器重启后,不能自动运行,注册为 Windows Service服务 可实现 SpringBoot 项目在Win ...

  4. quartz.net结合Topshelf实现windows service服务托管的作业调度框架

    topshelf可以很简单方便的实现windows service服务,详见我的一篇博客的介绍 http://www.cnblogs.com/xiaopotian/articles/5428361.h ...

  5. Windows Service 服务搭配FluentScheduler实现定时任务调度

    Windows Service 服务 创建Windows Service 项目 创建一个Windows Service项目,并将项目名称改为 TaskWindowService 在解决方案资源管理器内 ...

  6. 震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……

    过场CG:   接到公司领导的文件指示,“小熊”需要在6月底去海外执行一个行动代号为[定时任务]的营救计划,这个计划关系到公司某个项目的生死(数据安全漏洞),作战部拟定两个作战方案: 方案一:使用务定 ...

  7. 解决Windows服务无法访问网络映射盘的问题

    下载工具psexec 下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec 百度地址:https://pan.baid ...

  8. .Net Windows Service(服务) 调试安装及System.Timers.Timer 使用

    Windows Service(服务)  是运行在后台的进程 1.VS建立 Windows 服务(.NET Framework) 2.添加Timer 双击Service1.cs可以拖控件(System ...

  9. Windows 下 exe 服务注册到 service 服务中

    window 下注册 exe 程序.添加到 服务中. window 注册服务方式 一. regsvr 方式 直接在 程序目录执行: Regsvr 32 命令是Windows中控件文件 ( 如扩展名为D ...

  10. Visual Studio 2012的Windows Service服务安装方式

    windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志.计算机启动时,服务会自动开始 ...

随机推荐

  1. [Python急救站课程]温度转换程序

    华氏温度转换为摄氏度的温度转换程序共有三种写法 一.简单的温度转换程序 TempStr = input("请输入带有符号的温度值: ") # TemStr表示命令,表示占位符.=为 ...

  2. 优雅设计之美:实现Vue应用程序的时尚布局

    前言 页面布局是减少代码重复和创建可维护且具有专业外观的应用程序的基本模式.如果使用的是Nuxt,则可以提供开箱即用的优雅解决方案.然而,令人遗憾的是,在Vue中,这些问题并未得到官方文档的解决. 经 ...

  3. HBase|idea使用hbase进行简单的DDL增删改查

    老师要测试什么的,所以我想练习一下,顺便记录在博客里,如有错误,敬请指正,谢谢!!! idea连接hbase 首先确保你可以打开Hbase http://192.168.40.100:16010 查看 ...

  4. 通过Span实现高性能数组,实例解析

    Span<T> 是 C# 7.2 引入的一个强大的数据结构,用于表示内存中的一块连续数据.它可以用于实现高性能的数组操作,而无需额外的内存分配.在本文中,我将详细介绍如何使用 Span&l ...

  5. JavaWeb开发-HTML基础学习

    1.HTML的基本语法 HTML是什么?:HTML是一种超文本标记语言,负责网页的结构,设计页面的元素内容等 超文本:超越文本限制,除了文本信息,还可以定义图片,音频,视频等 标记语言:由标签构成的语 ...

  6. Curator

  7. MinIO实现文件上传

    一.使用Docker安装minio docker run -d -p 9000:9000 -p 9001:9001 --name minio -e MINIO_ACCESS_KEY=qbb -e MI ...

  8. Java操作Word修订功能:启用、接受、拒绝、获取修订

    Word的修订功能是一种在文档中进行编辑和审阅的功能.它允许多个用户对同一文档进行修改并跟踪这些修改,以便进行审查和接受或拒绝修改.修订功能通常用于团队合作.专业编辑和文件审查等场景. 本文将从以下几 ...

  9. 【C#】【System.Linq】一些便捷的数据处理方法(Range、Select)

    因为用习惯了Python中一些便捷的方法,随即查询C#中有没有类似的. 一.Range()方法 在Python中,range(Start,End,Step)可以直接生成一个可迭代对象,便用于需要循环多 ...

  10. ASR项目实战-架构设计

    一般而言,业务诉求作为架构设计的输入. 需求清单 对于语音识别产品而言,需满足的需求,举例如下: 功能需求 文件转写. 长文件转写,时长大于60秒,小于X小时,X可以指定为5. 短文件转写,时长小于6 ...