Memodifikasi "Path to executable" dari layanan windows

253

Saya ingin mengubah jalur ke aplikasi saya, tetapi hal itu merusaknya karena layanan masih menunjuk ke lokasi lama.

Dengan pergi ke Administrative Tools > ServicesAnda dapat membuka dialog properti dan melihat Path to executable, tetapi tidak ada cara untuk mengubahnya.

Apakah ada cara pengguna dapat memodifikasi jalur layanan tanpa harus menginstal ulang aplikasi?

GenericJon
sumber

Jawaban:

245

Ada juga pendekatan ini terlihat pada SuperUser yang menggunakan scbaris perintah alih-alih memodifikasi registri:

sc config <service name> binPath= <binary path>

Catatan: spasi setelah binPath=itu penting. Anda juga dapat menanyakan konfigurasi saat ini menggunakan:

sc qc <service name>

Ini menampilkan output yang mirip dengan:

[SC] QueryServiceConfig SUKSES

SERVICE_NAME: ServiceName

    TYPE               : 10  WIN32_OWN_PROCESS
    START_TYPE         : 2   AUTO_START
    ERROR_CONTROL      : 1   NORMAL
    BINARY_PATH_NAME   : C:\Services\ServiceName
    LOAD_ORDER_GROUP   :
    TAG                : 0
    DISPLAY_NAME       : <Display name>
    DEPENDENCIES       :
    SERVICE_START_NAME : user-name@domain-name
Niall Connaughton
sumber
24
Saya akan merekomendasikan pendekatan ini atas perubahan registri langsung. Banyak jalur memerlukan string yang dikutip, yang dapat Anda masukkan sebagai berikut, misalnya dengan MS SQL Server: sc config mssqlserver binPath= "\"F:\SQL DATA\MSSQL10.MSSQLSERVER\MSSQL\Binn\sqlservr.exe\" -sMSSQLSERVER"
Marc Durdin
2
Mungkin juga sedikit lebih baik dalam skrip penerapan daripada pendekatan modifikasi registri langsung.
Niall Connaughton
Manis. Lebih bersih daripada mucking sekitar dalam reg. ** Catatan: Anda harus menutup dan membuka services.msc untuk melihat perubahannya.
yonsk
1
Jika Anda mendapatkan [SC] QueryServiceConfig FAILED 122:setelah sc qc Xpenggunaan sc qc X 1000lihat ini
raphael
13
Jika menggunakan ini dari PowerShell, pastikan Anda menggunakan sc.exe, tidak telanjangsc
fiat
292

Ini melibatkan pengeditan registri, tetapi informasi layanan dapat ditemukan di HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. Temukan layanan yang ingin Anda redirect, cari ImagePathsubkey dan ubah nilainya.

Matt McHugh
sumber
3
Meskipun akhirnya ini mengarah ke data registri, saya harus menyebutkan bahwa ada fungsi Windows API khusus untuk menangani layanan ini. Modifikasi registri langsung harus dihindari (karena Anda tidak dapat memastikan apa lagi yang Windows ubah ketika memodifikasi jalur ke exe, fe) kecuali Anda benar - benar yakin dengan apa yang Anda lakukan.
lospejos
3
@ lospejos "Saya harus menyebutkan bahwa ada fungsi Windows API khusus untuk menangani layanan" ... yang mana?
Nick M
Jika seseorang tidak melihat jalur layanan diperbarui di Services.msc, coba bunuh mmc.exe "taskkill / F / IM mmc.exe" di cmd
Drag0nKn1ght
10

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
3

Buka Jalankan (win + R), ketik "Regedit.exe", untuk membuka "Registry Editor", buka

HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services

temukan " Apache2.4 " buka folder cari " ImagePath " di sebelah kanan, buka "ImagePath" di bawah " value Data " masukkan path berikut:

"C: \ xampp \ apache \ bin \ httpd.exe" -k runservice foe XAMPP untuk yang lain menunjuk ke lokasi di mana Apache diinstal dan di dalam menemukan folder bin "C: (lokasi yang diinstal Apache) \ bin \ httpd.exe" -k runservice

Antony Joseph
sumber
0

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

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
0

