win10 mysql 启动 bat_windows系统下(如win10)如何将bat在系统开机但未登录情况下自动启动...

本文详细记录了在Windows 10系统下,如何使用NSSM工具将MySQL Bat脚本设置为开机自动启动。通过NSSM注册服务后,脚本能在系统启动但未登录时自动运行,解决了其他方法如计划任务、注册服务等在特定条件下无法成功启动的问题。
摘要由CSDN通过智能技术生成

一、最终成功办法:NSSM方法

nssm 在windows上部署服务

注册完之后,服务显示启动了,虽然看不到启动的bat脚本,但是过一会访问系统,发现系统可以访问了,看来bat是被隐式启动的,以后有什么报错信息去系统后台看就可以了。

这个问题整整搞了五天,各种方式都尝试过了,第一次最终以失败并且win+R弹不出来告终,第二次终于成功了。。

现将各种尝试方式及解决办法记录如下

1, 放在【控制面板】的【计划任务】下面

放在【计划任务】下面,如果触发器选择【登录时】是可以正常启动bat的,但是如果选择【启动时】,就无法启动,没有弹出界面,而且网站无法问,脚本确实没启动起来,推测是在启动后,有一些系统运行需要的服务如mysql没有启动好,导致bat无法启动

2,运行gpedit.msc,放在C盘【启动】文件夹下

这个方法只能在登陆后正常启动,而不能在未登录的情况下启动。

而且这个方法中间踩了一些坑

如将bat复制到【启动】文件夹下面的时候,会提示没有权限,然后右键-属性把权限配置好了以后,复制进去过一次,重启以后,再之后就提示【文件夹不能访问】无论如何重启都不能复制进去了,这个搞了一下午,即使把这个文件夹的其他访问用户都删掉了,本用户依然不能访问这个文件夹,结果下个周一重启电脑后,什么也没做,居然就很轻易的复制进去了,万分灵异。

3,使用windows自带的命令sc

使用sc create 方法创建。如:

sc create CaptureScreen binpath= F:\zwmei-project\decklink-learning\OutputBitmap\Debug\OutputBitmap.exe type= own start= auto displayname= Screen_Capture

这种方式可以在服务中看到注册的服务,同时在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services下面也可以看到相应的服务了,但是启动时会报——1053:服务没有响应的错误,推测可能原因是bat做成服务有一定的要求,并非只是简单注册一下,不是所有的bat和exe都能做成服务,需要专门的程序才行,程序里面需要有相应的代码,才会有返回值,返回告诉操作系统服务开启的情况。

还有说改ServiePipeTimeout这个参数的,错误1053:服务没有及时响应启动或控制请求

但是并没有起作用。

4,转成exe格式,做成服务并且设置成自动运行

这个可以参考windows系统将bat脚本配置为系统服务使其在开机用户登录前启动

虽然这种方法也没有成功,但这个帖子走到最后一步也踩了不少坑

其中对instsrv和srvany的解释下面的较为客观:

instsrv.exe可以创建和删除服务,然而如果没有srvany.exe的参与,创建的服务可能无法启动。那么srvany.exe做了些什么呢,启动服务后我们可以在任务管理器中找到我们的服务,然后右击服务,选择转到进程,(如果进程中没有任何项被选中,则点击下面的显示所有用户进程,然后重新选择转至进程),我们看到的是srvany.exe,而不是我们自己的exe。原来我们的exe成为了它的一个子项,由srvany.exe帮助启动。

4.1、bat转exe后,运行exe,提示找不到主类

首先bat必须是UTF-8 无BOM格式,否则打开的话会乱码,可以用notepad转一下编码

我一共有两个bat文件,其中一个转成exe运行成功了,另一个转成exe提示找不到主类,最开始怀疑是因为bat文件的命令行注释中有中文字符,由于编码问题转换失败,因此将中文全部删掉,但是依旧会报找不到主类。

而且后来即使能运行成功后,控制台都正常启动后,chrome输入网址能够加载出登录界面,但是输入账号密码后,显示连接服务台失败,因此怀疑从bat转换成exe后,还是中间转换过程出了问题,导致失败。

因此最后我自己写了两个bat, 这两个bat是引用程序所需的bat,然后转成exe,最终成功运行,这两个引导bat的代码还不太一样,最开始是复制粘贴,只写了一种,代码如下

1.引导http-startup.bat

@echo off

cd /d 引导bat所在路径

cmd /k xx.bat run %*

2.引导startup.bat(本来也想按照上述写法的,但是会报错,好像是提示找不到主类/bat不是可执行文件?记不清了)

@echo off

cd /d 引导bat所在路径

cmd /k startup.bat

然后用软件转成exe即可

4.2 、注册成服务后,可以启动,但是窗口一闪而过,无法正常持续看到窗口

这个原因是因为服务是不可以运行窗口的,因此要找到服务Interactvie Services Detection,并启动,Interactvie Services Detection服务的作用是允许服务中的窗口启动,但是即使启动后,也不是在正常桌面上,而是会弹出一个交互服务的框,点击查看,会看到自己的bat在Session 0的隔离中,运行了起来,而且这个Session 0 也只能查看,不能进行任何操作,甚至返回都不可以,只能稍后等电脑自动锁屏,再登录系统

4.3、Interactvie Services Detection服务启动报错:函数不正确

1、打开注册表

2、HKEY_LOCAL-MACHINE

SYSTEM

CurrentControlSet

Control

Windows

3、修改 NoINteractiveService 的值为 0

4、再次打开服务,然后启动就可以了。

心得:有事多google,别百度,百度了一小上午,全是废话,根本没有可用的解决方案,换成谷歌,第一条就解决了

4.4、终于把这种方式的帖子走到了最后,但是还是startup.bat会在命令窗口中会只有链接,没有正常启动,猜想会不会是自己注册的服务需要依赖如mysql的服务才能正常启动,并且和炎黄确认了炎黄平台的服务只需依赖mysql服务即可,但是添加依赖后,包括在服务中设置了如果启动失败,则重启服务等操作,依旧无法启动服务

4.5、服务还是无法启动,因此想要是否能够穿透Session 0隔离,看过一段话

从Vista开始,包括Windows7, Windows2008, Windows8等,由于‘服务隔离’(一种安全改进,即所有的服务在一个隔离的Session 0运行),服务不能直接同桌面交互。

即使你'设置为允许与桌面交互',也不能直接同桌面交互。

完毕。。踩了很多坑,但是终于搞定了。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值