web-dev-qa-db-ja.com

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

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

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

指定されたサービスは削除のマークが付けられています。

私がすでにやったこと:

問題は解決しません。

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

489

サービスが「削除マーク」されたままになる原因はいくつかあります。

  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 serviceのデバッグに使用される)のインスタンスが開いています。

1063

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

184
forcedfx

私の場合はServicesを閉じた後にうまくいきました。 Services.mscが開いているかどうかを確認し、開いている場合は閉じてTask Managerにサービスのプロセスが見つかっているか確認します。

41
Sumit Agrawal

やあみんな私は同じ問題を抱えていた、最後に私はサービスプロセスを殺すことにしました。

それはステップの下に試してみてください:

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

    sc queryex <service name>

  • とプロセスを殺す

    taskkill /F /PID <Service PID>

37
Ali Sadri

つまり、サービスはまだservices.mscで無効として表示されています。 services.mscを閉じて、管理者として開いてください。サービスは表示されません。では、コマンドを使ってサービスをインストールします。

installutil「サービスのパス」

8
Amey P Naik

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

タスクマネージャを開く>サービスタブを選択>サービスを選択>右クリックして「処理に進む」を選択>プロセスを右クリックしてプロセスの終了を選択

その後サービスは消えます

8
mathart63

これは私のために働いたものです: - 私は同じ問題にぶつかりました:私のサービスは「削除のためにマークされました」で立ち往生していました。 - services.mscを開きました既にアンインストールされていましたが、実行中として表示されました。 - サービスが制御メッセージを受信する状態にないというエラーメッセージが表示されました。それにもかかわらず、サービスは停止されました。 - クローズドservices.msc。 - services.mscを再オープンしました。 - サービスは消えました(サービスのリストに表示されなくなりました)。

(環境はWindows 7でした。)

6
balintn

Windows 7以降のWindowsバージョン(未確認ですが、Windows Server 2012 R2の最新の経験による)では、Service Control Manager(SCM)がより厳密になっているようです。

Windows 7では、別のプロセスが生成されるだけですが、サービスが停止しているように見えても、サービスプロセスがまだ存在しているかどうかをチェックしています。

ここでは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状態がすでに報告された後でサービスプロセスがまだ存在する理由は驚くにあたらない。これは通常のプロセスで、メインスレッドはStartServiceCtrlDispatcher APIの呼び出しで「動かなくなる」ので、最初に制御停止アクションに反応しますが、残りのコードシーケンスを実行する必要があります。

SCM/OSがこれを適切に処理してくれないのは残念です。プログラムによる解決方法は、簡単で正確です。サービスを停止する前にサービス実行可能ファイルのプロセスハンドルを取得してから、このハンドルが通知されるのを待ちます。

システム管理の観点から問題に取り組む場合、解決策はサービスプロセスが完全に消えるのを待つことでもあります。

6
klaus triendl

チェックするためのもう1つのことが発見されました - タスクマネージャを見てください - 他のユーザーがこのボックスに接続されている場合、たとえ「切断」されていても.

6
Kathy Gryta

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

それから私はすでに私のプログラムを再インストールすることができます。

5
Sian Chiew See

私の場合は、eventLogソースの作成中に未処理の例外が原因で発生しました。 try catchを使用して原因を突き止めてください。

4

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

taskkill /F /IM mmc.exe
3
Tshilidzi Mudau

@MainMaによって提供されたステップがうまくいかなかった場合は、次のステップに従ってください。

ステップ1 Windowsのタスクマネージャまたはtaskkill/F/PIDを使用してプロセスを強制終了してください。あなたはコマンド 'sc queryex'によってプロセスのpidを見つけることができます。それでもアンインストールできない場合は、次の手順を試してください。

ステップ2上記の場合

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

0
Charith

従うべきステップ:

step-1 C:\ Windows\Microsoft.NET\Framework\v4.0.30319に移動します。

ステップ2 runコマンド:installutil/uフルパス/ servicename.exe

step-3 サービスパネルを閉じて再度開く

ステップ4 run command:installutil full-path/servicename.exe

0
Divyang Shah

私は自分のwinサービスを検証するためにApplication Verifierを使っていたときにこの問題を抱えていました。 App Verを閉じた後でも、サービスの削除がブロックされています。 App Verからサービスを削除するだけで問題が解決し、サービスはすぐに削除されました。削除しようとした後も、まだサービスを使用しているプロセスがあるようです。

0
vadzvnik

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

0
Gaurav Tyagi

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

protected override void OnStop()

サービスを停止するときにエラーをスローします。 try catch内でものをラップすると、削除マークの誤りを防ぐことができます

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

}

0
e03050