Kompal. Script als Dienst starten

  • Hallo Leute, habe ein kleines Problem. Ich möchte ein komp. Sricpt (exe) als Dienst auf dem Server laufen lassen. Es soll eigentlich nur ständig die Zeit in eine Datei schreiben. Das Srcript geht, aber wenn ich es mit INSTSRV als Dienst installiere wird er nicht gestartet. Es kommt keine Rückmeldung vom Progamm ans System, das der Start erfolgt ist. Ist mir ja auch klar, da ja noch nichts drin steht. Das Prog soll auch laufen, wenn niemand angemeldet ist.

    Was ich bis jetzt hier schon gefunden habe hat mir nicht wirklich geholfen. Kann mir einer sagen was alles in das Script muß, damit er an Windows eine Rückmeldung gibt.

    MfG

    Torte

    Einmal editiert, zuletzt von Torte (2. April 2008 um 22:18)

    • Offizieller Beitrag

    Hallo,

    probiers mal hiermit!

    ServiceInst.au3
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    FileInstall(".\InstSrv.exe", @ScriptDir & "\InstSrv.exe")
    FileInstall(".\SrvAny.exe", @ScriptDir & "\SrvAny.exe")

    [/autoit] [autoit][/autoit] [autoit]

    Local $szFileName, $szDesc, $szServiceName

    [/autoit] [autoit][/autoit] [autoit]

    $FrmServiceInst = GUICreate("Service-Installer", 443, 169, 213, 117)
    GUISetFont(10, 400, 0, "MS Sans Serif")
    $LblName = GUICtrlCreateLabel("Name des Dienstes:", 24, 16, 126, 20)
    $LblDesc = GUICtrlCreateLabel("Beschreibungstext:", 24, 48, 117, 20)
    $LblPath = GUICtrlCreateLabel("Pfad zum Programm:", 24, 80, 128, 20)
    $IbName = GUICtrlCreateInput("", 168, 16, 200, 21)
    $IbDesc = GUICtrlCreateInput("", 168, 48, 200, 21)
    $IbPath = GUICtrlCreateInput("", 168, 80, 200, 21)
    $BtPath = GUICtrlCreateButton("···", 392, 80, 27, 25, 0)
    GUICtrlSetFont(-1, 8, 800, 0, "Symbol")
    $BtInst = GUICtrlCreateButton("Installieren", 224, 128, 91, 25, 0)
    $BtCancel = GUICtrlCreateButton("Abbrechen", 336, 128, 91, 25, 0)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE, $BtCancel
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Case $BtPath
    $szFileName = FileOpenDialog ("Programm wählen", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", "All (*.*)", 3)
    If Not @error Then GUICtrlSetData($IbPath, $szFileName)

    [/autoit] [autoit][/autoit] [autoit]

    Case $BtInst
    $szServiceName = GUICtrlRead($IbName)
    $szDesc = GUICtrlRead($IbDesc)
    $szFileName = GUICtrlRead($IbPath)

    [/autoit] [autoit][/autoit] [autoit]

    If ($szServiceName <> "") And ($szFileName <> "") Then
    Run(@ScriptDir & "\instsrv.exe " & $szServiceName & " """ & $szFileName & """", @ScriptDir, @SW_HIDE)
    RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\" & $szServiceName, "Type", "REG_DWORD", 272)
    RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\" & $szServiceName, "Start", "REG_DWORD", 2)
    RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\" & $szServiceName, "DisplayName", "REG_SZ", $szServiceName)
    RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\" & $szServiceName, "ObjectName", "REG_SZ", "LocalSystem")
    RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\" & $szServiceName, "Description", "REG_SZ", $szDesc)
    RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\" & $szServiceName & "\Parameters", "Application", "REG_SZ", $szFileName)

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(64, "", "Service wurde installiert!")

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($IbName, "")
    GUICtrlSetData($IbDesc, "")
    GUICtrlSetData($IbPath, "")
    Else
    MsgBox(16,"Fehler", "'Name des Dienstes' und 'Pfad zum Programm' müssen angegeben werden!")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit]

    Die Programme instsrv.exe und srvany.exe aus dem Windows Server 2003 Resource Kit Tools müssen sich im gleichen Verzeichnis befinden wie das Programm.

  • PS: @Torte: Oder versuch mal RunAsSvc, kann man sich kostenlos runterladen, ich habs auch mal in den Anhang gemacht. Sehr einfache Bedienung und geht prima. Und wenn du mit Rückmeldung eine MsgBox oder GUIs überhaupt meinst, dann musst du das für den Dienst einstellen. (Strg+R -> "services.msc" eingeben -> Enter -> im Fenster deinen Dienst auswählen -> Rechtsklick -> Eigenschaften -> Auf Registerreiter "Anmelden" wechseln -> Dort den Haken in die Combobox setzen ("Datenaustausch zwischen Dienst und Desktop zulassen" oder so) oder Benutzerkonto auswählen -> Übernehmen)
    Edit: Anhang vergessen :D .

  • Danke bernd670, mit Deinem Sript scheint es zu gehen. Werde es morgen mal auf dem Server genau testen. Auf alle Fälle startet jetzt der Dienst.

    Fast2 Dir auch ein Danke, Deine Möglichkeit werde ich auch mal noch testen.

    MfG

    Torte

  • @Fast2 hat auch geklappt. Bis jetzt läuft auch alles wie es sein soll, hoffe es bleibt auch so.

    Also nochmal vielen Dank für die schnelle Hilfe.

    MfG

    Torte

  • Hallo Zusammen,

    wie kann ich das Script mit den beschriebenen Tools so als Dienst einbinden, daß es zur Ausführung den System-Account verwendet? Hintergrund ist, daß der Dienst schon laufen soll bevor sich jemand am Rechner anmeldet. Zudem hätte es den Vorteil, daß der Dienst auch dann läuft, wenn z. B. das Kennwort des Admins (oder was auch immer) geändert wurde.

    Vielen Dank vorab,
    Grüße

    TheDude

    Cuiusvis hominis est errare, nullius nisi insipientis in errore perseverare.
    [Cicero, Philippica 12,2]

    • Offizieller Beitrag

    Ich frage mich warum du einen über 3 Jahre alten Thread ausgraben und schänden mußt?
    Warum macht du keinen eigenen auf?