hallo zusammen
hatte schonmal wegen service gefragt aber was mich an den .net service klassen stört ist das ich da einen installer benutzen muss oder diese installutil exe beilegen muss
ich hab danahc gleich nicht mehr weitergelesen hehe weil für ein 20 - 30 kb tool lohnt das nun wirklich nicht ich hab jetz mal angefangen mich mit der serviceapi auseinanderzusetzen aber es ist horror ;)
das handle zum servicemanager krieg ich noch und schliessen klappt auch
nur wenn ich den service mit createservice(13parameter) ,
versuche zu "installieren" , dann bekomme ich einen:
ERROR_INVALID_PARAMETER A parameter that was specified is invalid.
ich glaube es handelt sich um lpBinaryPathName oder den username unter dem das gestartet wird in der deklaration von api-viewer lp in der msdn hiess es anders aber das ist ja egal oder ??
hoffe die fehlerbeschreibung ist so ausführlich das mir wer helfen kann ;)
ich teste seit gestern
hier mein code ::
Declare Function OpenSCManager Lib "advapi32.dll" Alias "OpenSCManagerA" ( _
ByVal lpMachineName As String, ByVal lpDatabaseName As String, ByVal _
dwDesiredAccess As Integer) As IntPtr
Private Declare Function CreateService Lib "advapi32.dll" Alias _
"CreateServiceA" (ByVal hSCManager As IntPtr, ByVal lpServiceName As _
String, ByVal lpDisplayName As String, ByVal dwDesiredAccess As Integer, _
ByVal dwServiceType As Integer, ByVal dwStartType As Integer, ByVal _
dwErrorControl As Integer, ByVal lpBinaryPathName As String, ByVal _
lpLoadOrderGroup As String, ByRef lpdwTagId As Integer, ByVal _
lpDependencies As String, ByVal lp As String, ByVal lpPassword As String) _
As IntPtr
Private Declare Function CloseServiceHandle Lib "advapi32.dll" (ByVal _
hSCObject As IntPtr) As Integer
' constanten für openscmanager
Private Const SERVICES_ACTIVE_DATABASE As String = "ServicesActive"
Private Const SC_MANAGER_CONNECT As Long = &H1
Private Const SC_MANAGER_CREATE_SERVICE As Long = &H2
Private Const SC_MANAGER_ENUMERATE_SERVICE As Long = &H4
Private Const SC_MANAGER_LOCK As Long = &H8
Private Const SC_MANAGER_MODIFY_BOOT_CONFIG As Long = &H20
Private Const SC_MANAGER_QUERY_LOCK_STATUS As Long = &H10
Private Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000&
Private Const SC_MANAGER_ALL_ACCESS As Long = (STANDARD_RIGHTS_REQUIRED Or _
SC_MANAGER_CONNECT Or SC_MANAGER_CREATE_SERVICE Or _
SC_MANAGER_ENUMERATE_SERVICE Or SC_MANAGER_LOCK Or _
SC_MANAGER_QUERY_LOCK_STATUS Or SC_MANAGER_MODIFY_BOOT_CONFIG)
' constanten für createservice
Private Const SERVICE_ALL_ACCESS As Long = (STANDARD_RIGHTS_REQUIRED Or _
SERVICE_QUERY_CONFIG Or SERVICE_CHANGE_CONFIG Or SERVICE_QUERY_STATUS Or _
SERVICE_ENUMERATE_DEPENDENTS Or SERVICE_START Or SERVICE_STOP Or _
SERVICE_PAUSE_CONTINUE Or SERVICE_INTERROGATE Or _
SERVICE_USER_DEFINED_CONTROL)
Private Const SERVICE_AUTO_START As Long = &H2
Private Const SERVICE_CHANGE_CONFIG As Long = &H2
Private Const SERVICE_ENUMERATE_DEPENDENTS As Long = &H8
Private Const SERVICE_ERROR_IGNORE As Long = &H0
Private Const SERVICE_INTERROGATE As Long = &H80
Private Const SERVICE_PAUSE_CONTINUE As Long = &H40
Private Const SERVICE_QUERY_CONFIG As Long = &H1
Private Const SERVICE_QUERY_STATUS As Long = &H4
Private Const SERVICE_START As Long = &H10
Private Const SERVICE_STOP As Long = &H20
Private Const SERVICE_USER_DEFINED_CONTROL As Long = &H100
Private Const SERVICE_WIN32_OWN_PROCESS As Long = &H10
Private Declare Function GetLastError Lib "kernel32.dll" () As Long
Sub setservice()
' get handle to scmanager funktioniert
Dim hSC_Manager As IntPtr = OpenSCManager("", SERVICES_ACTIVE_DATABASE, _
SC_MANAGER_ALL_ACCESS)
' create the service hier ist das problem
Dim hService As IntPtr = CreateService(hSC_Manager, "Servicename", _
"Displayname", SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, _
SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, Chr(34) & _
Application.StartupPath & "\" & Chr(34), "", 0, "", "NT" & _
"AUTHORITY\LocalService", "")
MessageBox.Show(GetLastError)
' closeservicehandle funktioniert returnvalue = nonzero
CloseServiceHandle(hSC_Manager)
End Sub |