这支批次程式本来是用来监视鼎新 ERP 派班中心是否挂掉用的,因为原理差不多稍加改良一下,这样就可以监视任何想要监视的常驻程式了.
说明:
鼎新派班中心每週至少要当掉一次,客户反应给鼎新但鼎新似乎没打算更新他们的程式,因为这个问题几年前就有人提出过,到现在还是一样.
程式功能:
当常驻程式挂掉时可以在指定的时间内重新启动常驻程式
预设的设定可以在鼎新 ERP 派班中心挂掉时会写入一个事件到应用程式事件记录中,事件识别码为 666 并且重新启动派班中心,修改相关参数可以在当掉时发出一封电子邮件给管理者。
可以修改 Set APPPath=及 Set IMAGENAME= 以及 Set CallIMAGENAME= 三个参数来监视其它的常驻程式。
参数说明:
AppName= 应用程式名称(视窗标题)
Tmier= 等待多久(秒)侦测一次应用程式是否挂掉
PluginSourec= 寄信外挂程式来源档(如果有自己的位置时才修改)
PluginViewer= 寄信外挂程式说明页(如果有自己的位置时才修改)
EventID= 可以指定写入的事件识别码(1-1000)
StartUP= 是否要在登入桌面时自动启动(0/1)
AutoSend= 当发生错误时是否邮寄信件给管理者(0/1)
完整内容:
将以下内容贴到记事本中存成 .bat 或 .cmd 档即可执行
Rem 视需求修改底下三行路径及执行程式正确资讯Set APPPath=D:\SmartERP\s_dsbinSet IMAGENAME=Dispatcher.exeSet CallIMAGENAME=Rem 除非你知道你在做什么否则请勿修改下方内容@Echo Off&Cls:HeadIf Not defined CallIMAGENAME Set CallIMAGENAME=%IMAGENAME%If Not Exist "%APPPath%\%IMAGENAME%" Call :AppCheck "%~0"Set AppName=鼎新派班中心setlocal ENABLEDELAYEDEXPANSIONSet Err=1&Rem 侦错计数器Set Plugin=0&Rem 外挂计数器Set Tmier=5&循环等待时间(秒)Set PluginSourec=https://www.glob.com.au/sendmail/sendmail.zip&Rem 外挂来源档Set PluginViewer=https://www.glob.com.au/sendmail/&Rem 外挂说明位置Set EventID=666&Rem 事件识别码Set StartTime=[%Date%-%Time%]&Rem 开始执行时间Set StartUP=1&Rem 1为登入后自动启动,0为删除启动项目Set AutoSend=1&Rem 1为发生错误邮寄信件给管理者Set Option=smtp_server,smtp_port,auth_username,auth_password,smtp_ssl,default_domain,error_logfile,debug_logfile,pop3_server,pop3_username,pop3_password,force_recipient,force_sender,hostnameSet TempMail=%TEMP%\temp.mail&Rem 邮件标头暂存档Set Mailini=%~pd0SendMail.ini&Rem SMTP 设定档,档名不可变更Set BODY=%TEMP%\Message.txt&Rem 信件内容,指定一个档案,与本程式不同路径时应填入完整路径::----------------SMTP 设定档参数---------------------::未使用到的参数请留空,:: smtp_server smtp_port auth_username auth_password smtp_ssl :: default_domain force_sender hostname From_Mail To_Mail::以上参数需修改成可用的 SMTP 伺服器参数,其它视需求修改::主机位置Set smtp_server=edm.dingerbs.com::SMTP 连接埠Set smtp_port=25::SMTP 使用者帐号Set auth_username=zzzz::SMTP 使用者密码Set auth_password=**************Rem smtp_ssl参数可使用 auto/ssl/tls/none 等四个加密方式Set smtp_ssl=auto::预设伺服器名称,当寄件人邮件地址不完整时,将自动添加这个网域后缀名Set default_domain=edm.dingerbs.com::当发生错误时会将错误写入这个档案里Set error_logfile=::需要除错时可以将这个设定打开,发送的过程将会记录在这个档案里Set debug_logfile=Rem 除非你的 SMTP 在登入前需要先登入POP3,否则底下三项应停用或留空Set pop3_server=Set pop3_username=Set pop3_password=::强制发件人为,只影响标头 "MAIL FROM"不会影响 FROM 中的寄件者名称Set force_sender=www@edm.dingerbs.com::强制收件人为,只影响标头 "RCTP TO"不会影响 TO 中的寄件者名称Set force_recipient=zzz@mail.dingerbs.com::HELO/HEOL 时送给对方的主机名称Set hostname=AgEnt.DingerBS.Com::寄件者Set From_Alias=日誌通报员Set From_Mail=www@edm.dingerbs.com::收件者Set TO_Alias=日誌管理员Set To_Mail=zzz@mail.dingerbs.com::副件Set CC=xxx@mail.dingerbs.com::隐藏副件Set Bcc=yyy@mail.dingerbs.com::信件标题Set Subject=[%COMPUTERNAME%]报表[%DATE%]:%AppName% 通报::----------------SMTP 设定档结束---------------------Title %AppName% (鼎尔资讯提供)Author:Dreamermode con cols=70 lines=13Color F1If %AutoSend% EQU 1 Call :CheckMail "%~pd0"Md "%windir%\MdTest" 2>nul&&Rd "%windir%\MdTest" >nul 2>nul||(Echo.&Echo.&Echo. 注意:动作完未成!&Echo 请用右键以系统管理员身分执行这个程式&Echo.&Echo.&Echo.&Echo.&Pause&Exit)Call :StartUP "%~0" :Do wmic process Where Name='%CallIMAGENAME%' Get name|findstr /i %CallIMAGENAME% >Nul&&(Echo.&Echo.&Echo.&Echo.&Echo [%AppName%] 执行中~)||(Set /a Err +=1Set Content=%AppName% 守护程式^<BR^>%AppName%于 [%DATE% %Time%] 停止运作^<BR^>经由 [%~0] 守护程式已重新启动^<BR^>%AppName%中止次数: [%Err%] ^<BR^>守护时间:%StartTime% 起至今Echo !Content! >"%BODY%"If %AutoSend% EQU =1 Call :SendMailEVENTCREATE /T "INFORMATION" /D "!Content!" /ID %EventID% /L APPLICATION /SO "%AppName%" >NulStart "%AppName%" "%APPPath%\%IMAGENAME%"Echo.&Echo.&Echo.&Echo.&Echo 己重新启动 [%AppName%]~Cls)Echo.&Echo.&Echo.&Echo [%AppName%]&Echo 监视中,请勿关闭这个程式.可将本程式视窗缩到最小. [%Time%]TimeOut /T %Tmier%ClsGoto :Do:StartUPSet AppMonitor=HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v AppMonitorReg Query %AppMonitor% >Nul&&Set Reg=1||Set Reg=0 If %StartUP% EQU 1 ( Reg Add %AppMonitor% /F /D %1 >Nul Echo 已设定为登入后自动启动,请勿搬移这个档案 Echo 档案如删除或更名或移动将造成登入后无法自行启动 TimeOut /t 15) Else ( If %StartUP% EQU 0 ( If %Reg% NEQ 0 Reg Delete %AppMonitor% /F >Nul))ClsExit /B:CheckMailIf Not Exist "%~1SendMail.exe" Set /A "Plugin += 1"If Not Exist "%~1ssleay32.dll" Set /A "Plugin += 1"If Not Exist "%~1libeay32.dll" Set /A "Plugin += 1"If %Plugin% Gtr 0 (Echo.&Echo.&Echo.发生错误!Echo 已设定当条件触发时邮寄通知给管理者,但因为缺少必要档案Echo 所以无法继续执行!Echo 如要继续,请选择以下选项进行查看、下载、或取消CHOICE /C VDC /M "查看说明(V)、下载档案(D)或取消(C)。"If !ErrorLevel! EQU 1 Explorer %PluginViewer%&Call :HeadIf !ErrorLevel! EQU 2 Bitsadmin /Transfer Download %PluginSourec% "%~1SendMail.Zip"&&(PowerShell Expand-Archive """%~1SendMail.Zip""" -DestinationPath """%~1\"""||( Echo.&Echo.&Echo. Echo 发生错误,解压缩失败 Echo 档案已下载,但因为你的 PowerShell 版本不支援这个解压缩指令 Echo 所以无法解压缩,请手动将档案解至这个目录中 "%~1\" Echo 按下任一键将启动已安装的解压缩软体 Pause "%~1SendMail.Zip")Del /q "%~1SendMail.Zip"Echo 外挂程式己下载完成.Echo 重新启动计数器.Echo 如要取消自动发送邮件请将参数 Set AutoSend=1 设为 0TimeOut /T 10Call :Head)||( Echo.&Echo.&Echo. Echo 无法下载! Echo 请确认下载位置是否正确 Echo %PluginSourec% Echo 按下任一键将开启说明页面。 Pause Explorer %PluginViewer% Exit )If !ErrorLevel! EQU 3 ExitExit)Exit /B:AppCheckEcho.Echo. 没有检测到可供监视的执行程式!请设定要监视的执行程式路径,Echo. 设定档:[%~1]Echo. 请以记事本编辑设定档Echo. 修改第二行 Set APPPath=[你的程式路径]Echo. 修改第三行 Set IMAGENAME=[你的程式档名]Echo. 修改第四行 Set CallIMAGENAME=[被呼叫的路径及档名]Echo. 範例:Echo. Set AppPath=C:\Program Files\windows nt\accessoriesEcho. Set IMAGENAME=wordpad.exeEcho. Set CallIMAGENAME=E:\app\wordpad.exeEcho. 第四行为非必要项目,若发生无法自动执行被监视的程式Echo. 请先确认被监视的程式是否透过 IMAGENAME 呼叫另一程式Echo. 如是务必设定好CallIMAGENAME参数,否则会无限循环.Echo.Echo. 按任一键将会关闭这个说明,并且开启档案以供设定.PauseStart "编辑设定" Notepad "%~1"Exit:SendMailEcho [sendmail] >"%Mailini%"For %%i In (%Option%) Do If Defined %%i Echo %%i=!%%i! >>"%Mailini%"Echo.Echo 邮件传送中,请稍候.........(Echo Message-ID:%Time%Echo Content-Type: text^/html;Echo Content-Language: zh-twEcho Content-Transfer-Encoding: quoted-printableEcho X-MachineName:%COMPUTERNAME%Echo X-Report-Abuse:你可以透过邮件方式申诉电子邮件滥用 %To_Mail%Echo List-Unsubscribe:^<mailto:%To_Mail%?subject=退订^&body=退订内容^>,^<http:^/^/你.的.网址^/^>Echo X-rpcampaign:这里是订阅编号Echo References:Echo In-Reply-To:Echo Charset:UTF-8Echo From:%From_Alias%^<%From_Mail%^>Echo To:%To_Alias%^<%To_Mail%^>Echo CC:%CC%Echo BCC:%Bcc%Echo Subject:%Subject%Echo.)> "%TempMail%"Type "%BODY%" >nul>> "%TempMail%""%~pd0\sendmail.exe" -t < "%TempMail%"||(Echo.&Echo.&Echo.&Echo. 发生错误Echo 请查看说明文件并修正错误后再次执行Echo 按下任一键将开启 SendMail 说明文件.DEL /q "%TempMail%" "%Mailini%" "%BODY%"PauseExplorer %PluginViewer%Exit)DEL /q "%TempMail%" "%Mailini%" "%BODY%"Exit /B