各位大虾:
小弟在座一个安装程序,希望可以把已有的服务停止,但是我不知道
如何得到 服务列表,以便搜索服务,并根据他们的状态去停止 或重新启动他们希望大家帮忙啊 十万火急 最后有实例
小弟在座一个安装程序,希望可以把已有的服务停止,但是我不知道
如何得到 服务列表,以便搜索服务,并根据他们的状态去停止 或重新启动他们希望大家帮忙啊 十万火急 最后有实例
解决方案 »
- 如何提高处理数据量很大文件的效率??
- 关于TreeView如何与数据库联系的问题,大虾们请进!!!!!^@^
- 怎样用编程取得ftp上的目录?
- vsprinter如何把vsflexgrid打印预览出来
- 关于picturebox的问题(想让图片逐渐显示出来,但是不能被别的窗口刷掉)
- 请问用treeview怎样实现数据库的连接?点击看具体需求,谢谢!!高分请教!!
- 如何在vb程序中调用.bat文件!!
- 请教高手_ADO和Grid控件_我将两个控件的.ocx放入了system32可以打开生成的exe文件但看不到数据
- 版主,偶提个建议--
- 求助,用vba代码控制鼠标,用到mouseeventf_absolute在win10里不好用了是为什么呢
- 无法控制activereport的打印长度,高手请进
- 请问如何手动注册dll文件
dim tmpstr as string
shell "C:\winnt\system32\cmd.exe /c net start>C:\services.list",vbhidedo until dir("C:\services.list")<>""
open "C:\services.list" for input as #1
do while not eof(1)
line input #1,tmpstr
if trim(tmpstr)<>"" then
list1.additem tmpstr
end if
loop
kill "C:\services.list"
close #1
doevents
loop
end subprivate list1_click()
if list1.listindex<>-1 then
shell "net stop " & list1.list(list1.listindex) ,hide
end if
end sub
net start命令获取已启动服务列表,并写入文本文件,然后读出来。再用
net start service name来启动或 net stop停止服务。
nik,你贴一下OpenService的例子,这个我不会。:)Private Sub Command1_Click()
Dim tmpstr As String
List1.Clear
Shell "C:\winnt\system32\cmd.exe /c net start>C:\services.list", vbHideDo
If Dir("C:\services.list") <> "" Then Exit Do
DoEvents
LoopOpen "C:\services.list" For Input As #1
Do While Not EOF(1)
Line Input #1, tmpstr
If Trim(tmpstr) <> "" Then
List1.AddItem Trim(tmpstr)
End If
Loop
Close #1If List1.ListCount > 2 Then
List1.RemoveItem 0
List1.RemoveItem List1.ListCount - 1
End If
Do Until Dir("C:\services.list") = ""
On Error Resume Next
Kill "C:\services.list"
DoEvents
Loop
End SubPrivate Sub List1_DBlClick()
If List1.ListIndex <> -1 Then
If MsgBox("Stop Service: " & List1.List(List1.ListIndex) & " ?", vbQuestion + vbYesNo, "Question") = vbYes Then
Shell "net stop """ & List1.List(List1.ListIndex) & """", vbHide
End If
End If
End Sub
Public Const ERROR_MORE_DATA = 234
Public Const SERVICE_ACTIVE = &H1
Public Const SERVICE_INACTIVE = &H2
Public Const SC_MANAGER_ENUMERATE_SERVICE = &H4
Public Const SERVICE_WIN32_OWN_PROCESS As Long = &H10
Public Const SERVICE_WIN32_SHARE_PROCESS As Long = &H20
Public Const SERVICE_WIN32 As Long = SERVICE_WIN32_OWN_PROCESS + SERVICE_WIN32_SHARE_PROCESS
Public 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
Public Type ENUM_SERVICE_STATUS
lpServiceName As Long
lpDisplayName As Long
ServiceStatus As SERVICE_STATUS
End Type
Public Declare Function OpenSCManager Lib "advapi32.dll" Alias "OpenSCManagerA" (ByVal lpMachineName As String, ByVal lpDatabaseName As String, ByVal dwDesiredAccess As Long) As Long
Public Declare Function EnumServicesStatus Lib "advapi32.dll" Alias "EnumServicesStatusA" (ByVal hSCManager As Long, ByVal dwServiceType As Long, ByVal dwServiceState As Long, lpServices As Any, ByVal cbBufSize As Long, pcbBytesNeeded As Long, lpServicesReturned As Long, lpResumeHandle As Long) As Long
Public Declare Function CloseServiceHandle Lib "advapi32.dll" (ByVal hSCObject As Long) As Long
Public Declare Function lstrcpy Lib "kernel32.dll" Alias "lstrcpyA" (szDest As String, szcSource As Long) As Long
Public Function StripTerminator(sInput As String) As String
Dim ZeroPos As Integer
ZeroPos = InStr(1, sInput, Chr$(0))
If ZeroPos > 0 Then
StripTerminator = Left$(sInput, ZeroPos - 1)
Else
StripTerminator = sInput
End If
End Function在窗体里代码(窗体内置一list1控件):
Private Sub Form_Load()
Dim hSCM As Long, lpEnumServiceStatus() As ENUM_SERVICE_STATUS, lngServiceStatusInfoBuffer As Long
Dim strServiceName As String * 250, lngBytesNeeded As Long, lngServicesReturned As Long
Dim hNextUnreadEntry As Long, lngStructsNeeded As Long, lngResult As Long, i As Long
'Open connection to Service Control Manager.
hSCM = OpenSCManager(vbNullString, vbNullString, SC_MANAGER_ENUMERATE_SERVICE)
If hSCM = 0 Then
MsgBox "OpenSCManager failed. LastDllError = " & CStr(Err.LastDllError)
Exit Sub
End If
'Get buffer size (bytes) without passing a buffer
'and make sure starts at 0th entry.
hNextUnreadEntry = 0
lngResult = EnumServicesStatus(hSCM, SERVICE_WIN32, SERVICE_ACTIVE Or SERVICE_INACTIVE, ByVal &H0, &H0, lngBytesNeeded, lngServicesReturned, hNextUnreadEntry)
'We should receive MORE_DATA error.
If Not Err.LastDllError = ERROR_MORE_DATA Then
MsgBox "LastDLLError = " & CStr(Err.LastDllError)
Exit Sub
End If
'Calculate the number of structures needed.
lngStructsNeeded = lngBytesNeeded / Len(lpEnumServiceStatus(0)) + 1
'Redimension the array according to our calculation.
ReDim lpEnumServiceStatus(lngStructsNeeded - 1)
'Get buffer size in bytes.
lngServiceStatusInfoBuffer = lngStructsNeeded * Len(lpEnumServiceStatus(0))
'Get services information starting entry 0.
hNextUnreadEntry = 0
lngResult = EnumServicesStatus(hSCM, SERVICE_WIN32, SERVICE_ACTIVE Or SERVICE_INACTIVE, lpEnumServiceStatus(0), lngServiceStatusInfoBuffer, lngBytesNeeded, lngServicesReturned, hNextUnreadEntry)
If lngResult = 0 Then
MsgBox "EnumServicesStatus failed. LastDllError = " & CStr(Err.LastDllError)
Exit Sub
End If
'Get the strings and display them.
'Me.AutoRedraw = True
'Me.Print "All registered services:" + vbCrLf
Dim name1 As String
For i = 0 To lngServicesReturned - 1
lngResult = lstrcpy(ByVal strServiceName, ByVal lpEnumServiceStatus(i).lpServiceName)
name1 = StripTerminator(strServiceName)
lngResult = lstrcpy(ByVal strServiceName, ByVal lpEnumServiceStatus(i).lpDisplayName)
List1.AddItem "服务名:" + name1 + " 显示名: " + StripTerminator(strServiceName)
Next i
'Clean up.
CloseServiceHandle (hSCM)
End Sub自已判断状态(currentstate)后,用下面的api来启动服务:
Public Declare Function OpenService Lib "advapi32.dll" Alias "OpenServiceA" (ByVal hSCManager As Long, ByVal lpServiceName As String, ByVal dwDesiredAccess As Long) As Long