「指定されたサービスは削除対象としてマークされています」エラーの解決方法


585

でWindowsサービスを削除しようとするsc delete <service name>と、次のエラーが発生します。

[SC] DeleteServiceが失敗しました1072:

指定されたサービスは削除対象としてマークされています。

私がすでにやったこと:

問題が解決しない。

次のステップは何ですか?


4
通常、再起動すると、残っている状態がすべてクリアされます。
Damien_The_Unbeliever 2013

14
知っている。しかし、私はそれほど根本的な解決策について考えました。1日30回再起動することは、私の場合、許容できる解決策ではありません。
Arseni Mourzenko 2013

54
「なぜこれを定期的に削除しているのですか?」:私はWindowsサービスを書いています。コンパイルするたびに、再起動する必要があります。「まだレジストリを1日30回ハッキングすることは許されますか?」:完全に。レジストリからキーを削除しても、すべてを保存し、開いているすべてのアプリを閉じ、1分待ってからすべてを再度開く必要はありません。
Arseni Mourzenko 2013

46
Windowsサービスを作成しました。登録を実行する実際のコードを変更しない限り、ビルドを行うたびにそれをアンインストールして再インストールする必要はありません。パスが同じである限り、古い登録情報は引き続き有効です。
Damien_The_Unbeliever 2013

4
@NickTurner-バグレポートへのリンク?あなたが言及しているバグが何であれ、私は遭遇していません。そして、おそらく開発マシンでのサービスの構築と実行について話しているので、MSIがどのように関与しているかはわかりません(少なくともこの5年前の質問のコンテキストのようです)
Damien_The_Unbeliever

回答:


1245

サービスが「削除対象としてマーク」されたままになる原因はいくつか考えられます。

  1. SysInternalsのProcess Explorerが開きます。これを閉じると、サービスが自動的に削除されます。

  2. タスクマネージャが開きます。

  3. Microsoft管理コンソール(MMC)が開きます。すべてのインスタンスが確実に閉じられるようにするには、を実行しtaskkill /F /IM mmc.exeます。

  4. サービスコンソールが開きます。サービスコンソールはMMCによってホストされるため、これは前のポイントと同じです。

  5. イベントビューアが開きます。繰り返しますが、これは3番目のポイントと同じです。

  6. キーHKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ {サービス名}が存在します。

  7. 他の誰かがサーバーにログインしており、前述のアプリケーションの1つが開かれています。

  8. サービスのデバッグに使用される Visual Studioのインスタンスが開いています。


9
タスクマネージャーも同じように見えます。また、以下に示すように、サービスコンソールを開いたままにすると、これも発生する可能性があります。
CodingBarfield 14

4
...これらすべてを閉じても問題が解決せず、サービスが「削除対象としてマーク」されている場合は、完全に再起動するのではなく、単純にログオフしてください。それは私を数回助けました。
Nedko、2014年

2
一般的なワークフローの1つ:悪意のある同僚もリモートサーバーにログインしていて、全員が何か開いている...
Chris O

72
サービスコンソールを閉じると、この問題は解決しました。私のプロセスは次のとおりです:VS2012 x64ネイティブツールのコマンドプロンプトで -> exectuableサービスのあるディレクトリに移動します -> installutil / u servicename.exe(古いサービスをアンインストールするため) -> 新しいビルドされたサービスのexeをコピーします - > installutil servicename.exe(更新されたサービスをインストールするため)。通常は、問題なくすぐにアンインストールして再インストールできます。ランダムにできなくなるまで。サービスコンソールを閉じると解決しました。先端をありがとう!
thehelix 2014

17
私の意見では、Process Explorerはここで最も大きなものです。太字にするか、リストの一番上に移動することをお勧めします。
Coxy 2015

224

これは、サービスコンソールを開いたままにすることでも発生する可能性があります。ウィンドウは、サービスが閉じられるまで実際には削除しません。