Sedikit modifikasi pada jawaban @CodeMaker ini, untuk siapa pun seperti saya yang mencoba memodifikasi layanan MongoDB untuk menggunakan otentikasi.

Ketika saya melihat "Path to executable" di "Services" baris yang dieksekusi sudah berisi tanda-tanda ucapan. Jadi saya harus membuat sedikit modifikasi pada contohnya.

Untuk lebih spesifik.

  1. Ketik Layanan di Windows
  2. Temukan MongoDB (atau layanan yang ingin Anda ubah) dan buka layanan, pastikan untuk menghentikannya.
  3. Catat Nama Layanan (bukan nama tampilan)
  4. Cari dan salin "Path to executable" dan salin.

Bagi saya jalannya adalah (perhatikan tanda pidato)

"C:\Program Files\MongoDB\Server\4.2\bin\mongod.exe" --config "C:\Program Files\MongoDB\Server\4.2\bin\mongod.cfg" --service

Dalam jenis baris perintah

sc config MongoDB binPath= "<Modified string with \" to replace ">"

Dalam kasus saya ini

sc config MongoDB binPath= "\"C:\Program Files\MongoDB\Server\4.2\bin\mongod.exe\" --config \"C:\Program Files\MongoDB\Server\4.2\bin\mongod.cfg\" --service -- auth"
John Duskin
sumber
-2

Anda dapat menghapus layanan:

sc delete ServiceName

Kemudian buat kembali layanan.

Kim Wilson
sumber
3
Tidak perlu melakukan ini, setidaknya ada 3 cara yang lebih baik untuk melakukan ini
Liam
-2

Sedikit lebih dalam dengan perintah 'SC', kami dapat mengekstrak semua 'Nama Layanan' dan mendapatkan semua 'QueryServiceConfig' :)

>SC QUERY > "%computername%-services.txt" [enter]

>FIND "SERVICE_NAME: " "%computername%-services.txt" /i > "%computername%-services-name.txt" [enter]

>NOTEPAD2 "%computername%-services-name.txt" [enter]

Lakukan pengeditan NOTEPAD2 'kecil' .. Pilih 'SERVICE_NAME:', CTRL + H, klik 'Ganti Semua' Bayangkan kita bisa melakukan 'Ganti Semua' di dalam 'CMD'

Kemudian, lanjutkan dengan 'CMD' ..

>FOR /F "DELIMS= SKIP=2" %S IN ('TYPE "%computername%-services-name.txt"') DO @SC QC "%S" >> "%computername%-services-list-config.txt" [enter]

>NOTEPAD2 "%computername%-services-list-config.txt" [enter]

itu adalah 'LAYANAN di Mesin Kami' Data mentah siap untuk memberi makan 'file batch masa depan' sehingga hasilnya terlihat seperti ini di bawah ini !!!

+ -------------+-------------------------+---------------------------+---------------+--------------------------------------------------+------------------+-----+----------------+--------------+--------------------+
| SERVICE_NAME | TYPE                    | START_TYPE                | ERROR_CONTROL | BINARY_PATH_NAME                                 | LOAD_ORDER_GROUP | TAG | DISPLAY_NAME   | DEPENDENCIES | SERVICE_START_NAME |
+ -------------+-------------------------+---------------------------+---------------+--------------------------------------------------+------------------+-----+----------------+--------------+--------------------+
+ WSearch      | 10  WIN32_OWN_PROCESS   | 2   AUTO_START  (DELAYED) | 1   NORMAL    | C:\Windows\system32\SearchIndexer.exe /Embedding | none             | 0   | Windows Search | RPCSS        | LocalSystem        |
+ wuauserv     | 20  WIN32_SHARE_PROCESS | 2   AUTO_START  (DELAYED) | 1   NORMAL    | C:\Windows\system32\svchost.exe -k netsvcs       | none             | 0   | Windows Update | rpcss        | LocalSystem        |

Tapi, HTML akan lebih mudah: D

Setiap ide cemerlang untuk perbaikan dipersilakan V ^ _ ^

Rhak Kahr
sumber
Atau gunakan scyang jauh, lebih mudah dan kurang suka mengacau.
Liam