1

場合によっては、必要なデータの読み込みに多くの時間を費やすサービスが自動的に開始されました。たとえば、10 分としましょう。この間、期待どおりに動作します (開始に必要ないくつかの巨大なデータ ファイルの処理)。C++ の SetServiceStatus 関数で進捗状況を報告したところ、問題なく動作しています。

このサービスは何にも依存しておらず、依存関係が 1 つだけあり、これも私たち自身のサービスです。この 10 分後に開始されます。リクエストを受け入れるには、最初の「サーバー」サービスが完全に実行されている必要があります。

Windowsは他のすべての自動サービスを開始し(通常は10分未満で)、正常に動作し始めると思いましたが、システムは起動中に完全にブロックされます(コンピューターにログインしたり、コンピューターにpingを実行したりできません)この特定のサービスが終了するまで開始されました (SetServiceStatus によって SERVICE_RUNNING を報告します)。サービスが完全に開始されると、その他の欠落しているシステム サービス (ネットワーク、リモート デスクトップなどに必要であり、非常にランダムです) も開始されます。これは正常な動作ですか?依存しないプロセス (リモート デスクトップ、ネットワーク接続など) がこのプロセスを待機しているのはなぜですか? 何か不足していますか?

サービスの起動を延期するためにいくつかの依存関係を追加しようとしましたが、多くの依存関係と動作がまだ何らかの形でランダムになりました (サービスの順序がランダムであるため)。時々ログインできましたが、たとえば、サービスが開始された10分後にのみ[スタート]ボタンが機能し始めました. 依存する「最後のサービス」と依存リストに含めるサービスがわかりません。一部のコンピューターでは、このサービスを無効にして新しい問題を引き起こす可能性があります...したがって、このソリューションは好きではありませんとても。

別のオプションは、サービスの遅延開始オプションでした。これにより、他のすべての自動サービスが実行されているときにサービスが開始されます。これは問題なく動作し、Windows が起動し、コンピューターが実行されて応答し、サービスが開始されますが、パフォーマンスが非常に悪く、通常よりも何倍も遅くなります。遅延開始サービスの優先度がはるかに低いか、そのようなものです。

私の現在の唯一の解決策は、サービスが実行されていることをシステムに報告することです( SetServiceStatus 関数によって)が、ロードを続行することです(これは機能し、テストしました)。しかし、最初のサービスの準備が整ったときに開始する必要があるため、依存サービスに問題があります。それは解決できますが、これがどのように可能であるか、また、実際に完全に開始されて動作する準備ができたときに「開始」を報告する自動開始サービスの現在の状態を維持するために使用できるものがあるかどうか疑問に思っています。アイデアをありがとう。

4

1 に答える 1