3
私の質問で述べたように、テスト中は「Microsoft管理コンソールが閉じています」。
Arseni Mourzenko 2014年

25
私の場合、サービスコンソールが問題でした。それを閉じて再び開くとすぐに、削除されたサービスはなくなりました。
Farrukh Najmi 2014

3
窓を開けたままにしていたなんて信じられない…ありがとう!
Karol Tyl

奇妙なことに、F5キーを押すだけでサービスが削除された状態でリストが更新される場合がたくさんありますが、これも私にとってはうまくいきました。
Steve Smith

1
あなたは私の日を救った
プラノイ・サーカー

50

私は同じ問題を抱えていましたが、最後にサービスプロセスを強制終了することにしました。

以下の手順を試してください:

  • サービスのプロセスIDを取得

    sc queryex <service name>

  • プロセスを殺す

    taskkill /F /PID <Service PID>


2
私のPIDは0なので、殺さない方がいいです。
2016年

ステップ1の下でサービスをアンインストールできます。cmdを実行します。2-サービスの.exeファイルに方向を変更します。3-そのコマンドを実行します。installutil / u <yourfilename.exe>
Ali Sadri

sc queryexの+1デバッガーを接続する場合、PIDを取得するためにそれを使用できます
Paul McCarthy

44

私の場合、それはを閉じた後に機能しましたServicesServices.mscが開いているかどうかを確認しTask Managerます。開いている場合は閉じ、サービスプロセスがにあることを確認します。


13

つまり、サービスは引き続きservices.mscで無効としてリストされます。services.mscを閉じて、管理者として再度開くだけです。サービスはリストされません。次に、コマンドを使用してサービスをインストールします。

installutil "サービスのパス"


11

上記のようにレジストリキーを削除すると、サービスが停止状態のままになります。次の手順でうまくいきました。

タスクマネージャーを開く>サービスタブを選択>サービスを選択>右クリックして[プロセスに移動]を選択>プロセスを右クリックして[プロセスを終了]を選択

その後サービスはなくなるはずです


7

チェックすべきもう1つのことを発見しました-タスクマネージャーで確認してください-他のユーザーがこのボックスに接続している場合、「切断」されている場合でも、実際にサインアウトしてサービスを最終的に削除する必要があります。


4
不要。誰もがMicrosoft管理コンソール(MMC)とサービスコントロールパネルを終了するようにする必要があります。
ローン侯爵2015

6

Windows 7より後のWindowsバージョン(未確認ですが、Windows Server 2012 R2の最新の経験によると)では、サービスコントロールマネージャー(SCM)の方が厳密であるようです。

Windows 7では別のプロセスを生成するだけですが、サービスプロセスがまだ存在するかどうかを確認しているため、サービスが停止しているように見えても、その後のCreateService / DeleteServiceの呼び出しでERROR_SERVICE_MARKED_FOR_DELETE(1072)を返す場合があります。

ここではWindows APIコードについて話していますが、何が起こっているのかを明確に示したいので、このシーケンスが前述のエラーにつながる可能性があります。

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

サービスプロセスがすでにSERVICE_STOPPED状態を報告した後もサービスプロセスがまだ存在する理由は、驚くことではありません。これは通常のプロセスであり、メインスレッドはStartServiceCtrlDispatcherAPI への呼び出しで「スタック」しているため、最初に停止制御アクションに反応しますが、残りのコードシーケンスを実行する必要があります。

SCM / OSがこれを適切に処理していないのは残念なことです。プログラムによるソリューションは、少し単純で正確です。サービスを停止する前に、サービス実行可能ファイルのプロセスハンドルを取得し、このハンドルが通知されるのを待ちます。

システム管理の観点から問題にアプローチする場合の解決策は、サービスプロセスが完全になくなるまで待つことです。


6

