亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Windows服務(wù)意外停止的對策

        2009-07-02 08:36:00劉德軍
        新媒體研究 2009年10期
        關(guān)鍵詞:對策服務(wù)

        劉德軍

        [摘要]針對Windows服務(wù)在運(yùn)行過程中出現(xiàn)的意外停止的情況下實現(xiàn)無人值守定時檢測服務(wù)狀態(tài),在服務(wù)停止后能自動啟動服務(wù)。

        [關(guān)鍵詞]服務(wù) 意外停止 對策

        中圖分類號:TP3文獻(xiàn)標(biāo)識碼:A文章編號:1671-7597(2009)0520032-02

        一、前言

        系統(tǒng)服務(wù),是指執(zhí)行指定系統(tǒng)功能的程序、例程或進(jìn)程,以便支持其他程序,尤其是低層(接近硬件)程序,它是Windows系統(tǒng)的一個重要組成部分。

        我院在做醫(yī)院管理系統(tǒng)與醫(yī)療保險系統(tǒng)接口過程中使用到一個外加進(jìn)系統(tǒng)的醫(yī)保服務(wù),但該服務(wù)在實際使用過程中經(jīng)常出現(xiàn)服務(wù)不定時的意外停止,該服務(wù)的停止必然導(dǎo)致門診住院醫(yī)保病員的就診不能正常進(jìn)行,也給計算機(jī)中心的管理帶來了很大的挑戰(zhàn),每次服務(wù)停止后都必須在服務(wù)器上用手工執(zhí)行啟動后才能恢復(fù)正常,為恢復(fù)該服務(wù)必須到機(jī)房手工處理,有時甚至在深夜。針對這一情況,如何才能在無人值守的情況下實現(xiàn)對該服務(wù)做監(jiān)視和啟動處理操作呢?經(jīng)過多次摸索,終于成功地利用VB的API函數(shù)及系統(tǒng)的計劃任務(wù)配合實現(xiàn)在無人值守情況下服務(wù)的

        自動監(jiān)視和服務(wù)停止后的自動啟動。

        二、方法簡介

        要實現(xiàn)對停止的服務(wù)重新啟動,需要做到以下幾個功能:

        1.定時處理:利用系統(tǒng)的任務(wù)計劃指定程序定時執(zhí)行一次,執(zhí)行處理完成后直接退出程序。

        2.檢測服務(wù)狀態(tài)及重新啟動服務(wù):利用API函數(shù)構(gòu)建的類模塊實現(xiàn)對系統(tǒng)的服務(wù)狀態(tài)進(jìn)行服務(wù)狀態(tài)的檢測及停止?fàn)顟B(tài)下的再啟動操作。

        3.文件的讀寫功能:用API函數(shù)實現(xiàn)對配置文件的讀取,用write函數(shù)實現(xiàn)將啟動服務(wù)事件以追加方式寫入到歷史

        文件中。

        三、程序?qū)崿F(xiàn)

        (一)準(zhǔn)備工作

        新建一個標(biāo)準(zhǔn)工程,名稱為[服務(wù)類],在工程中創(chuàng)建一個窗體,名稱為[frmService];在工程資源管理器中新建一個模塊,名稱為[mdlService];在工程資源管理器中新建一個類模塊,名稱為[clsService]。如圖1所示。

        (二)程序代碼

        1.窗體代碼

        Option Explicit

        Private Sub Form_Load()

        iniPath = App.Path + "service.ini"

        Dim mySrv As New clsService

        Dim tService As String

        '取需處理的服務(wù)

        tService = GetFromINI("需監(jiān)控服務(wù)", "名稱", iniPath)

        mySrv.Name = tService

        '當(dāng)前服務(wù)狀態(tài),如處理停止?fàn)顟B(tài)則做啟動處理,否則退出程序

        If mySrv.GetServiceStatus = SERVICE_STOPPED Then

        '如啟動服務(wù)正常,則寫入歷史文件中備查

        If mySrv.StartNTService = 0 Then

        Open App.Path + "服務(wù)歷史.txt" For Append Shared As #1

        Write #1, Format(Now, "yyyy-mm-dd hh:mm:ss") & "-" & tService & "服務(wù)意外停止,已重新執(zhí)行了啟動。"

        Close #1

        End If

        End If

        End

        End Sub

        2.模塊代碼

        Option Explicit

        Public iniPath As String

        Public ServiceName As String

        Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, lpKeyName As Any, ByVal lpDefault As String, ByVal lpRetunedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

        Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

        '取配置文件參數(shù)

        Public Function GetFromINI(AppName As String, KeyName As String, FileName As String) As String

        Dim RetStr As String

        RetStr = String(255, Chr(0))

        GetFromINI = Left(RetStr, GetPrivateProfileString(AppName, ByVal KeyName, "", RetStr, Len(RetStr), FileName))

        End Function

        3.類模塊代碼

        Option Explicit

        Private Const SC_MANAGER_CONNECT = &H1&

        Private Const SERVICE_QUERY_STATUS = &H4&

        Private Const SERVICE_START = &H10&

        Public Enum SERVICE_START_TYPE

        SERVICE_AUTO_START = 2&

        SERVICE_DEMAND_START = 3&

        SERVICE_DISABLED = &H4

        End Enum

        Public Enum SERVICE_STATE

        SERVICE_STOPPED = &H1

        SERVICE_START_PENDING = &H2

        SERVICE_STOP_PENDING = &H3

        SERVICE_RUNNING = &H4

        SERVICE_CONTINUE_PENDING = &H5

        SERVICE_PAUSE_PENDING = &H6

        SERVICE_PAUSED = &H7

        End Enum

        Private Type SERVICE_STATUS

        dwServiceType As Long

        dwCurrentState As Long

        dwControlsAccepted As Long

        dwWin32ExitCode As Long

        dwServiceSpecificExitCode As Long

        dwCheckPoint As Long

        dwWaitHint As Long

        End Type

        Private Declare Function OpenSCManager Lib "advapi32" Alias "OpenSCManagerW" _

        (ByVal lpMachineName As Long, ByVal lpDatabaseName As Long, _

        ByVal dwDesiredAccess As Long) As Long

        Private Declare Function OpenService Lib "advapi32" Alias "OpenServiceW" _

        (ByVal hSCManager As Long, ByVal lpServiceName As Long, _

        ByVal dwDesiredAccess As Long) As Long

        Private Declare Function QueryServiceStatus Lib "advapi32" (ByVal hService _

        As Long, lpServiceStatus As SERVICE_STATUS) As Long

        Private Declare Function CloseServiceHandle Lib "advapi32" _

        (ByVal hSCObject As Long) As Long

        Private Declare Function StartService Lib "advapi32" Alias "StartServiceW" _

        (ByVal hService As Long, ByVal dwNumServiceArgs As Long, _

        ByVal lpServiceArgVectors As Long) As Long

        Private Service_Name As String

        '查詢服務(wù)運(yùn)行狀態(tài),4運(yùn)行,1停止

        Public Function GetServiceStatus() As SERVICE_STATE

        Dim hSCManager As Long, hService As Long, Status As SERVICE_STATUS

        hSCManager = OpenSCManager(0&, 0&, SC_MANAGER_CONNECT)

        If hSCManager Then

        hService = OpenService(hSCManager, StrPtr(Service_Name), SERVICE_QUERY_STATUS)

        If hService Then

        If QueryServiceStatus(hService, Status) Then

        GetServiceStatus = Status.dwCurrentState

        End If

        CloseServiceHandle hService

        End If

        CloseServiceHandle hSCManager

        End If

        End Function

        '開始服務(wù)

        Public Function StartNTService() As Long

        Dim hSCManager As Long, hService As Long

        hSCManager = OpenSCManager(0&, 0&, SC_MANAGER_CONNECT)

        If hSCManager Then

        hService = OpenService(hSCManager, StrPtr(Service_Name), SERVICE_START)

        If hService Then

        If StartService(hService, 0, 0) = 0 Then

        StartNTService = Err.LastDllError

        End If

        CloseServiceHandle hService

        Else

        StartNTService = Err.LastDllError

        End If

        CloseServiceHandle hSCManager

        Else

        StartNTService = Err.LastDllError

        End If

        End Function

        '服務(wù)名稱

        Public Property Let Name(ByVal sSrvName As String)

        Service_Name = sSrvName

        End Property

        (三)文件處理

        新建一文本文件,改名為[Service.ini],且[Service.ini]要與[服務(wù)類.exe]文件放在同一個目錄下,打開[Service.ini]文件在其中輸入如下內(nèi)容(注:此處用Alerter代替):

        [需監(jiān)控服務(wù)]

        名稱=Alerter

        (四)任務(wù)計劃處理

        在“控制面板”中的“任務(wù)計劃”中添加該可執(zhí)行文件[服務(wù)類.exe]即可,按提示設(shè)定完成后,再在新增的任務(wù)計劃中選擇“高級計劃選項”中選擇“重復(fù)任務(wù)”,指定每隔多長時間即運(yùn)行一次即可。若業(yè)務(wù)要求響應(yīng)快,時間間隔就小一些,否則就長一些,時間間隔可根據(jù)需要自定。

        四、編程后記

        通過上述程序,能自動實現(xiàn)服務(wù)意外停止后的啟動功能。該軟件在Windows XP+VB6(SP6)環(huán)境下調(diào)試運(yùn)行通運(yùn)行。

        猜你喜歡
        對策服務(wù)
        診錯因 知對策
        對策
        服務(wù)在身邊 健康每一天
        服務(wù)在身邊 健康每一天
        面對新高考的選擇、困惑及對策
        關(guān)于職工隊伍穩(wěn)定的認(rèn)識和對策
        活力(2019年22期)2019-03-16 12:47:28
        防治“老慢支”有對策
        服務(wù)在身邊 健康每一天
        服務(wù)在身邊 健康每一天
        服務(wù)在身邊 健康每一天
        亚洲天堂av在线免费播放| 国产免费av片无码永久免费| 国产伦精品一区二区三区妓女| 国产农村妇女精品一二区| 久久不见久久见免费影院www| 97色在线视频| 成人精品国产亚洲av久久| 久久狼人国产综合精品| 国产成人精品优优av| 射死你天天日| 国产精品白浆无码流出| 精品色老头老太国产精品| av在线免费观看蜜桃| 中文字幕一区二区三区日韩精品| 小12箩利洗澡无码视频网站| 亚洲AV无码乱码一区二区三区| 国产自拍av在线观看| 91在线视频在线视频| 曰韩无码无遮挡a级毛片| 亚洲国产成人久久综合下载| 人妻熟妇乱系列| 国产熟妇一区二区三区网站| 二区免费在线视频观看| 国产欧美日韩综合精品一区二区| 欧美日韩亚洲成人| 国产丝袜美腿诱惑在线观看| 新中文字幕一区二区三区| 无码av无码天堂资源网| 久久精品一品道久久精品9| 国产精品美女一区二区av| 免费a级毛片在线播放不收费| 亚洲日产精品一二三四区| 无码一区二区三区AV免费换脸| 女同另类一区二区三区| 一区二区三区免费看日本| 国产成人无码免费视频在线| 在线观看网址你懂的| 国产一区二区三区在线av| 久久精品国产只有精品96| 日韩精品成人一区二区三区| 日韩人妻无码精品久久伊人|