Windows Service 服务中,不能访问挂载目录(网络映射盘)

windows,service,服务,不能,访问,挂载,目录,网络,映射 · 浏览次数 : 263

小编点评

**解决方案 1:重新启动服务** 在 Windows 服务中,由于无法访问挂载目录,需要重新启动服务以重新配置。 **解决方案 2:使用命令创建测试代码** 1. 创建一个名为 `MapNetworkDrive.bat` 的文件,内容为: ``` net use z: \\\\10.10.x.xxx\\test /persistent:yes /user:share share ``` 2. 在 `MapNetworkDrive.bat` 文件中添加以下代码: ``` echo ONECHO This will map the drive, but is being run by task scheduler AS the user SYSTEM echo List the existing drives first. if not exist G:\\ ( 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 echo whoami >> D:\\MapNetworkDrive.log echo need to exit to allow the job to finish net use X: \\\\172.16.0.88\\Tools /persistent:yes /user:share share ``` 3. 将 `MapNetworkDrive.bat` 文件保存为 `netuse.bat`,并将其放到系统路径中。 4. 在服务启动时运行 `netuse.bat` 文件。 **注意:** 1. 将 `10.10.x.xxx` 替换为实际的网络映射盘的 IP 地址。 2. 将 `D:\\MapNetworkDrive.log` 替换为实际的日志文件路径。 3. 在运行命令之前确保服务已正确启动。

正文

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\
image

做成服务

SpringBoot 做成 Windows Service 服务:https://www.cnblogs.com/vipsoft/p/17236063.html
做成 Windows Service 服务后,挂载盘不可访问,如下图所示:
image

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

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

下载PsExec

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

执行命令

  1. 运行CMD,执行 psexec -i -s cmd.exe
    image
  2. 在新开的CMD窗口中运行网络映射 net use z: \\10.10.x.xxx\test /persistent:yes
    image
  3. 输入用户名和密码映射成功
  4. 重启服务,成功访问网络映射盘
    image

解决方案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
image

重启系统

image

日志文件 MapNetworkDrive.log

重点:nt authority\system

会记录新的网络连接。

状态       本地        远程                      网络

-------------------------------------------------------------------------------
OK           G:        \\172.16.0.88\Tools      Microsoft Windows Network

命令成功完成。

nt authority\system

与Windows Service 服务中,不能访问挂载目录(网络映射盘)相似的内容:

Windows Service 服务中,不能访问挂载目录(网络映射盘)

net use X: \\172.16.0.88\Tools /persistent:yes /user:share share Windows Service 服务,无法访问共享盘,无法访问挂载盘,无法访问(网络映射盘)

【Azure 应用服务】应用代码中需要使用客户端证书访问服务接口,部署在应用服务后报错不能找到证书(Cannot find the X.509 certificate)

问题描述 在应用中,需要访问另一个服务接口,这个接口需要使用客户端证书进行认证。在代码中使用 System.Security.Cryptography.X509Certificates 加载Window系统中 Current User\My 下的证书。 然后把证书通过App Service门户页面上

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

将.NetCore 做成 Windows 服务 - JAVA 同理 、将jar包安装为windows服务-bat启动方式 将 SpringBoot 注册为 Windows Service服务 可实现 SpringBoot 项目在Windows 中随系统自启动。也不用担心被识关闭

【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)

在使用App Service服务部署业务应用,因为有些第三方的接口需要调用者携带TLS/SSL证书(X509 Certificate),在官方文档中介绍了两种方式在代码中使用证书: 1) 直接使用证书文件路径加载证书 new X509Certificate2 2) 从系统的证书库中通过指纹加载...

【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例

问题描述 很早之前,介绍了在 App Service for Linux中挂载 Storage Account共享文件,当时Windows无法实现这个功能。而现在,App Service For Windows也可以挂载Storage Account File Share了。以下内容未演示操作。 #

无法停止服务、无法终止 PID 4100 的进程

服务中无法停止服务。 先查出服务对应的进程 Microsoft Windows [版本 10.0.19043.1348] (c) Microsoft Corporation。保留所有权利。 C:\Users\cj218>sc queryex VipSoftService SERVICE_NAME:

【Azure 应用服务】在App Service for Windows中实现反向代理

问题描述 如何在App Service for Windows(.NET Stack)中,如何实现反向代理呢? 正向代理:客户端想要访问一个服务器,但是它可能无法直接访问这台服务器,这时候这可找一台可以访问目标服务器的另外一台服务器,而这台服务器就被当做是代理人的角色 ,称之为代理服务器,于是客户端

Redis安装服务到电脑

1、直接在地址栏输入cmd回车打开命令窗口,输入 redis-server redis.windows.conf 然后回车 2、在cmd命令窗口输入以下命令并回车安装Windows本地服务 redis-server --service-install redis.windows-service.co

【Azure 云服务】Cloud Service Worker Role Workerrole突然停机,查看Events发现 Defrag Error (0x8900002D)

问题描述 Cloud Service Worker Role Workerrole突然停机,查看Events,发现是错误源为 Defrag。 错误消息: The volume Windows was not optimized because an error was encountered: Ne

.NET实现获取NTP服务器时间并同步(附带Windows系统启用NTP服务功能)

对某个远程服务器启用和设置NTP服务(Windows系统) 打开注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 将 Enabled 的值设置为 1,这将启用NTP服务器功