Seite 1 von 1

Problem mit dem starten eines Dienstes

Verfasst: 06.08.2010 04:20
von Sunny
Also mein Problem ist folgendes...
ich wollte mal versuchen einen Dienst zu starten.
Und zwar hab ich folgendes getan...
Ich hab erstmal ein ganz simples Programm erstellt.

Code: Alles auswählen

MessageRequester("Test","Test, ob der Dienst funktioniert.")
Danach habe ich einen Dienst erstellt.

Code: Alles auswählen

EnableExplicit

Procedure Service_Install(Name$, Title$, Program$, Description$="")
  Protected hSCManager, hServ, lResult, lpDescription.String
  hSCManager = OpenSCManager_(#Null, #Null, #SC_MANAGER_ALL_ACCESS)
  If hSCManager
    hServ = CreateService_(hSCManager, Name$, Title$, #SERVICE_ALL_ACCESS, #SERVICE_WIN32_OWN_PROCESS, #SERVICE_AUTO_START, #SERVICE_ERROR_NORMAL, Program$, #Null, #Null, #Null, #Null, #Null)
    If hServ
      If Description$
        lpDescription\s = ReplaceString(Description$, Chr(10), " ")
        lResult = ChangeServiceConfig2_(hServ, #SERVICE_CONFIG_DESCRIPTION, @lpDescription)
      EndIf
      CloseServiceHandle_(hServ)
    EndIf
    CloseServiceHandle_(hSCManager)
  EndIf
  If hServ And lResult
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure


If Service_Install("Dienst87","Titel von Dienst87","C:\Dokumente und Einstellungen\My\Eigene Dateien\Dienst87.exe","Beschreibung von Dienst87")=#True
  Debug "Service wurde erfolgreich installiert"
Else
  Debug "Service konnte nicht installiert werden"
EndIf
Die Ausgabe im Debugger war:"Service wurde erfolgreich installiert"

So... nun das Problem...
Hiermit wollte ich dann den Dienst starten:

Code: Alles auswählen

EnableExplicit

Procedure Service_Start(Name$)
  Protected hSCManager, hServ, lResult
  hSCManager = OpenSCManager_(#Null, #Null, #GENERIC_READ    | #SC_MANAGER_CONNECT)
  If hSCManager
    hServ = OpenService_(hSCManager, Name$, #GENERIC_EXECUTE)
    If hServ
      lResult = StartService_(hServ, 0, #Null)
      CloseServiceHandle_(hServ)
    EndIf
    CloseServiceHandle_(hSCManager)
  EndIf
  If hServ And lResult
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

If Service_Start("Dienst87")
  Debug "Service wurde gestartet"
Else
  Debug "Service konnte nicht gestartet werden"
EndIf
Dann gab der Debugger nach einiger Zeit "Service konnte nicht gestartet werden" aus...
Kann mir jemand erklären, warum der Service nicht gestartet werden konnte?

Re: Problem mit dem starten eines Dienstes

Verfasst: 06.08.2010 13:39
von bobobo
wenn du den installierten dienst mal mit der verwaltungskonsole versuchst zu starten
kommst du vielleich auf den fehler.
oder auch

net start "Titel von Dienst87"

in einer cmd-shell

Re: Problem mit dem starten eines Dienstes

Verfasst: 06.08.2010 13:43
von bobobo
Im Übrigen ist eine messagebox als dienst eher total unbrauchbar, weil der dienst
vermutlich nicht im Kontext des gerade angemeldeten users läuft . und du siehst als
OTTONORMALUSER nichts was im LokalenSystemKonto auf dem dortigen Desktop
abgebildet wird.

Re: Problem mit dem starten eines Dienstes

Verfasst: 06.08.2010 13:45
von Kiffi
@Sunny:

http://www.purebasic.fr/german/viewtopi ... 82#p277882

Du solltest auch den Test-MessageRequester mal weglassen, denn nach
Möglichkeit sollte ein Windows-Dienst überhaupt keinen Screen-Output
erzeugen. Wenn Du Debug-Ausgaben benötigst, schreib in eine Log-Datei.

Grüße ... Kiffi