“Belirtilen hizmet silinmek üzere işaretlendi” hatası nasıl çözülür


585

Bir Windows Hizmeti'ni kaldırmaya çalışıyorum sc delete <service name>ve aşağıdaki hatayla karşılaşıyorum:

[SC] DeleteService FAILED 1072:

Belirtilen hizmet silinmek üzere işaretlendi.

Zaten ne yaptım:

Sorun devam ediyor.

Bir sonraki adım nedir?


4
Yeniden başlatma normalde kalan durumları temizlemelidir.
Damien_The_Unbeliever

14
Biliyorum. Ama daha az radikal bir çözüm düşündüm. Günde otuz kez yeniden başlatmak benim durumumda kabul edilebilir bir çözüm olmayacak.
Arseni Mourzenko

54
"Bu hizmetleri neden düzenli olarak siliyorsunuz?" : Bir Windows hizmeti yazıyorum. Her derlendiğinde yeniden başlatılması gerekir. "Yine de günde 30 kez kayıt defterinde hacklemek kabul edilebilir mi?" : tamamen. Bir anahtarın kayıt defterinden kaldırılması beni her şeyi kaydetmeye, açılan her uygulamayı kapatmaya, bir dakika beklemeye ve sonra her şeyi yeniden açmaya zorlamıyor.
Arseni Mourzenko

46
Windows hizmetleri yazdım. Kaydı gerçekleştiren gerçek kodu değiştirmediğiniz sürece, her derleme yaptığınızda kodu kaldırmanıza ve yeniden yüklemenize gerek yoktur. Yol hala aynı olduğu sürece, daha eski kayıt bilgileri geçerli olacaktır.
Damien_The_Unbeliever

4
@NickTurner - herhangi bir hata raporuna bağlantı? Bahsettiğiniz hata ne olursa olsun karşılaşmadım. Ve ben bir MSI büyük ihtimal bina ve (en görünmeden bu 5 yaşındaki sorunda bağlamı olmak) gerçekleştirirler dev makinede hizmetlerini çalışan bahsediyoruz beri ilgilenmektedir emin nasıl değilim
Damien_The_Unbeliever

Yanıtlar:


1244

Hizmetin "silinmek üzere işaretlendi" seçeneğinde kalmasına yol açan çeşitli nedenler olabilir.

  1. SysInternals'ın İşlem Gezgini açılır . Kapatılması, servisin otomatik olarak kaldırılmasına yol açmalıdır.

  2. Görev Yöneticisi açılır .

  3. Microsoft Yönetim Konsolu (MMC) açılır . Tüm örneklerin kapalı olduğundan emin olmak için çalıştırın taskkill /F /IM mmc.exe.

  4. Hizmetler konsolu açılır . Hizmetler konsolu MMC tarafından barındırıldığı için bu önceki nokta ile aynıdır.

  5. Olay Görüntüleyicisi açılır . Yine, bu üçüncü nokta ile aynıdır.

  6. HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ {hizmet adı} anahtarı var .

  7. Başka biri sunucuda oturum açtı ve daha önce belirtilen uygulamalardan birini açtı.

  8. Hizmette hata ayıklamak için kullanılan bir Visual Studio örneği açıktır.


9
Görev yöneticisi de aynı şeyi yapıyor. Ve aşağıda belirtildiği gibi, Hizmetler konsolunu açık bırakmak da buna neden olabilir.
CodingBarfield

4
... ve tüm bunları kapatmak hala yardımcı olmuyorsa ve hizmeti "silme işareti olarak işaretlenmiş" olarak görüyorsanız, tam yeniden başlatma yerine basit oturum kapatma yapın. bana birkaç kez yardımcı oldu.
Nedko

2
Bir ortak iş akışı: hain meslektaşlarınız da uzak sunucuya giriş yapmış ve hepsinin açık bir şeyleri var ...
Chris O

