Benutzer-Werkzeuge

Webseiten-Werkzeuge


windows:windows_run_as_service

Programme unter Windows 2008 / Windows 10 als Service starten

Leider bittet Microsoft keinen einfaches Tool an, ein beliebiges Programm als Service zu starten.

In den Tests hat sich zum Schluss das Tool NSSM - the Non-Sucking Service Manager am besten und einfachsten herausgestellt.

Ziel ist es, ein PowerShell Script beim Start des Servers auszuführen.

Dies ließe sich eigentliche besser über den Windows Scheduler durchführen, allerdings muss VOR diesem Script der Oracle Service gestartet werden und der läuft als Dienst.

Um daher die Abhängigkeit darstellen zu können, das ganze als Service angelegt.

Hintergrund Oracle Instance für Standby im Mount Modus öffnen

NSSM - the Non-Sucking Service Manager

Download über:

Installation:

  • Auspacken nach D:\tools

Starten einer administrativen Powerschell Session und Aufruf der Software:

cd D:\tools\nssm-2.24\win64
 
.\nssm.exe install

Über diese Oberfläche die Parameter des Service angeben:

NSSM  - the Non-Sucking Service Manager

Parameter:

  • Path ⇒ %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
  • Startup Dir ⇒ D:\oracle\autostart
  • Paramter ⇒ -ExecutionPolicy Bypass -File D:\oracle\autostart\mount_database.ps1

Das Powershell Script für den Start der DB im Mount Modus siehe auch hier ⇒ https://orapowershell.codeplex.com/SourceControl/latest#ps/autoStart/mount_database.ps1

Unter dem Reiter Log On den DB User eintragen:

  • Log on as this account - Owner der DB

Das das Script ja nach Start der DB fertig ist und der Service sich nicht ständig neu starten soll: Unter dem Reiter Exit Actions:

  • Restart „No action (srvany compatible)
  •  NSSM Restart option

Test ob der Service eingerichtet ist:

C:\Windows\System32\sc.exe query "ORACLE_MOUNT"

Den Oracle Service auf „Manuel“ setzen, der Oracle Service wird auch von dem Script mit gestartet.

Hat dann zum Schluss aber nur funktioniert wenn der DB Owner als Owner des Service eingetragen wurden!

Quellen

RunAsSVC

Download über http://www.pirmasoft.de/cms/freeware/runassvc

Ein erster test war für meine Problemstellung allerdings nicht erfolgreich.


"srvany.exe" aus dem Resource Kit

Aus einem Microsoft Forum:

  • At the time of this posting, there is no Windows Server 2008 Resource Kit Tools, so get the „srvany.exe “ from the „Windows Server 2003 Resource Kit Tools “ and copy it to a suitable location on your Win2008 server (e.g. C:\Windows\System32\ ).
  • Use „sc “ to create a new service that launches „srvany “ (e.g. sc create MyService binPath= C:\Windows\System32\srvany.exe DisplayName= „My Custom Service“ )
  • Using RegEdit : create a „Parameters “ key for your service (e.g. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService\Paramaters\ )
  • Using RegEdit : within the newly created „Parameters “ key , create a string value called „Application “ and unter the full path to the application you are wanting to run as a service. (No quotes required.)

"SRVSTART.EXE - Windows NT Service Execution"

Über das freie Werkzeug „SRVSTART.EXE - Windows NT Service Execution“ von http://www.rozanski.org.uk/services lässt sich sehr gut ein Programm als Service einrichten.

Download der Software von hier: http://rozanski.org.uk/software

Einrichten am Beispiel eines speziellen Start Scripts für eine Oracle Data Guard Umgebung:

  • Datei srvstart_run.v110.zip auspacken nach d:\oracle\autostart
  • Init Datei mount_database.ini für den Start anlegen
    [ORACLE_MOUNT]
    startup="%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File D:\oracle\autostart\mount_database.ps1"
    startup_dir="D:\oracle\autostart\"
    debug_out=D:\oracle\autostart\oracle_mount_srv.log
    shutdown_method=kill
    auto_restart=n
  • Eigentliche Powershell Datei mount_database.ps1 anlegen mit
    $stream = [System.IO.StreamWriter] "d:\debug.out"
    
    $log="LOG -- Start the the database"
    
    $stream.WriteLine($log)
    
    # do some work
    
    $stream.close()
    
  • Service anlegen mit (in einer administrativen Powershell Session!)
    cd D:\oracle\autostart
    .\srvstart install ORACLE_MOUNT -c D:\oracle\autostart\mount_database.ini
    
    #alternativ:
    
    C:\Windows\System32\sc.exe CREATE ORACLE_MOUNT DisplayName= "ORACLE_MOUNT" binPath= "D:\oracle\autoStart\srvstart.exe ORACLE_MOUNT -c D:\oracle\autoStart\mount_database.ini" start= auto
    

Nun den Service starten über:

C:\Windows\System32\sc.exe start "ORACLE_MOUNT"

Service bei Bedarf wieder löschen

C:\Windows\System32\sc.exe delete ORACLE_MOUNT

# bzw.

./srvstart remove ORACLE_MOUNT

Fehler:

SRVSTART: 2015/01/31 16:56:45 ERROR severity=0 thread=2636 source=D:\Home\Author\srvstart.v110\dll\CmdRunner.cpp line=1334 text=createProcess(): failed to start process '"C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File D:\oracle\autostart\mount_database.ps1"', error=267
SRVSTART: 2015/01/31 16:56:45 ERROR severity=0 thread=2636 source=D:\Home\Author\srvstart.v110\dll\CmdRunner.cpp line=1336 text=Exception 1 in Class '' method 'createProcess()'

Noch am Suchen, leider noch kein Erfolg, scheint doch nicht mehr zu funktionieren …. kann aber auch an Berechtigungen liegen? Dienst als User anmelden hilft evtl. weiter.

siehe auch:


MS Windows "sc" verwenden

Funktioniert aber nur mit Programmen die die Service Schnittstelle implementiert haben!

Mit dem Programm „sc“ kann unter Windows 2008 ein Programm als Service eingerichtet werden.

Ablauf:

  • Pfad zum Programm ermitteln (je nach dem wieviele Leer und Sonderzeichen enthalten sind, Kurzform verwenden (Anzeige mit Dir /x))
  • Service anlegen
  • Service Eigenschaften anlegen

Beispiel:

Anlegen

!Auf das Leerzeichen nach dem “=„ achten!

dir /x d:\programme (x86)\MY prog\listener.exe
 
rem Pfad merken
 
sc.exe create GPIListenerService binpath= "d:\PROGRAM~2\MYPOR~\listener.exe" displayName= "GPIListenerService " error= ignore start= auto type= own 
 
rem testen
 
sc qc GPIListenerService
Fehler

Ein möglicher Fehler ist der „error message 1053: The service did not respond to the start or control request in a timely fashion.“, oft liegt hier das Problem an Berechtigungen.

Ist das Programm aber nicht für einen Run as Service geeignet und antwortet nicht entsprechend schnell den aufrufenen Service wrapper von Windows, kann SC so einfach nicht verwendet werden.

Alternativ kann hier srvany.exe von Windows 2003 Resourcekit helfen, srvany dann wiederum mit sc einbinden.

siehe Anleitung hier: srvany.exe im MS Forum

Quellen

Alternativen

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
"Autor: Gunther Pipperr"
windows/windows_run_as_service.txt · Zuletzt geändert: 2015/08/26 11:45 von Gunther Pippèrr