怎样获得win2000服务中的某个服务其属性中的可执行文件的路径(用API)
例如:
服务队列中的Apache Tomcat 4.1,我要获得其属性中的可执行文件的路径。怎么获得啊?
例如:
服务队列中的Apache Tomcat 4.1,我要获得其属性中的可执行文件的路径。怎么获得啊?
解决方案 »
- VB开发usb的上位机可行性(下位机STC89C52,USB芯片pdiusbd12)
- 怎样不重复的从表中随机取一条记录的某字段值并赋给一个数组??
- 很小很小的问题
- 恳请大家帮忙解决 对SQL SERVER 查询时出现的错误:关键字 'and' 附近有语法错误。谢谢!
- 向数据库中SQL中添加记录.addnew怎么不成功呀,程序运行过程中也没有报错,就是数据库中没有添加的记录。
- 没有基础小菜鸟想学习VB 欲寻一高手指教 ——拜师
- 怎么计算地球上两点的距离
- 问各位大哥:VBA的相关资料在那里可以获得啊,
- 求mschart控件
- 如何改变电脑名字?
- 怎么在treeview控件中改背景颜色和文本颜色?
- 求救,急FtpFindFirstFile,InternetFindNextFile 两个函数取得FTP服务器上一文件的最后一次修改时间的问题?
(ByVal hSCObject As Long) As Long Private Declare Function QueryServiceStatus Lib "advapi32.dll" _
(ByVal hService As Long, _
lpServiceStatus As SERVICE_STATUS) As Long Private Declare Function OpenService Lib "advapi32.dll" _
Alias "OpenServiceA" _
(ByVal hSCManager As Long, _
ByVal lpServiceName As String, _
ByVal dwDesiredAccess As Long) As Long Private Declare Function OpenSCManager Lib "advapi32.dll" _
Alias "OpenSCManagerA" _
(ByVal lpMachineName As String, _
ByVal lpDatabaseName As String, _
ByVal dwDesiredAccess As Long) As Long Private Declare Function QueryServiceConfig Lib "advapi32.dll" _
Alias "QueryServiceConfigA" _
(ByVal hService As Long, _
lpServiceConfig As Byte, _
ByVal cbBufSize As Long, _
pcbBytesNeeded As Long) As Long Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" _
(hpvDest As Any, _
hpvSource As Any, _
ByVal cbCopy As Long) Private Declare Function lstrcpy Lib "KERNEL32" Alias "lstrcpyA" _
(ByVal lpString1 As String, _
ByVal lpString2 As Long) As Long 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 Type QUERY_SERVICE_CONFIG
dwServiceType As Long
dwStartType As Long
dwErrorControl As Long
lpBinaryPathName As Long 'String
lpLoadOrderGroup As Long ' String
dwTagId As Long
lpDependencies As Long 'String
lpServiceStartName As Long 'String
lpDisplayName As Long 'String
End Type Private Const SERVICE_STOPPED = &H1
Private Const SERVICE_START_PENDING = &H2
Private Const SERVICE_STOP_PENDING = &H3
Private Const SERVICE_RUNNING = &H4
Private Const SERVICE_CONTINUE_PENDING = &H5
Private Const SERVICE_PAUSE_PENDING = &H6
Private Const SERVICE_PAUSED = &H7
Private Const SERVICE_ACCEPT_STOP = &H1
Private Const SERVICE_ACCEPT_PAUSE_CONTINUE = &H2
Private Const SERVICE_ACCEPT_SHUTDOWN = &H4
Private Const SC_MANAGER_CONNECT = &H1
Private Const SERVICE_INTERROGATE = &H80
Private Const GENERIC_READ = &H80000000
Private Const ERROR_INSUFFICIENT_BUFFER = 122 Private Sub Command1_Click()
Dim hSCM As Long
Dim hSVC As Long
Dim pSTATUS As SERVICE_STATUS
Dim udtConfig As QUERY_SERVICE_CONFIG
Dim lRet As Long
Dim lBytesNeeded As Long
Dim sTemp As String
Dim pFileName As Long List1.Clear ' Open The Service Control Manager
'
hSCM = OpenSCManager(vbNullString, vbNullString, SC_MANAGER_CONNECT)
If hSCM = 0 Then
MsgBox "Error - " & Err.LastDllError
End If ' Open the specific Service to obtain a handle
'
hSVC = OpenService(hSCM, Trim(Text1.Text), GENERIC_READ)
If hSVC = 0 Then
MsgBox "Error - " & Err.LastDllError
GoTo CloseHandles
End If ' Fill the Service Status Structure
'
lRet = QueryServiceStatus(hSVC, pSTATUS)
If lRet = 0 Then
MsgBox "Error - " & Err.LastDllError
GoTo CloseHandles
End If ' Report the Current State
'
Select Case pSTATUS.dwCurrentState
Case SERVICE_STOPPED
sTemp = "The Service is Stopped"
Case SERVICE_START_PENDING
sTemp = "The Service Being Started"
Case SERVICE_STOP_PENDING
sTemp = "The Service is in the process of being stopped"
Case SERVICE_RUNNING
sTemp = "The Service is Running"
Case SERVICE_CONTINUE_PENDING
sTemp = "The Service is in the process of being Continued"
Case SERVICE_PAUSE_PENDING
sTemp = "The Service is in the process of being Paused"
Case SERVICE_PAUSED
sTemp = "The Service is Paused"
Case SERVICE_ACCEPT_STOP
sTemp = "The Service is Stopped"
Case SERVICE_ACCEPT_PAUSE_CONTINUE
sTemp = "The Service is "
Case SERVICE_ACCEPT_SHUTDOWN
sTemp = "The Service is being Shutdown"
End Select List1.AddItem "Service Status : " & sTemp ' Call QueryServiceConfig with 1 byte buffer to generate an error
' that returns the size of a buffer we need.
'
ReDim abConfig(0) As Byte
lRet = QueryServiceConfig(hSVC, abConfig(0), 0&, lBytesNeeded)
If lRet = 0 And Err.LastDllError <> ERROR_INSUFFICIENT_BUFFER Then
MsgBox "Error - " & Err.LastDllError
End If ' Redim our byte array to the size necessary and call
' QueryServiceConfig again
'
ReDim abConfig(lBytesNeeded) As Byte
lRet = QueryServiceConfig(hSVC, abConfig(0), lBytesNeeded, _
lBytesNeeded)
If lRet = 0 Then
MsgBox "Error - " & Err.LastDllError
GoTo CloseHandles
End If ' Fill our Service Config User Defined Type.
'
CopyMemory udtConfig, abConfig(0), Len(udtConfig) List1.AddItem "Service Type: " & udtConfig.dwServiceType
List1.AddItem "Service Start Type: " & udtConfig.dwStartType
List1.AddItem "Service Error Control: " & udtConfig.dwErrorControl sTemp = Space(255) ' Now use the pointer obtained to copy the path into the temporary
' String Variable
'
lRet = lstrcpy(sTemp, udtConfig.lpBinaryPathName)
List1.AddItem "Service Binary Path: " & sTemp lRet = lstrcpy(sTemp, udtConfig.lpDependencies)
List1.AddItem "Service Dependencies: " & sTemp lRet = lstrcpy(sTemp, udtConfig.lpDisplayName)
List1.AddItem "Service DisplayName: " & sTemp lRet = lstrcpy(sTemp, udtConfig.lpLoadOrderGroup)
List1.AddItem "Service LoadOrderGroup: " & sTemp lRet = lstrcpy(sTemp, udtConfig.lpServiceStartName)
List1.AddItem "Service Start Name: " & sTemp CloseHandles:
' Close the Handle to the Service
'
CloseServiceHandle (hSVC) ' Close the Handle to the Service Control Manager
'
CloseServiceHandle (hSCM) End Sub
Run the sample and type the Service Name in the Text box. For this example type in "Eventlog" without the quotes. NOTE: This is not necessarily the same as the "Display Name" that shows in the Services applet of the Control Panel. The Service names registered on the system can be located under the following registry key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
Click the CommandButton. The results displayed in the list box should be similar to the following: Service Status : The Service is Running
Service Type: 32
Service Start Type: 2
Service Error Control: 1
Service Binary Path: C:\WINNT\system32\services.exe
Service Dependencies: Service DisplayName: EventLog
Service LoadOrderGroup: Event log
Service Start Name: LocalSystem