これは私にとってうまくいきました:-私は同じ問題に遭遇しました:私のサービスは「削除のためにマークされました」でスタックしました。-services.mscを開きました。サービスはすでにアンインストールされていますが、実行中と表示されました。-サービスが制御メッセージを受信する状態にないことを示すエラーメッセージを受信して​​停止をクリックしました。それにもかかわらず、サービスは停止されました。-services.mscを閉じました。-services.mscを再開しました。-サービスがなくなった(サービスのリストに表示されなくなった)。

(環境はWindows 7でした。)


2
Windows 2008の場合、サービスパネルを閉じるだけでした
Mathijs Segers

5

私の場合、を実行します。taskkill /f /im dongleserver.exeここdongleserver.exeで、私のプログラムのexeファイルです。

その後、プログラムを再インストールできます。



4

現在開いているすべてのウィンドウを閉じてから次のコマンドを実行すると、問題が解決しました。

taskkill /F /IM mmc.exe

3

ここのいくつかの回答で提案されているようにサービスコンソールを閉じると、サービスを削除できました。私のシナリオでは、その後のすべての再インストールとサービスの削除でこれらの追加の手順を実行する必要があるため、これは短期間の修正にすぎませんでした。私のweb.configファイルを確認したところ、一度修正するとエラーが発生し、サービスコンソールの手順を追加で閉じることなくサービスを簡単に削除できることがわかりました。


1

これでうまくいきます。

  • タスクマネージャーを開く
  • [サービス]タブを選択します
  • 問題のあるサービスを選択してください
  • 右クリックして「詳細に移動」を選択します
  • サービスを右クリックして、「プロセスツリーの終了」を選択します。

プロセスツリーの終了は、プロセスと、プロセスによって作成されたすべてのプロセスを終了します。

その後、サービスを再インストールできます。


1

私の場合、サービス名は「Monitor」と呼ばれるWindowsサービスでも使用される「Monitor」でした。サービスを更新しようとすると、サービスをアンインストールしようとしました。インストーラーは、Windowsサービス「Monitor」を削除しようとしました。できず、インストールは常にロールバックされました。

サービスの名前を別の名前に変更しました


0

@MainMaによって提供される手順が機能しない場合は、次の手順に従ってください

ステップ1 Windowsタスクマネージャからプロセスを強制終了するか、taskkill / F / PIDを使用してみてください。プロセスのpidは、コマンド 'sc queryex'で確認できます。それでもアンインストールできない場合は、次の手順をお試しください。

ステップ2上記の場合

名前でサービスのWindows Searchの自動実行を実行し、結果を削除します。


0

エラーの主な理由は、プロセスが停止していないことです。それを解決するには、開始タスクマネージャーをサービスに移動し、そのサービスのプロセスに移動してプロセスを終了するよりも、サービスを表示できるかどうかを確認します。問題は完全に解決されます。


0

Application Verifierを使用してWinサービスを確認しているときに、この問題が発生していました。App Verを閉じた後でも、サービスの削除がブロックされました。App Verからサービスを削除するだけで問題が解決し、サービスはすぐに削除されました。サービスを削除しようとした後、まだサービスを使用しているプロセスがあるようです。


0

従うべき手順:

ステップ1 C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319に移動します

ステップ2コマンドを実行します。installutil/ u full-path / servicename.exe

ステップ3サービスパネルを閉じて再度開く

ステップ4コマンドを実行します。installutilfull-path / servicename.exe


1
補足:installutilは管理者としてのみ機能するため、管理者としてシェルを開きます。
ingconti

0

ほとんどの場合、サービスの削除は失敗します

protected override void OnStop()

サービスを停止するときにエラーをスローします。tryキャッチの内側に物をラップすると、削除エラーのマークが防止されます

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

}


0

これは、PowerShellリモートセッションスクリプトによるサービスの削除中に発生する場合があります。特に、サービスを何度か削除しようとしている場合に発生します。この場合、削除する前にセッションを再作成してください。

Remove-PSSession -Session $session
$newSession = New-PSSession -ComputerName $Name  -Credential $creds -ErrorAction Stop
Enter-PSSession $newSession
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.