セットアップ(WIXで作成)をアンインストールすると、サービスの削除マークが残っていて、再度インストールするにはマシンを再起動する必要があります。 サービスが削除済みであることを確認し、他のインストールを行う前にコンピュータを再起動するようにユーザーに指示するにはどうすればよいですか?サービスに削除マークが付いているかどうか確認
答えて
は、一般的に何かがからWindowsを防止し、そのサービスにラッチされたままと、このシナリオが発生し、話す:次のように
のWiX XMLを使用し、WiXの処理後の再起動のスケジュールを設定する(どのようにウィックスの#hereとの説明)レジストリ内の構成を削除します。 (ほとんどの場合、サービスアプレットservice.mscは偶然バックグラウンドで開いたままです。)
検出のために、CreateServiceと他のService APIを読んでください。たとえば、サービスが削除対象としてマークされている場合は、CreateServiceの呼び出し時にERROR_SERVICE_MARKED_FOR_DELETEを受け取ります。
提案されている再起動ソリューションについて... Windowsは、ほとんど何らかの理由で再起動を必要としないほど十分に進歩しています。専用のカーネルドライバをインストールしている場合を除き、再起動する必要はありません。怠惰にしないでください!ユーザーを念頭に置いてください!インストーラのロジックを変更して、サービスアプレットのように競合する可能性のあるプログラムを検出し、終了を提案することをお勧めします。
サービスアプレットがmmcにロードされているかどうかをどのように検出すると思いますか? – vkrzv
あなたのお役に立つかもしれない投稿です。元の質問はサービスのインストールですが、アンインストールとステータスについても説明します。ここで
How to install a windows service programmatically in C#?
は、あなたが最初の場所で「マークされ、削除のために」というメッセージを受信し、どのようにそれを回避するためにも理由を説明する記事です。クリストファー・ペインターズコメントパーEDIT
、私はベストプラクティスを推進する意向のために、この答えを更新しています。 「マークされた削除用」メッセージを受け取っている間に、私の経験上、未公開のリソースよりもservices.mscコンソールを持っている結果がありました。再起動するカスタムアクションを作成するのが最善の方法ではありません。
<?xml version='1.0' encoding='windows-1252'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
...
<InstallExecuteSequence>
<ScheduleReboot After="InstallFinalize"/>
<InstallExecuteSequence>
</Wix>
-1が説明されているといいです – bitxwise
WiXはサービスのインストール/アンインストールをサポートするWindowsインストーラを使用します。インストーラでカスタムアクションを記述しようとすると、悪い習慣とみなされます。参照:http://robmensching.com/blog/posts/2007/8/17/Zataoca-Custom-actions-are-generally-an-admission-of-failure –
説明をありがとう。あなたがリンクしているブログ投稿で作成された多くの点に同意しますが、投稿の解釈に完全に同意しているわけではありません。戦争を始めようとはしていないが、ポストの作者は、なぜカスタム・アクションを作成するのかという理由で、カスタム・アクションは一般的に推奨されていないことを強調している。 しかし、OPは、実際の作業のためにカスタムアクションを記述するのではなく、
アンインストール中にServiceControl要素/テーブルを使用してサービスを停止していますか?もしそうなら、サービスは正常に停止しますか?そうでない場合は、サービス内で何が起こっているかを調べて、リソースがすべて解放されていることを確認し、リクエストされたときに正常にシャットダウンします。
プログラムでSCM APIを呼び出すためのカスタムアクションを記述する必要はありません。 Windowsインストーラがこれを処理できるはずです。 DeleteFlag=1
(REG_DWORD)値を含む
CreateService
または
DeleteService
のいずれかを呼び出す必要としない)それを行うためのAPIの方法を見つけることができません
これは質問に答えません。一部のサービスは停止できません。サービスが安全にアンロードできないデバイスドライバに属している場合 – Ilya
あなたが逃したポイントは、これはインストーラの問題ではなく、サービスコードを調べることでした。サービスを停止できない場合は、インストーラに停止を依頼しないでください。 –
アンインストーラの目的は、サービスを削除することです。アンインストーラは最初に停止する必要がありますが、止めることができない場合は、それを削除します(システムシャットダウン時に削除のマークが付けられます)。ユーザーがアンインストーラの最後で再起動しないことを選択して再インストールすると、インストーラがサービスを再作成しようとすると問題が発生する可能性があります。 – Ilya
が、 HKLM\SYSTEM\CurrentControlSet\Services\ServiceName
はかなり指標であると思われますこの不幸な状態。
私の場合、アンインストール後にサービスが削除されました。なぜなら、オブジェクトを正しく処理しなかったからです(私の場合はrabbitmq-connection)。
これは疑問に対する直接的な回答ではありませんが、根本的な問題を解決するのに役立ちます。
- 1. 削除のマークが付いているトピックのマークを解除しますか?
- 2. シートが削除されているかどうかを確認するには?
- 3. XML要素にSQLで `xsi:nil`マークが付いているかどうかを確認します
- 4. 要素が削除されているかどうかを確認するJQuery
- 5. tmuxペインがマークされているかどうかを確認します
- 6. ファイルを削除できるかどうか確認してください
- 7. Dockerイメージに符号が付いているかどうかを確認する
- 8. ファイルの削除が成功したかどうかの確認
- 9. ファイルを削除できるかどうかを確認するにはどうすればいいですか?
- 10. 日付が正しいかどうかを確認する
- 11. サービスがインストールされているかどうかを確認する方法
- 12. 現在位置サービスが使用されているかどうかを確認
- 13. PHPを使用してYouTube動画が削除されているかどうかを確認しますか?
- 14. Eloquentでローがソフト削除されているかどうかを確認するには?
- 15. TabLayoutでタブがすでに削除されているかどうかを確認する方法? MainActivityの下
- 16. データベースで削除が成功したかどうかを確認するには?
- 17. XSDファイルにXML要素が必要とマークされているかどうかを確認する方法
- 18. jqueryでクラスが削除されているかどうか確認することは可能ですか?
- 19. jQueryでターゲットが要素から削除されているかどうかを確認する方法は?
- 20. mysqli dbdriverを使用して行が削除されているかどうかを確認する方法
- 21. C#TextBoxの文字列にダブルマイナス記号( - )が付いていないか確認して削除します。
- 22. Visual Basic - ポートが開いているかどうかの確認
- 23. 日付が正しいかどうかを確認するにはどうすればいいですか?
- 24. ActiveMQ nms in .NET - tempキューが削除されているかどうかを確認する方法?
- 25. CodeElementがプロジェクトに属しているかどうかを確認
- 26. 削除する前に要素にHTMLが含まれているかどうかを確認するにはどうすればよいですか? jQuery
- 27. DataGrid行の削除が有効かどうかを確認する
- 28. ユーザーがdbで確認されているかどうかを確認
- 29. Authguard anglefire2電子メールが確認されているかどうかを確認
- 30. サーベイサルのアンケートがAPIを使用して削除されたかどうか確認してください
'ServiceController'から' ServiceController.GetServices() 'が見つかるかどうか不明ですが、試してみる価値があります。 –