72
Hizmet konsolunu kapatmak benim için bu sorunu çözdü! İşlemim şuydu : VS2012 x64 Yerel Araçlar Komut İstemi'nde -> Hizmetin exectuable ile dizine git -> installutil / u servicename.exe (eski hizmeti kaldırmak için) -> yeni yerleşik hizmet exe kopyala - > installutil servicename.exe (güncellenmiş hizmeti yüklemek için) . Genelde herhangi bir sorun olmadan hemen kaldırabilir ve yeniden yükleyebilirim. Rastgele yapamayana kadar. Hizmet konsolunu kapatmak sorunu çözdü. Bahşiş için teşekkürler!
thehelix

17
Process Explorer bence burada en büyüğü. Kalınlaştırmanızı ve / veya listenin en üstüne taşımanızı öneririm.
Coxy

223

Bunun nedeni Hizmetler konsolunu açık bırakmanız olabilir. Windows, kapatılana kadar hizmeti gerçekten silmez.


3
Sorumda belirttiğim gibi, testler sırasında “Microsoft Yönetim Konsolu kapalı”.
Arseni Mourzenko

25
Benim durumumda Hizmetler konsolu sorun oldu. En kısa sürede kapatıp yeniden açar açmaz silinen hizmetler gitti.
Farrukh Najmi

3
Pencereyi açık tutmanın böyle olduğuna inanmak zor ... Teşekkürler!
Karol Tyl

Garip bir şekilde F5'e basmanın, servis kaldırıldığında listeyi yenileyeceği pek çok durum olmasına rağmen, bu da benim için çalıştı.
Steve Smith


50

Aynı sorunu yaşadım, sonunda servis sürecini öldürmeye karar verdim.

bunun için aşağıdaki adımları deneyin:

  • işlem kimliği ile hizmet al

    sc queryex <service name>

  • öldürme süreci

    taskkill /F /PID <Service PID>


2
PID'im 0 olduğundan öldürmemem daha iyi olurdu!
soymak

Bunun için hizmeti kaldırabilirsiniz, aşağıdaki adımları uygulayın: 1- cmd'yi çalıştırın 2- hizmetinizin .exe dosyasına yönünü değiştirin, 3- installutil / u <yourfilename.exe> ​​komutunu bulun
Ali Sadri

Sc queryex için +1 Hata ayıklayıcı eklemek istiyorsanız PID almak için kullanabilirsiniz
Paul McCarthy

44

Benim durumumda kapattıktan sonra çalıştı Services. Olmadığını kontrol edin Services.mscevet kapatın ve bulunan hizmetinin herhangi sürecini kontrol ederseniz açıktır Task Manager.


13

Bu, hizmetin services.msc dosyasında hala devre dışı olarak listelendiği anlamına gelir. Sadece services.msc dosyasını kapatın ve yönetici olarak tekrar açın ... Hizmet listelenmeyecektir. Şimdi, şu komutu kullanarak hizmeti yükleyin,

installutil "hizmet yolu"


11

Kayıt defteri anahtarlarını yukarıda önerildiği gibi silmek, hizmetimi durdurma durumunda takılı bıraktı. Aşağıdaki prosedür benim için çalıştı:

görev yöneticisini aç> hizmetler sekmesini seçin> hizmeti seçin> sağ tıklayın ve "işleme git" i seçin> işleme sağ tıklayın ve İşlemi sonlandır'ı seçin

Bundan sonra hizmet gitmiş olmalı


7

Kontrol etmek için bir şey daha keşfettik - Görev yöneticisine bakın - diğer kullanıcılar bu kutuya bağlıysa, 'bağlantı kesilmiş' olsalar bile, nihayet silmek için hizmeti almak için oturumlarını kapatmanız gerekir.


4
Gereksiz. Herkesin Microsoft Yönetim Konsolu'ndan (MMC) ve Hizmetler kontrol panelinden çıkmasını sağlamanız yeterlidir.
Lorne Marquis

