6

Quartz.netを使用していて、WindowsサービスでQuartzサーバーを起動しようとしています。Windowsサービスプロジェクトを作成し、Quartz.netライブラリを含めました。私のサービスクラスには次のものがあります。

protected override void OnStart(string[] args)
{
    try
    {
        Host host = HostFactory.New(x =>
        {
            x.Service<IQuartzServer>(s =>
            {
                s.SetServiceName("quartz.server");
                s.ConstructUsing(builder =>
                {
                    QuartzServer server = new QuartzServer();
                    server.Initialize();
                    return server;
                });
                s.WhenStarted(server => server.Start());
                s.WhenPaused(server => server.Pause());
                s.WhenContinued(server => server.Resume());
                s.WhenStopped(server => server.Stop());
            });

            x.RunAsLocalService();
            //x.RunAs(@"mydomain\mysusername", "mypassword");

            x.SetDescription(Configuration.ServiceDescription);
            x.SetDisplayName(Configuration.ServiceDisplayName);
            x.SetServiceName(Configuration.ServiceName);
        });

        host.Run();
    }
    catch (Exception ex)
    {
        Log.Error(ex.Message);
        Log.Error(ex.InnerException.Message);
    }

}

また、Windowsサービスインストーラーを作成し、次を使用してVisualStudioのコマンドプロンプトにWindowsサービスを正常にインストールしました。

installutil MyWindowsService.exe

Windowsサービスリストでサービスを表示してサービスを開始しようとすると、メッセージダイアログボックスが表示されます。

The MyWindowsService service on Local Computer started and the
stopped. Some Services stop automatically if they are not in use by
other services or programs.

イベントビューア(log4net)に記録した出力は次のとおりです。

Windowsイベント

1

Information 05/12/2012 14:52    MyWindowsService.exe    "2012-12-05
14:52:24,044 [11528] INFO 
Common.Logging.Factory.AbstractLogger.Info(:0) - Finished Starting
MyProject Windows Service."

2

Error   05/12/2012 14:52    Service1    "Service cannot be started.
System.NullReferenceException: Object reference not set to an instance
of an object.    at MyWindowsService.MyProject.OnStart(String[] args)
in c:\My Projects\MyProject
v40\CO40\MyWindowsService\MyProject.cs:line 58    at
System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object
state)"

3

Error   05/12/2012 14:52    MyWindowsService.exe    "2012-12-05 14:52:24,042
[6048] ERROR Common.Logging.Factory.AbstractLogger.Error(:0) - The
Topshelf.HostConfigurators.WindowsServiceDescription service has not
been installed yet. Please run 'MyWindowsService, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null install'. "

4

Error   05/12/2012 14:52    MyWindowsService.exe    "2012-12-05 14:52:24,041
[6048] FATAL Topshelf.Windows.WindowsServiceHost.Run(:0) - The
Topshelf.HostConfigurators.WindowsServiceDescription service has not
been installed yet. Please run 'MyWindowsService, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null install'. "

5

Information 05/12/2012 14:52    MyWindowsService.exe    "2012-12-05
14:52:24,039 [6048] INFO  Topshelf.Windows.WindowsServiceHost.Run(:0)
- Starting up as a winservice application "

6

Information 05/12/2012 14:52    MyWindowsService.exe    "2012-12-05
14:52:24,038 [6048] DEBUG Topshelf.Builders.RunBuilder.CreateHost(:0)
- Running as a Windows service, using the service host "

7

Information 05/12/2012 14:52    MyWindowsService.exe    "2012-12-05
14:52:24,027 [6048] INFO  Topshelf.OS.OsDetector.DetectOs(:0) -
Detected the operating system: 'win' "

8

Information 05/12/2012 14:52    MyWindowsService.exe    "2012-12-05
14:52:23,895 [6048] INFO 
Topshelf.HostConfigurators.HostConfiguratorImpl.CreateHost(:0) -
Topshelf v2.2.2.0, .NET Framework v4.0.30319.17929 "

9

Information 05/12/2012 14:52    MyWindowsService.exe    "2012-12-05
14:52:23,829 [11528] INFO 
Common.Logging.Factory.AbstractLogger.Info(:0) - Starting MyProject
Windows Service.. "

このエラーをスローせずにこのサービスを開始する方法を知っている人はいますか?

前もって感謝します。

4

4 に答える 4

10

Windowsサービスプロジェクトを作成しました...Windowsサービスインストーラーも作成し、installutilMyWindowsService.exeを使用してVisualStudioのコマンドプロンプトにWindowsサービスを正常にインストールしました。

トップシェルフサービスはすでにServiceBaseに基づいており、独自のインストールを実行します。開発中のアプリと一緒に実行して動作を確認できるコンソールアプリケーションがあります。サービスとしてインストールする場合は、次のコマンドプロンプトに移動します。管理者と電話MyWindowsService.exe install-すべてのオプションについては、ドキュメントを参照してください。別のサービスにラップして動作する可能性がありますが、なぜそうしたいのかわかりません。

ドキュメントには、機能サービスの基本的な例があります。

インストーラーが必要な場合は、http://www.bjoernrochel.de/2010/01/09/how-to-integrate-a-topshelf-based-service-with-vs-setup-projects/にあります(ただし、 Topshelfのコマンドライン構文は、それが作成されてから変更されており、更新する必要があります。)

(編集:イベント番号3と4に「'MyWindowsService ..install'を実行してください」というテキストが含まれていることに気づきました)

于 2012-12-05T20:45:14.970 に答える
0

使用した値がaz文字だけではなかったときに、問題が発生した.からを削除してみてください。s.SetServiceName("quartz.server");SetServiceName

これは、サービスがWindowsサービスに登録されている名前です(使用する名前sc start quartzserver) 。

于 2012-12-05T15:17:00.550 に答える
0

サービス名と表示名の値が異なると、このエラーが発生していました。「Auditing.Service」と「AuditingService」があり、両方を「Auditing.Service」に変更してWindowsサービスを開始しました。

したがって、私の提案は、サービス名と表示名を一致させることです。

于 2019-02-26T11:17:29.843 に答える
-1

ログを正しく読んでいる場合は、Topshelf.HostConfigurators.WindowsServiceDescriptionサービスがインストールされていないか、実行されていないようです。

の58行目にもNREがありc:\My Projects\MyWindowsService\Service1.csます。これは、前のエラーに関連している可能性があります。

次のオプションは、TopShelfコミュニティに直接助けを求めることです:http://topshelf-project.com/contact/

于 2012-12-05T15:06:33.277 に答える