Windows サービスを通常どおり停止するには、コードを Stop メソッドに配置する必要があります。
http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.stop.aspx
一般に、失礼なスレッドの中止と失礼なアプリ ドメインのアンロードでは、「通常の」ファイナライザーは実行されません。詳細については、この MSDN の記事を参照してください。
https://web-beta.archive.org/web/20150423173148/https://msdn.microsoft.com/en-us/magazine/cc163716.aspx
ここまでは、ランタイムがスレッドで ThreadAbortException をスローした結果としてのスレッド アボートについて簡単に説明してきました。通常、これによりスレッドが終了します。ただし、スレッドはスレッドのアボートを処理して、スレッドが終了しないようにすることができます。これを説明するために、ランタイムはより強力なアクション、適切な名前の失礼なスレッドの中止を提供します。無礼なスレッドの中止により、スレッドは実行を停止します。これが発生した場合、CLR はスレッド上のバックアウト コードが実行されることを保証しません (コードが CER で実行されている場合を除く)。失礼ですね。
同様に、典型的なアプリケーション ドメインのアンロードはドメイン内のすべてのスレッドを正常に中止しますが、無作法なアプリケーション ドメインのアンロードはドメイン内のすべてのスレッドを無作法に中止し、そのドメイン内のオブジェクトに関連付けられた通常のファイナライザーが実行されることを保証しません。SQL Server 2005 は、エスカレーション ポリシーの一部として、無作法なスレッド アボートと無作法なアプリケーション ドメインのアンロードを利用する CLR ホストの 1 つです。非同期例外が発生すると、リソース割り当ての失敗はスレッドの中止にアップグレードされます。また、スレッド アボートが発生したときに、SQL Server によって設定された期間内に終了しない場合、無作法なスレッド アボートにアップグレードされます。同様に、アプリケーション ドメインのアンロード操作が SQL Server によって設定された期間内に終了しない場合、それは失礼なアプリケーション ドメインのアンロードにアップグレードされます。