6

Windows 7'den sonraki Windows sürümlerinde (doğrulanmamış, ancak en son Windows Server 2012 R2 deneyimine göre), Hizmet Kontrol Yöneticisi (SCM) daha katıdır.

Windows 7'de sadece başka bir işlem ortaya çıkarsa, şimdi hizmet işleminin hala devam edip etmediğini kontrol ediyor ve hizmet durdurulmuş görünse bile daha sonra CreateService / DeleteService çağrısı için ERROR_SERVICE_MARKED_FOR_DELETE (1072) dönebilir.

Burada Windows API kodu konuşuyorum, ama ne olduğunu açıkça özetlemek istiyorum, bu nedenle bu dizi belirtilen hataya neden olabilir:

SC_HANDLE hScm = OpenSCManager(nullptr, nullptr, SC_MANAGER_ALL_ACCESS);

SC_HANDLE hSvc = OpenService(hScm, L"Stub service", SERVICE_STOP | SERVICE_QUERY_STATUS | DELETE);

SERVICE_STATUS ss;
ControlService(hSvc, SERVICE_CONTROL_STOP, &ss);
// ... wait for service to report its SERVICE_STOPPED state

DeleteService(hSvc);
CloseServiceHandle(hSvc);
hSvc = nullptr;

// any further calls to CreateService/DeleteService will fail
// if service process is still around

Bir hizmet işleminin, SERVICE_STOPPED durumunun şaşırtıcı olmadığını bildirdikten sonra hala devam etmesinin nedeni. Ana iş parçacığı çağrısında 'sıkışmış' olan normal bir işlemdir.StartServiceCtrlDispatcher API bu nedenle önce bir durdurma denetimi eylemine tepki verir, ancak daha sonra kalan kod dizisini yürütmek zorundadır.

SCM / OS'nin bunu bizim için doğru şekilde işlememesi talihsiz bir durum. Programlı bir çözüm basit ve doğrudur: hizmeti durdurmadan önce hizmet yürütülebilir dosyasının işlem tutamacını edinin, sonra bu tutamacın sinyal vermesini bekleyin.

Konuya bir sistem yönetimi perspektifinden yaklaşılıyorsa, çözüm aynı zamanda hizmet sürecinin tamamen ortadan kalkmasını beklemektir.


6

Benim için işe yarayan buydu: - Aynı konuyu vurdum: Servisim 'silinmek üzere işaretlendi'. - services.msc hizmetini açtım. Zaten kaldırılmış olmasına rağmen hizmetim çalışıyordu. - Hizmetin denetim iletileri almak için bir durumda olmadığını belirten Bir hata iletisi alındı'yı tıklattım. Yine de, hizmet durduruldu. - Kapalı hizmetler.msc. - Yeniden açılan hizmetler. Msc. - Hizmet kullanımdan kaldırıldı (artık hizmetler listesinde görünmüyor).

(Ortam Windows 7 idi.)


2
Windows 2008 burada, sadece hizmetler panelini kapatmak zorunda kaldım
Mathijs Segers

5

Benim durumumda, yürütüyorum taskkill /f /im dongleserver.exe, nerede dongleserver.exebenim programın exe dosyası.

Sonra zaten programımı yeniden yükleyebilirim.


4

Benim durumumda, eventLog kaynağı oluşturulurken işlenmeyen istisna nedeniyle oluştu. Nedeni sabitlemek için yakalamayı deneyin.


4

Şu anda açık olan her pencereyi kapatmak ve ardından aşağıdaki komutu çalıştırmak sorunu benim için çözdü:

taskkill /F /IM mmc.exe

3

