Wie ändere ich den Pfad zur ausführbaren Datei für einen Windows-Dienst?

55

Ich möchte den Pfad zur ausführbaren Datei für einen Dienst über die Befehlszeile ändern.

Wie kann ich das machen?

Ich möchte eine andere EXE-Datei vom Pfad dieses Dienstes zur ausführbaren Datei ausführen.

Sam
quelle
Wenn Daves Antwort nicht das ist, was Sie brauchen, dann benutzen Sie bitte den "Bearbeiten" -Link, um etwas mehr zu erklären.
Arjan

Antworten:

70

Mit dem sc configBefehl können Sie den Pfad ändern, auf den ein Dienst verweist:

SC CONFIG YourServiceName binPath= "C:\SomeDirectory\YourFile.EXE"

Dadurch wird der aufgerufene Dienst aktualisiert YourServiceNameund der Eintrag "Pfad zur ausführbaren Datei" in geändert C:\SomeDirectory\YourFile.EXE. Anschließend möchten Sie Ihren Dienst neu starten. Dies können Sie tun mit:

NET STOP YourServiceName & NET START YourServiceName
LittleBobbyTables
quelle
Wenn Sie MySQL config (.ini) auf ein anderes Laufwerk verschieben. Sie können die inneren Anführungszeichen weglassen. Wickeln Sie einfach die gesamte modifizierte Zeichenfolge in einfache doppelte Anführungszeichen. Verschob meine .ini und Datenordner auf Laufwerk D: auf Win7.
Brian Boatright
1
Was ist, wenn der Path to executableauch Anführungszeichen und andere Parameter enthält? Zum Beispiel: "C:\Program Files\CollabNet\Subversion Server\svnserve.exe" --service -r "E:\Repositories" --listen-port "3690"Ich musste leider den Regedit-Weg gehen.
James Skemp
@James - Ich bin mir ziemlich sicher, dass du diesen Charakteren entkommen kannst, aber ich muss damit herumspielen und mich bei dir melden.
LittleBobbyTables
6
Beachten Sie, dass zwischen binpath = und dem Befehl ein Leerzeichen erforderlich ist. Dumm, ich weiß.
Chloe
2
Anführungszeichen in binPath können mit einem Backslash versehen werden: \ "
gwyn
16

Sie müssen das in der Registrierung tun:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services

Navigieren Sie zum Dienst und ändern Sie den Bildnamen, um den neuen Pfad wiederzugeben

Erstellen Sie wie immer eine Sicherungskopie des Systems PRIOR.

Dave
quelle
Das hat bei mir besser geklappt. Der Service, den ich änderte, hatte einige komplexe Argumente.
John Allers
2

Sie können dies auch mit PowerShell tun:

Get-WmiObject win32_service -filter "Name='My Service'" `
    | Invoke-WmiMethod -Name Change `
    -ArgumentList @($null,$null,$null,$null,$null, `
    "C:\Program Files (x86)\My Service\NewName.EXE")

Oder:

Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\My Service" `
    -Name ImagePath -Value "C:\Program Files (x86)\My Service\NewName.EXE"
Greg Sansom
quelle
1

Die oben angegebene Antwort funktioniert hervorragend. Ich kann darauf nicht antworten, aber zusammenfassend kann man sagen, dass Sie, falls Sie Anführungszeichen oder andere Argumente im Pfad benötigen, um eine nicht zitierte Pfad-Sicherheitsanfälligkeit in der Registrierung zu beheben, wie z. B. einen Bildpfad kann von CMD aus als Administrator Folgendes tun :

(zB für C: \ Programme (x86) \ YourService \ YourProcess.exe)

SC CONFIG YourService binPath= "\"C:\Program Files (x86)\YourService\YourProcess.exe\"

Von Powershell aus können Sie als Administrator Folgendes tun :

 SC.exe CONFIG YourService binPath= --% "\"C:\Program Files (x86)\YourService\YourProcess.exe\"

Diese geben Ihnen das folgende Ergebnis:

"C:\Program Files (x86)\YourService\YourProcess.exe"

... blutige Auseinandersetzungen und entkommene Parameter sind ein Albtraum! Hoffe das hilft jemandem in der Zukunft.

Einzelgänger Sevmont
quelle
0

Sie können Ihren Pfad zur Ausführung eines Dienstes nicht direkt bearbeiten. Dafür können Sie sc Befehl verwenden,

Öffnen Sie Ihre Eingabeaufforderung als Administrator und geben Sie den folgenden Befehl ein:

SC CONFIG ServiceName binPath= "Path of your file"

Z.B:

sc config MongoDB binPath="I:\Programming\MongoDB\MongoDB\bin\mongod.exe --config I:\Programming\MongoDB\MongoDB\bin\mongod.cfg --service"
Codemaker
quelle
: - Sie sehen genauso aus wie LittleBobbyTables. Eine Lektüre von How to Answer und Tour sind immer wieder gut.
Mic84