0

自動的に開始するように設定されたWindowsサービスを作成しました。また、インストーラーに次のコードを追加しました。

    public ProjectInstaller()
    {
        InitializeComponent();
        serviceProcessInstaller1.AfterInstall += new InstallEventHandler(serviceProcessInstaller1_AfterInstall); 
    }

    void serviceProcessInstaller1_AfterInstall(object sender, InstallEventArgs e)
    {
        try
        {
            var sc = new ServiceController(serviceInstaller1.ServiceName);
            sc.Start();
        }
        catch
        {
        }
    }

    protected override void OnCommitted(IDictionary savedState)
    {
        try
        {
            var sc = new ServiceController(serviceInstaller1.ServiceName);
            sc.Start();
        }
        catch
        {
        }
    }

サービスは正しくインストールされていますが、開始されません。

これの原因は何でしょうか?

4

5 に答える 5

1

おそらく、おそらく を使用して、一時的な診断ログを記録する必要がありますSystem.IO.File.WriteAllText();。それがあなたが探している答えではないことはわかっていますが、おそらく最も迅速な解決策が得られるでしょう!

try
{
    var sc = new ServiceController(serviceInstaller1.ServiceName);
    sc.Start();
    System.IO.File.WriteAllText(@"c:\temp\servicestart.txt", "Service started");
}
catch (Exception ex)
{
    System.IO.File.WriteAllText(@"c:\temp\servicestart.txt", ex.Message);
}
于 2012-06-05T03:28:37.107 に答える
0

別のサービスに依存している可能性がありますか?または、遅延スタートを試しましたか?

于 2012-06-05T00:22:04.723 に答える
0

私は少し前にサービスを作成しましたが、私のものとあなたのものとの違いは、あなたがこのように宣言したことです

var sc = new ServiceController(serviceInstaller1.ServiceName);

serviceInstaller1.ServiceName を取る代わりに、私はこのような単純な文字列を介して名前を付けていました

var sc = new ServiceController("MyService");

これはまったく問題ではないと思いますが、サービスについて話すときはすべて試してみる価値があります

編集:今見てみると、私が使用した名前は実際にはサービス名ではなくDisplayNameであることがわかりました。手動で渡すか、serviceInstaller1.DisplayName

于 2012-06-04T18:22:28.513 に答える
0

Main()関数に次の行があることを確認します。

ServiceBase.Run(new ServiceClass());

私は何度か立ち去っ Application.Run(new Class()); たことがあります (Windows フォーム アプリから始めた場合)

于 2012-06-04T18:15:51.410 に答える
-1

これは私のために働いた

protected override void OnAfterInstall(IDictionary savedState)
{
      base.OnAfterInstall(savedState);
      System.ServiceProcess.ServiceController sc = new System.ServiceProcess.ServiceController(serviceInstaller1.ServiceName);
      sc.Start();
}
于 2016-09-15T13:41:38.313 に答える