Buradaki yanıtlardan birkaçının önerdiği gibi hizmet konsolunu kapatmak, hizmeti kaldırmama izin verdi. Benim senaryomda bu sadece kısa vadeli bir düzeltmeydi, çünkü sonraki tüm yeniden yüklemeler ve hizmetin kaldırılması bu ek adımları atmamı gerektiriyordu. Web.config dosyamı gözden geçirdiğimde, bir kez düzeltildiğinde, hizmetler konsolu adımını kapatmadan hizmeti kolayca kaldırmama izin veren bir hata olduğu keşfedildi.


1

Bu benim için çalışıyor.

  • Görev Yöneticisini Aç
  • Hizmetler sekmesini seçin
  • Sorunlu hizmeti seçin
  • Sağ tıklayın ve "Ayrıntılara git" i seçin
  • Servise sağ tıklayın ve "İşlem ağacını sonlandır" ı seçin

İşlemi sonlandır ağacı işlemi ve işlem tarafından oluşturulan tüm işlemleri sonlandıracaktır.

Ardından, hizmeti yeniden yükleyebilirsiniz.


1

Benim durumumda, hizmet adı 'Monitör' olarak da adlandırılan bir Windows hizmeti tarafından da kullanılan 'Monitör' idi, hizmetlerimi güncellemeye çalıştığımda, bunları kaldırmayı denedim, yükleyici hangi Windows hizmetini 'Monitor' kaldırmaya çalıştı yapamadı ve kurulum her zaman geri alındı.

Hizmetimi başka bir şeye yeniden adlandırdım


0

@MainMa tarafından sağlanan adımlar işe yaramazsa aşağıdaki adımları izleyin

Adım 1 İşlemi Windows görev yöneticisinden öldürmeyi veya taskkill / F / PID'yi kullanmayı deneyin. İşlemin pidini 'sc queryex' komutuyla bulabilirsiniz. Hala kaldıramıyorsanız, bir sonraki adımı deneyin.

Adım 2 Yukarıdaki ise

Run , Windows için Autoruns isim ve silme sonuçları hizmeti için ara.


0

Hatanın ana nedeni işlemin durdurulmamasıdır. Bunu çözmek için görev yöneticisini başlatın hizmetlere gidin ve hizmetinizi görüp göremediğinizi görmek için o hizmetin işlemine gidin ve işlemi sonlandırın. Sorun daha sonra tamamen çözülecek.


0

Kazanma hizmetimi doğrulamak için Uygulama Doğrulayıcı'yı kullanırken bu sorunu yaşıyordum. App Ver'i kapattıktan sonra bile hizmetimin silinmesi engellendi. Hizmeti yalnızca Uygulama Ver'den kaldırmak sorunu çözdü ve hizmet hemen silindi. Bir işlemi silmeyi denedikten sonra hizmetinizi kullanmaya devam eden bir işlem gibi görünüyor.


0

Takip edilecek adımlar:

adım-1 C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 konumuna gidin

adım-2 çalıştırma komutu: installutil / u full-path / servicename.exe

adım-3 hizmetler panelini kapatın ve yeniden açın

adım-4 çalıştırma komutu: installutil full-path / servicename.exe


1
bir yan not: installutil SADECE yönetici olarak çalışır, bu nedenle yönetici olarak bir kabuk açın.
ingconti

0

Büyük olasılıkla hizmet silme başarısız oluyor çünkü

protected override void OnStop()

bir hizmeti durdururken hata atma. Deneme yakalamasının içine bir şeyler sarmak, silme hatası işaretini önleyecektir

protected override void OnStop()
{
            try
            {
                //things to do
            }
            catch (Exception)
            {
            }

}


0

Bazen bu, PowerShell uzak oturum komut dosyası aracılığıyla hizmetin silinmesi sırasında, özellikle hizmeti birkaç kez silmeye çalışırken olabilir. Bu durumda, silmeden önce bir oturumu yeniden oluşturmayı deneyin:

Remove-PSSession -Session $session
$newSession = New-PSSession -ComputerName $Name  -Credential $creds -ErrorAction Stop
Enter-PSSession $newSession
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.