flashpixx Geschrieben 14. November 2013 Geschrieben 14. November 2013 Hallo, wie kann ich ein Java Programm als Dienst bei Windows 7/8 einrichten? Ich möchte einen Commandline Aufruf wie java -jar myJar.jar <Parameter> als Dienst beim Systemstart ausführen. Das Programm soll mit eingeschränkten Rechten laufen, so dass es einen Shell-Zugriff hat und in einem eigenen Userverzeichnis liegt (die Jar kann dann ebenfalls in dem Userverzeichnis liegen). Unter Linux lade ich mittels curl die Jar und kann über whereis prüfen wo Java liegt. Ich möchte eine Batch Datei erstellen, die mir die komplette Installation vornimmt. Ich weiss, dass Dienste mittels net start/stop gestartet werden können, aber wie richte ich das Command am besten ein? Danke Zitieren
Klotzkopp Geschrieben 14. November 2013 Geschrieben 14. November 2013 Dienste kannst du mit dem Konsolenprogramm sc einrichten. Allerdings muss ein Dienst mit dem Dienststeuerungsmanager kommunizieren, damit er richtig läuft. Es gibt aber diverse Wrapper, die das für dich tun, beispielsweise srvany aus dem Windows Server 2003 Resource Kit oder Tools wie SrvStart. Zitieren
flashpixx Geschrieben 15. November 2013 Autor Geschrieben 15. November 2013 Super danke, ich habe jetzt als ersten Schritt ein PowerShell Script geschrieben, dass mir einen User (local) im System anlegt unter dem dann der Dienst laufen soll: # Parameter sind Benutzername und Jenkins Secret Key Param([Parameter(Mandatory=$true)][string]$Username, [Parameter(Mandatory=$true)][string]$Secret) # Prüfung, ob der User aktuell Administratorrechte besitzt $usercontext = [Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent() $IsAdmin = $usercontext.IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator") if (-not($IsAdmin)) { Write-Error("Administratorrechte sind notwendig") } # Prüfe ob Java installiert ist $javafound = $false $keys = Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall $items = $keys | Foreach-Object { Get-ItemProperty $_.PsPath } foreach($item in $items) { if ($item.DisplayName -like "Java *") { $javafound = $true break } } if (!$javafound) { Write-Error("Java wurde nicht gefunden, bitte installieren!") } # Serverobjekt erzeugen, um Zugriff auf den lokalen Rechner zu erhalten [ADSI]$server = "WinNT://$(get-content env:computername)" # erzeuge User mit zufälligem Passwort, wobei der User das Passwort nicht ändern kann und es nicht abläuft, # prüfe ob User erst existiert $localUsers = $server.Children | where {$_.SchemaClassName -eq 'user'} | foreach {$_.name[0].ToString()} foreach($item in $localUsers) { if ( !$Username.CompareTo($item) ) { Write-Error("Benutzername $Username existiert bereits!") } } $chars = [Char[]]"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@$%&/()=?" $pass = ($chars | Get-Random -Count 16) -join "" #$userhome = "\\$(get-content env:computername)\Home$\$Username" $user = $server.Create( "User", $Username) $user.Put( "Description", "Jenkins Slave User Account" ) $user.SetPassword( $pass ) $user.UserFlags = 64 + 65536 $user.SetInfo() # Download des Jenkins Slaves #$file = "c:\slave.jar" #$webclient = New-Object System.Net.WebClient #$webclient.DownloadFile( "https://server/jenkins/jnlpJars/slave.jar", $file ) Mein Problem ist jetzt, dass mir der User im System zwar erzeugt wird, aber ich den Jenkins Client gerne in dem Homeverzeichnis speichern möchte. Die Frage wäre nun, wie lege ich das Homeverzeichnis passend an, ich habe nämlich keine Möglichkeit gefunden, herauszubekommen, wo die Userhomeverzeichnisse liegen (hart c:\Users einzutragen, möchte ich nicht). Dann wäre die Frage, ob das Script so in Ordnung ist, bzw wo kann ich es besser machen (ist mein erstes PowerShell Script). Wie kann ich dann den Dienststeuerungsmanager aus dem PowerShell Script verwenden bzw. wie muss das konkret aussehen? Zitieren
lilith2k3 Geschrieben 15. November 2013 Geschrieben 15. November 2013 $env:userprofile Gibt Dir das Home-Verzeichnis für den aktuellen Benutzer. Zitieren
flashpixx Geschrieben 15. November 2013 Autor Geschrieben 15. November 2013 Gibt Dir das [i]Home[/i]-Verzeichnis für den aktuellen Benutzer. Das nützt mir aber nichts, ich brauche das HomeDir des neu angelegten Users. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.