指定されたサービスは削除するようにマークされました。

あるWindowsサービスを削除しようとして、sc delete <service name>を実行したところ、次のようなエラーが発生しました:

SC] DeleteService FAILED 1072:

[SC] DeleteService FAILED 1072: &gt; 指定されたサービスは削除されました。

既にやったこと:

  • サービスを停止しました。sc queryex "<サービス名>"`を実行すると、以下の結果が得られます:

     SERVICE_NAME:スタブサービス
             タイプ : 10 win32_own_process
             状態 : 1 停止中
             WIN32_EXIT_CODE : 1067 (0x42b)
             SERVICE_EXIT_CODE : 0 (0x0)
             チェックポイント : 0x0
             WAIT_HINT : 0x0
             PID : 0
             FLAGS :
  • Microsoft Management Console が終了したことを確認]1 (taskkill /F /IM mmc.exe)、

  • イベントビューアが終了していることを確認]2

  • レジストリからHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servicesキーを削除しました]3

    この削除により、services.mscはまだサービス(名前は表示されるが、ステータスやスタートアップの種類は表示されない)を表示するが、その説明は「<Failed to Read Description.エラーコード:2 >」となっている。プロパティを表示しようとすると、「システムが指定されたファイルを見つけられません」と5回表示されます。

問題は解決しない。

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

質問へのコメント (7)
ソリューション

サービスが "削除マーク "で止まってしまう原因はいくつか考えられます。

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

1.タスクマネージャーを開く

1.Microsoft管理コンソール(MMC)を開く。すべてのインスタンスが終了していることを確認するために、taskkill /F /IM mmc.exeを実行します。

1.サービスコンソールを開く。サービスコンソールはMMCによってホストされているので、これは前のポイントと同じです。

1.イベントビューアを開く。これも3つ目と同じです。

1.キー HKEY_LOCAL_MACHINE}/SYSTEM}/CurrentControlSet}/Services}/{サービス名} が存在する

1.他の誰かがサーバーにログインしていて、前述のアプリケーションのいずれかを開いている。

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

解説 (17)

これは、サービスコンソールを開いたままにしておくことでも起こります。 Windowsはサービスを閉じるまで、実際にサービスを削除することはありません。

解説 (7)

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

解説 (0)

私も同じ問題を抱えていましたが、ついにサービスプロセスを殺すことにしました。

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

-サービスのプロセスIDを取得します。

`sc queryex< service name>`。

-プロセスを殺します。

`taskkill / F / PID< Service PID>`。
解説 (3)

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

installutil「サービスの道」。

解説 (0)

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

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

その後、サービスは終了する必要があります。

解説 (0)

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

解説 (1)

Windows 7より後のWindowsバージョン(未検証ですが、Windows Server 2012 R2の最新の経験により)では、Service Control Manager(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状態がすでに報告された後も、サービスプロセスがまだ存在している理由は驚くに値しません。 これは通常のプロセスであり、メインスレッドは「StartServiceCtrlDispatcher」APIへの呼び出しで「スタック」されるため、最初にストップコントロールアクションに反応しますが、残りのコードシーケンスを実行する必要があります。

SCM / OSがこれを適切に処理していないのは残念です。 プログラムによる解決策は、シンプルで正確です。サービスを停止する前にサービス実行可能ファイルのプロセスハンドルを取得し、このハンドルが信号を受け取るのを待ちます。

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

解説 (0)

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

(環境はWindows 7でした。)。

解説 (1)

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

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

解説 (0)

私の場合は、eventLogソースを作成する際に発生した未処理の例外が原因でした。try catchを使って原因を突き止めましょう。

解説 (0)

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

taskkill /F /IM mmc.exe
解説 (0)

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

解説 (0)

従うべきステップ:

step-1 場所C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319を取得しました。

step-2 runコマンド:installutil / u full-path / servicename.exe。

step-3 サービスパネルを閉じて、再度開きます。

step-4 runコマンド:installutil full-path / servicename.exe。

解説 (1)

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

protected override void OnStop()

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

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

}。

解説 (0)

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

ステップ1 Windowsタスクマネージャーからプロセスを終了するか、タスクキル/ F / PID< Service PID>を使用してみてください。 . コマンド 'sc queryex< service name>'でプロセスのpidを見つけることができます。 それでもアンインストールできない場合は、次のステップを試してください。

ステップ2上記の場合。

Autoruns for Windowsを実行します。名前でサービスを検索し、結果を削除します。

解説 (0)

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

解説 (0)