Bagaimana cara menghapus Layanan Windows ketika tidak ada yang dapat dieksekusi karena tertinggal di sistem?

166

Bagaimana cara menghapus Layanan Windows ketika tidak ada yang dapat dieksekusi karena dibiarkan pada sistem? Saya tidak bisa menjalankan installutil -ukarena tidak ada yang dapat dieksekusi yang tersisa di sistem. Saya masih bisa melihat entri untuk layanan di konsol Layanan.

Alasan untuk keadaan ini mungkin karena masalah dalam paket msi yang tidak menghapus layanan dengan benar, tetapi bagaimana cara memperbaikinya setelah layanan berada dalam keadaan ini?

Magnus Lindhe
sumber

Jawaban:

325

Anda harus dapat menghapus instalannya menggunakan sc.exe (saya pikir itu termasuk dalam Windows Resource Kit) dengan menjalankan yang berikut ini di prompt perintah "administrator":

sc.exe delete <service name>

di mana <service name>nama layanan itu sendiri seperti yang Anda lihat di konsol manajemen layanan, bukan dari exe.

Anda dapat menemukan sc.exe di folder Sistem dan perlu hak administratif untuk dijalankan. Informasi lebih lanjut dalam artikel Microsoft KB ini .

Atau, Anda dapat langsung memanggil api DeleteService () . Cara itu sedikit lebih rumit, karena Anda perlu menangani manajer kontrol layanan melalui OpenSCManager () dan seterusnya, tetapi di sisi lain itu memberi Anda lebih banyak kontrol atas apa yang terjadi.

Treb
sumber
Itu melakukan persis apa yang saya inginkan dan menghapus layanan dari registri. Itu tidak muncul di konsol Layanan lagi. Terima kasih!
Magnus Lindhe
Saya mendapat "Akses ditolak." Apa yang harus dilakukan selanjutnya?
Nick
4
Hanya catatan untuk siapa pun yang mencoba menjalankan perintah dalam Metode 1 di PowerShell: sc bukan untuk berkomunikasi dengan manajer kontrol layanan. Ini adalah perintah Set-Content. Gunakan sc.exe sebagai gantinya.
Yasser Sinjab
1
Jika Anda mendapatkan kesalahan 1072, pastikan Anda tidak memiliki panel kontrol layanan terbuka (lihat pertanyaan lain ini )
Giles
Saya mendapatkan kesalahan di bawah ini. [SC] OpenService GAGAL 1060: Layanan yang ditentukan tidak ada sebagai layanan yang diinstal. Kemudian mencoba hal yang sama dengan power shell dan berhasil!
crazydan
24

Hapus Layanan Windows melalui Registry

Sangat mudah untuk menghapus layanan dari registri jika Anda tahu jalan yang benar. Inilah cara saya melakukan itu:

  1. Jalankan Regedit atau Regedt32

  2. Buka entri registri "HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Services"

  3. Cari layanan yang ingin Anda hapus dan hapus. Anda dapat melihat tombol untuk mengetahui file apa yang digunakan layanan dan menghapusnya juga (jika perlu).

Hapus Layanan Windows melalui Jendela Perintah

Atau, Anda juga dapat menggunakan prompt perintah dan menghapus layanan menggunakan perintah berikut:

hapus sc

Anda juga dapat membuat layanan dengan menggunakan perintah berikut

sc buat "MorganTechService" binpath = "C: \ Program Files \ MorganTechSPace \ myservice.exe"

Catatan: Anda mungkin harus me-reboot sistem untuk mendapatkan daftar yang diperbarui di manajer layanan.

kombsh
sumber
3
Apakah melakukannya dengan cara registri aman? Apakah "hasil akhir" cara registri sama dengan "hasil akhir" sc delete?
Pacerier
5
Tidak, saya hanya mencoba menghapus layanan dari regedit secara langsung. Akibatnya, sekarang entri layanan yang saya inginkan dihapus tetap dalam Layanan, sedangkan Deskripsi layanan menunjukkan: "<Gagal Membaca Deskripsi. Kode Kesalahan: 2>"
GJ.
11

ditemukan di sini

Saya baru saja mencoba di windows XP, ternyata berhasil

komputer lokal: sc \\. hapus [nama layanan]

  Deleting services in Windows Server 2003

  We can use sc.exe in the Windows Server 2003 to control services, create services and delete services. Since some people thought they must directly modify the registry to delete a service, I would like to share how to use sc.exe to delete a service without directly modifying the registry so that decreased the possibility for system failures.

  To delete a service: 

  Click “start“ - “run“, and then enter “cmd“ to open Microsoft Command Console.

  Enter command:

  sc servername delete servicename

  For instance, sc \\dc delete myservice

  (Note: In this example, dc is my Domain Controller Server name, which is not the local machine, myservice is the name of the service I want to delete on the DC server.)

  Below is the official help of all sc functions:

  DESCRIPTION:
    SC is a command line program used for communicating with the
    NT Service Controller and services. 
  USAGE:
          sc
Fredou
sumber
10

Berikut ini skrip powershell untuk menghapus layanan foo

$foo= Get-WmiObject -Class Win32_Service -Filter "Name='foo'"
$foo.delete()
Nima Soroush
sumber
9

Cara favorit saya untuk melakukan ini adalah dengan menggunakan aplikasi Sysinternals Autoruns . Cukup pilih layanan dan tekan hapus.

Thomas Bratt
sumber
Kenapa tidak pakai saja sc delete?
Pacerier
3

Buat salinan yang dapat dieksekusi dari layanan yang sama dan tempel di jalur yang sama dari layanan yang ada dan kemudian copot.

Samiksha
sumber
Itu saran yang bagus. Jika itu tidak berhasil, ia mungkin perlu menginstal ulang, jalankan installutil -u, dan kemudian uninstall
wcm
apakah kita harus membuat salinan exe yang sama atau mengganti nama file lain apa pun akan bekerja dengan baik?
Imran Rizvi
@Samiksha, saya pikir dia bilang dia tidak punya " salinan executable "?
Pacerier