我現在有這么一個例子,就是在我要監控一個web專案的服務,當服務出現問題,通過vbs檢測能夠自動重啟該服務。
我的兩個環境分別是:win7 64位、windows server 2003
出現癥狀:
運行相同的vbs程式,當web服務出現問題,自動重啟,win7能夠正常檢測并重啟,2003也能夠檢測但不能夠進行重啟操作
最主要的是,以前2003還能夠正常運行的,現在不知道為什么就是不斷的跳dos視窗。(我記得運行正常的時候,之后我給金山毒霸做過安全漏洞補丁)
vbs代碼如下:
on error resume Next
Dim a
a = True
data = "restart tomcat8------------>"
set WshShell = WScript.CreateObject("WScript.Shell")
set fs = createobject("scripting.filesystemobject")
Do While a
set http = CreateObject("Microsoft.XMLHTTP")
http.open "GET","http://localhost:8080/oa/system/SysOnline",false
http.send
if http.Status > 299 then
set ts = fs.opentextfile("c:\xfgl_"&date&".txt",8,true)
WshShell.Run("taskkill /F /im Tomcat8.exe /T")
WshShell.Run("net start Tomcat8")
ts.write data
ts.write "error code:"
ts.write http.Status
ts.write "-------error time:"
ts.write now
ts.writeblanklines 2
ts.close
end if
WScript.Sleep(1000)
loop
vbs每一秒訪問http://localhost:8080/oa/system/SysOnline頁面一次,如果訪問不正常,則http.Status > 299,那么就會執行WshShell.Run("taskkill /F /im Tomcat8.exe /T") WshShell.Run("net start Tomcat8")這兩個命令。
大
uj5u.com熱心網友回復:
如果訪問不正常,則http.Status > 299,那么就會執行WshShell.Run("taskkill /F /im Tomcat8.exe /T") WshShell.Run("net start Tomcat8")這兩個命令。net.exe 和 Tomcat8.exe 都是控制臺程式吧!它們運行時,當然就會跳DOS視窗出來。
uj5u.com熱心網友回復:
你沒有明白我的意思,我的意思是,現在能夠通過這個vbs程式正常啟動了。
我只能在cmd視窗下手動打這兩個命令才有效,而在vbs里面的無效了,是不斷的跳閃視窗(打開關閉,就是不啟動了)而在我本地一切又是正常的。
uj5u.com熱心網友回復:
用除錯器(OD,WINDBG等)除錯服務程式To debug the initialization code of a service application, the debugger must be attached when the service is started. This is accomplished by creating a registry key:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ProgramName
The ProgramName is the image file for the service application you are debugging. Do not specify a path. For example, the ProgramName might look like MyService.exe.
Under this key create a string data value called Debugger. The value of this string should be set to the full path of the debugger that will be used. For example,
c:\Debuggers\windbg.exe
In addition to setting this registry key, the service application must be marked as "interactive". This allows your service to interact with the desktop, and allows the debugger window to appear on your desktop.
This again requires modifying a registry key: you must bitwise-or the type entry for your service with 0x100 (this is the value for SERVICE_INTERACTIVE_PROCESS according to Winnt.h). The exact location and name of this registry entry varies. For example:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyServiceKey
Finally, you need to adjust the service application timeout. Otherwise, the service application will kill the debugger within 20 seconds after starting. Adjusting the timeout involves setting an entry in the following registry key:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
Under this key, create a DWORD data value called ServicesPipeTimeout. Set this entry to the amount of time in milliseconds that you want the service to wait before timing out. For example, 60,000 is one minute, while 86,400,000 is 24 hours.
設定ServicesPipeTimeout后需要重啟系統才生效
Now, when the service is started, the debugger will also start. When the debugger starts, it will stop at the initial process breakpoint, before the service has begun running. This allows you to set breakpoints or otherwise configure your debugging session to let you monitor the startup of your service. Another option is to place calls to the DebugBreak function in your service from the point at which you would like to break into the debugger. (For more information, see DebugBreak in the Platform SDK documentation.)
If your service is running with other services in a Service Host Process, you may need to isolate the service into its own Service Host Process.
uj5u.com熱心網友回復:
cmd命令不用括號可以正常運行轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/129685.html
標籤:網絡編程
下一篇:如何在程式中嵌入資料庫???
