答えて
依存関係を指定する必要があります。インストーラクラスでこれを行うことができます。
あなたはあなたのサービスをインストールするには、セットアッププロジェクトにカスタムアクションとしてインストーラクラスを使用する必要があります
さらに明確化。もしあなたがいないのであれば、コメントを投稿してください。この回答を更新する方法を説明します。
インストーラクラスのデザイナには、serviceInstallerとserviceProcessInstallerという2つのコンポーネントがあります。私は頭の中のどの部分が覚えていないのかを覚えていませんが、これらのうちの1つに、サービスの依存関係のサービス名を列挙する複数行の文字列を指定できるプロパティがあります。
私はあなたがこの行は
installer.ServicesDependedOn =新しい文字列[] { "DependenceService"} shoudと思います。このような
:
using (ServiceProcessInstaller processInstaller = new ServiceProcessInstaller())
{
processInstaller.Account = ServiceAccount.LocalSystem;
processInstaller.Username = null;
processInstaller.Password = null;
using (ServiceInstaller installer = new ServiceInstaller())
{
installer.DisplayName = "yourservice.";
installer.StartType = ServiceStartMode.Automatic;
installer.ServiceName = "YourService";
installer.ServicesDependedOn = new string [] { "DependenceService" };
this.Installers.Add(processInstaller);
this.Installers.Add(installer);
}
}
幸運
サービスが開始されると自動的に依存サービスが開始されますが、サービスは既に実行されても自動的に開始されません。そしてそれは私がそれを理解したように問題でした。 – devdimi
ops ...もし私がこの問題を忘れてしまったら、すみません。 – Jonathan
私はこれをきれいな解決策として知っていますが、回避策としてN秒ごとに希望するサービスの状態を確認できます。 ServiceController Name = new ServiceController(); byServiceName.ServiceName = "ServiceWanted"; 、その後: (name.Status == ServiceControllerStatus.Running) – Jonathan
あなたが他のサービスに対する制御を持っていますか? もしそうなら、彼らがあなたを始めさせるでしょう。そうでなければ、とにかく始めて何が起こっているのか自分自身を監視しなければならないと思います。 他のプロセスが開始されたときに通知するためにWMIに自分自身を登録することができます。
これらのサービスの1つがSQL Serverである場合、特定のデータベースとSQL Serverサービス自体が利用可能であることを確認する必要があります。プロジェクトインストーラーas described hereを追加し、あなたのサービスのプロジェクトで
public class DbStatus
{
public static bool DbOnline()
{
const int MaxRetries = 10;
int count = 0;
while (count < MaxRetries)
{
try
{
// Just access the database. any cheap query is ok since we don't care about the result.
return true;
}
catch (Exception ex)
{
Thread.Sleep(30000);
count++;
}
}
return false;
}
}
: 私は、次のような関数を使用します。 ProjectInstallerのプロパティの1つがServicesDependedOnになります。その文字列の配列にサービスを追加すると(IDE経由で行うこともできます)、サービスを開始する前にサービスを開始する必要があります。それらが起動されていない場合、SCMはそれらを試して起動します。
ここで述べたように、ServiceInstaller Classを使用する必要がありますが、フルブローン設定プロジェクトは必要ありません。 .NET Frameworkに付属のコマンドラインユーティリティInstallUtil.exeを使用して簡単にインストールできます。
- 1. 他のサービス内でサービスを開始しない
- 2. 別のサービスを開始する前にツイスターサービスが開始されるのを待つ
- 3. C#プログラムによるWindowsサービスの開始
- 4. 他のタイマーを開始する前にC#でタイマーが終了するのを待つ
- 5. サービスの開始を待っているTFS
- 6. サービスが開始されるのを待ちますwhileループ
- 7. Windowsサービスを開始
- 8. DBusサービスの開始方法
- 9. Androidサービスの開始/停止
- 10. サービス開始インターフェイスの設計
- 11. Android NFC開始サービス
- 12. サービスを開始したユーザーのユーザーとパスワードの確認c#
- 13. C#サービス:エラー開始サービス:標準コンストラクタがありません
- 14. Androidでサービスを開始
- 15. サービスでタイマーを開始
- 16. Android:パラメータでサービスを開始
- 17. Cの他のスレッドの中でComport値を待つ
- 18. サービスはいくつかのタスクを開始できますか?
- 19. 同じアプリケーションで2つのWindowsサービスを開始する
- 20. 開始時にucrtbase.dllでWindows C++サービスのフォールトが発生する
- 21. Pythonのwin32サービスがautomaticllyを開始
- 22. Androidの設定を開始するサービス
- 23. アプリケーションのonCreateでサービスを開始する
- 24. サービスの開始を中止する
- 25. C#リストボックスのsp_databasesを開始
- 26. Androidのシステムアプリのサービスの自動開始
- 27. データベースを持つAndroidアプリ "blocking/gc allocを開始/待機中"
- 28. 他のライブラリプロジェクトからのアクティビティの開始
- 29. 他のオブジェクトへのオブジェクトの開始
- 30. Amazon Webサービス、開始方法
あなたは何を意味するのでしょうか?これはどうすれば私を助けますか? Thanks –
ServiceInstaller(http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceinstaller.aspx)クラスを使用してサービスをインストールする場合、ServicesDependedOnプロパティを使用して依存関係を追加できます。 – adrianbanks