Bagaimana mengubah jalur ke executable untuk Layanan Windows?

55

Saya ingin mengubah jalur ke executable untuk layanan dari baris perintah.

Bagaimana saya bisa melakukan itu?

Saya ingin menjalankan .EXE lain dari jalur layanan ke executable.

sam
sumber
Jika jawaban Dave bukan yang Anda butuhkan, silakan gunakan tautan "edit" untuk menjelaskan lebih banyak?
Arjan

Jawaban:

71

Anda dapat menggunakan sc configperintah untuk mengubah jalur yang ditunjuk layanan:

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

Ini akan memperbarui layanan yang dipanggil YourServiceNamedan mengubah entri "Path to Executable" menjadi C:\SomeDirectory\YourFile.EXE. Anda akan ingin memulai kembali layanan Anda setelahnya, yang dapat Anda lakukan dengan:

NET STOP YourServiceName & NET START YourServiceName
LittleBobbyTables
sumber
Jika Anda memindahkan konfigurasi MySQL (.ini) ke drive lain. Anda dapat meninggalkan kutipan dalam. Hanya membungkus seluruh string yang dimodifikasi menjadi sepasang tanda kutip ganda. Pindahkan folder .ini dan data saya ke D: drive di Win7.
Brian Boatright
1
Bagaimana dengan saat itu Path to executablejuga berisi kutipan dan parameter lainnya? Sebagai contoh: "C:\Program Files\CollabNet\Subversion Server\svnserve.exe" --service -r "E:\Repositories" --listen-port "3690"Saya sedih harus pergi rute regedit untuk yang satu ini.
James Skemp
@ James - Saya cukup yakin Anda dapat melarikan diri dari karakter-karakter itu, tetapi saya harus bermain-main dengannya dan kembali kepada Anda.
LittleBobbyTables
6
Ingin mencatat ada ruang yang diperlukan antara binpath = dan perintah. Bodoh, aku tahu.
Chloe
2
Kutipan di binPath dapat diloloskan dengan backslash: \ "
gwyn
16

Anda harus melakukan itu di registri:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services

Arahkan ke layanan, lalu ubah nama gambar untuk mencerminkan jalur baru

Seperti biasa, buat cadangan sistem SEBELUMNYA.

dave
sumber
Ini bekerja lebih baik untuk saya. Layanan yang saya ubah memiliki beberapa argumen kompleks.
John Allers
2

Anda juga bisa melakukannya dengan PowerShell:

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")

Atau:

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

Jawaban yang diberikan di atas berfungsi dengan baik, saya tidak bisa menjawabnya, tetapi untuk menjumlahkan, jika Anda perlu memiliki kutipan atau argumen lain di jalur, katakan untuk memperbaiki kerentanan jalur yang tidak dikutip dalam registri, seperti sebuah imagepath, Anda dapat melakukan hal berikut dari CMD sebagai admin:

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

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

Anda dapat melakukan hal berikut dari PowerShell sebagai admin:

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

Ini akan memberi Anda hasil berikut:

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

... argumen berdarah dan melarikan diri parameter adalah mimpi buruk! Semoga ini bisa membantu seseorang di masa depan.

Maverick Sevmont
sumber
0

Anda tidak dapat langsung mengedit jalur Anda untuk mengeksekusi layanan. Untuk itu Anda bisa menggunakan perintah sc,

Buka prompt perintah Anda sebagai administrator, lalu ketik perintah berikut,

SC CONFIG ServiceName binPath= "Path of your file"

Misalnya:

sc config MongoDB binPath="I:\Programming\MongoDB\MongoDB\bin\mongod.exe --config I:\Programming\MongoDB\MongoDB\bin\mongod.cfg --service"
Pembuat kode
sumber
: - penampilan Anda sama dengan LittleBobbyTables, jika Anda dapat detail perbedaannya silakan lakukan. Bacaan tentang Cara Menjawab dan tur selalu bagus setiap saat.
mic84