C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: Windowsサービスがシャットダウン状態から起動しない


(過去ログ 178 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■101905 / inTopicNo.1)  Windowsサービスがシャットダウン状態から起動しない
  
□投稿者/ kiku (334回)-(2023/05/12(Fri) 15:24:48)

分類:[.NET 全般] 

下記の環境でWindowsサービスを作りました。
 VisualStudio2022
 C#
 .NETFrameWork4.8

デバックビルドをしてできたexeを下記コマンドでサービスに登録しました。
 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\installutil.exe C:\test\sss\WindowsService1.exe
サービスの開始でログ出力されることを確認。
サービスの停止でログ出力されることを確認。

PCをシャットダウンし、
PCの電源を入れれば、ログオンせずともサービスが起動されると期待していたのですが
どうやらサービスが自動的に起動していないようです。
そのままログインし、サービスの状態を見ると
サービスは停止の状態になっていました。

シャットダウン状態から自動起動するためにはどうしたら良いでしょうか?
アドバイスを頂きたいです。

serviceProcessInstaller1のプロパティであるAccountは、LocalServiceに設定しました。
serviceInstaller1のプロパティであるStartTypeは、Automaticに設定しました。
その他はデフォルトになっています。

    public partial class Service1 : ServiceBase
    {
        private readonly Timer _WatchTimer = new Timer();

        public Service1()
        {
            InitializeComponent();

            _WatchTimer.Elapsed += new ElapsedEventHandler(OnTimer);
            _WatchTimer.Enabled = false;
            _WatchTimer.AutoReset = true;
            _WatchTimer.Interval = 1000;
            _WatchTimer.Enabled = true;
            _WatchTimer.Stop();
        }

        protected override void OnStart(string[] args)
        {
            LogWrite("OnStart");
            _WatchTimer.Start();
        }

        protected override void OnStop()
        {
            LogWrite("OnStop");
            _WatchTimer.Stop();
        }

        protected void OnTimer(object sender, EventArgs e)
        {
            LogWrite("OnTimer");
        }

        private void LogWrite(string message)
        {
            using (StreamWriter streamWriter = new StreamWriter("C:\\test\\A.txt", true))
            {
                streamWriter.WriteLine($"{DateTime.Now} - {message}");
            }
        }
    }

引用返信 編集キー/
■101910 / inTopicNo.2)  Re[1]: Windowsサービスがシャットダウン状態から起動しない
□投稿者/ 魔界の仮面弁士 (3638回)-(2023/05/12(Fri) 15:50:16)
2023/05/12(Fri) 15:52:17 編集(投稿者)

No101905 (kiku さん) に返信
> どうやらサービスが自動的に起動していないようです。

ServiceInstaller の StartType プロパティを Automatic にしているかと、
(インストール時および再起動時に呼ばれます)
AfterInstall が呼ばれたときに開始するようになっているかを
確認してみては如何でしょう。

https://learn.microsoft.com/ja-jp/dotnet/framework/windows-services/walkthrough-creating-a-windows-service-application-in-the-component-designer#add-installers-to-the-service
https://stackoverflow.com/questions/1036713/automatically-start-a-windows-service-on-install
引用返信 編集キー/
■101913 / inTopicNo.3)  Re[2]: Windowsサービスがシャットダウン状態から起動しない
□投稿者/ kiku (335回)-(2023/05/12(Fri) 16:44:23)
No101910 (魔界の仮面弁士 さん) に返信
> 2023/05/12(Fri) 15:52:17 編集(投稿者)
>
> ■No101905 (kiku さん) に返信
>>どうやらサービスが自動的に起動していないようです。
>
> ServiceInstaller の StartType プロパティを Automatic にしているかと、

Automaticになっていました。

> (インストール時および再起動時に呼ばれます)
> AfterInstall が呼ばれたときに開始するようになっているかを
> 確認してみては如何でしょう。
> https://learn.microsoft.com/ja-jp/dotnet/framework/windows-services/walkthrough-creating-a-windows-service-application-in-the-component-designer#add-installers-to-the-service
> https://stackoverflow.com/questions/1036713/automatically-start-a-windows-service-on-install

実装されていませんでした。
下記のように実装したところ、サービスが正常に登録されず、
ロールバックされるようになりました。

[RunInstaller(true)]
public partial class ProjectInstaller : System.Configuration.Install.Installer
{
private readonly ServiceProcessInstaller processInstaller;
private readonly System.ServiceProcess.ServiceInstaller serviceInstaller;
public ProjectInstaller()
{
InitializeComponent();
processInstaller = new ServiceProcessInstaller();
serviceInstaller = new System.ServiceProcess.ServiceInstaller();
// Service will run under system account
processInstaller.Account = ServiceAccount.LocalSystem;
// Service will have Automatic Start Type
serviceInstaller.StartType = ServiceStartMode.Automatic;
//serviceInstaller.ServiceName = "Windows Automatic Start Service";
serviceInstaller.ServiceName = "Service1";
Installers.Add(serviceInstaller);
Installers.Add(processInstaller);
serviceInstaller.AfterInstall += ServiceInstaller_AfterInstall;
}

private void ServiceInstaller_AfterInstall(object sender, InstallEventArgs e)
{
ServiceController sc = new ServiceController("Service1");
//ServiceController sc = new ServiceController("Windows Automatic Start Service");
//ServiceController sc = new ServiceController(serviceInstaller.ServiceName);
sc.Start();
}
}

サービス登録時のログが下記になります。
アセンブリ 'C:\test\sss\WindowsService1.exe' をインストールしています。
該当するパラメーター:
logtoconsole =
assemblypath = C:\test\sss\WindowsService1.exe
logfile = C:\test\sss\WindowsService1.InstallLog
サービス 'Service1' をインストールしています...
サービス 'Service1' は正常にインストールされました。
EventLog ソース Service1 をログ Application に作成しています...
サービス 'Service1' をインストールしています...
EventLog ソース Service1 をログ Application に作成しています...
アセンブリ 'C:\test\sss\WindowsService1.exe' をロールバックしています。
該当するパラメーター:
logtoconsole =
assemblypath = C:\test\sss\WindowsService1.exe
logfile = C:\test\sss\WindowsService1.InstallLog
ソース Service1 の前の状態にイベント ログを復元しています。
ソース Service1 の前の状態にイベント ログを復元しています。
サービス Service1 をシステムから削除しています...
サービス 'Service1' は正常にシステムから削除されました。
サービス 'Service1' を停止しようとしました。

上記を見ると例外は出ていないようです。
うーーん。困った。
引用返信 編集キー/
■101914 / inTopicNo.4)  Re[3]: Windowsサービスがシャットダウン状態から起動しない
□投稿者/ 魔界の仮面弁士 (3639回)-(2023/05/12(Fri) 17:00:50)
No101913 (kiku さん) に返信
> logfile = C:\test\sss\WindowsService1.InstallLog
> 上記を見ると例外は出ていないようです。

ログには例外が記録されていなかったのですね?


> 下記のように実装したところ

Jun 24, 2009 at 8:23 (adrianbanks 氏)によると
>> ou should also check the Status property to see what state
>> it is already in before calling start (it may be running, paused, stopped, etc..).
だそうです。


それ以外のコメントだと:


May 1, 2014 at 1:28 (goamn 氏)
>> The errors seized once I commented out the line "InitializeComponent()".

Feb 28, 2018 at 14:21 (Konstantin 氏)
>> Thank you for this useful comment.
>> After I had commented out InitializeComponent() call, my service also started perfectly

うーん。両者で異なる見解になっている気がする。


Jan 4, 2013 at 17:40 (Matsu Q. 氏)
>> I eventually found an alternative solution that makes use of the command line:

sc.exe を直接呼ぶのではなく、cmd.exe 経由で呼んでいる理由は不明。
引用返信 編集キー/
■101915 / inTopicNo.5)  Re[4]: Windowsサービスがシャットダウン状態から起動しない
□投稿者/ 魔界の仮面弁士 (3640回)-(2023/05/12(Fri) 17:10:20)
No101914 (魔界の仮面弁士) に追記
>>下記のように実装したところ

別の実装例として:
http://kenzauros.com/blog/add-own-installer-and-auto-start-to-windows-service-with-csharp/
引用返信 編集キー/
■101916 / inTopicNo.6)  Re[4]: Windowsサービスがシャットダウン状態から起動しない
□投稿者/ kiku (336回)-(2023/05/12(Fri) 17:51:34)
No101914 (魔界の仮面弁士 さん) に返信
> ■No101913 (kiku さん) に返信
>> logfile = C:\test\sss\WindowsService1.InstallLog
>>上記を見ると例外は出ていないようです。
>
> ログには例外が記録されていなかったのですね?

その通りです。

> それ以外のコメントだと:
> May 1, 2014 at 1:28 (goamn 氏)
> >> The errors seized once I commented out the line "InitializeComponent()".
>
> Feb 28, 2018 at 14:21 (Konstantin 氏)
> >> Thank you for this useful comment.
> >> After I had commented out InitializeComponent() call, my service also started perfectly
>
> うーん。両者で異なる見解になっている気がする。
>
>
> Jan 4, 2013 at 17:40 (Matsu Q. 氏)
> >> I eventually found an alternative solution that makes use of the command line:
>
> sc.exe を直接呼ぶのではなく、cmd.exe 経由で呼んでいる理由は不明。

ちょうど当方でも上記のコメントを発見し、実験していたところでした。
InitializeComponent()を削除することによって
サービスをエラーなく登録できるようになりました。

>>下記のように実装したところ
>
> Jun 24, 2009 at 8:23 (adrianbanks 氏)によると
> >> ou should also check the Status property to see what state
> >> it is already in before calling start (it may be running, paused, stopped, etc..).
> だそうです。

サービス登録を実施し実施したところ
下記のような状態になりました。

1.パターン1
  1:ログインしている状態
  2:サービスを起動
  3:シャットダウンする
  4:PCの電源入れる
  5:ログインする
 ログを見ると、上記の電源入れるあたりからログが記録
 されているため、サービスが自動起動されているようです。

2.パターン2
  1:ログインしている状態
  2:サービスを停止し、自動起動になっていることを確認
  3:シャットダウンする
  4:PCの電源入れる
  5:ログインする
 ログを見ると、何も記録されていない。
 サービスを見るとサービスが起動されていない。

この状況から、上記のコメントのように
起動しているかしていないかをどこかで判定しなくてはならないのか?
と思っていますが、どのように実装して良いか不明。

引用返信 編集キー/
■101917 / inTopicNo.7)  Re[5]: Windowsサービスがシャットダウン状態から起動しない
□投稿者/ kiku (337回)-(2023/05/12(Fri) 17:52:17)
No101915 (魔界の仮面弁士 さん) に返信
> ■No101914 (魔界の仮面弁士) に追記
> >>下記のように実装したところ
>
> 別の実装例として:
> http://kenzauros.com/blog/add-own-installer-and-auto-start-to-windows-service-with-csharp/

ありがとうございます。
こちらの方法も試してみたいと思います。
しばらく時間ください。
引用返信 編集キー/
■101935 / inTopicNo.8)  Re[6]: Windowsサービスがシャットダウン状態から起動しない
□投稿者/ kiku (338回)-(2023/05/16(Tue) 16:30:54)
No101917 (kiku さん) に返信
> ■No101915 (魔界の仮面弁士 さん) に返信
>>■No101914 (魔界の仮面弁士) に追記
>>>>下記のように実装したところ
>>
>>別の実装例として:
>>http://kenzauros.com/blog/add-own-installer-and-auto-start-to-windows-service-with-csharp/
>
> ありがとうございます。
> こちらの方法も試してみたいと思います。
> しばらく時間ください。

上記、検証してみましたが、
上記は、コマンドラインからインストール、アンインストール、起動、停止ができるようにするもので、
シャットダウン状態から電源ONで、自動起動するものではありませんでした。
よって、この方法は使えなさそうです。

引用返信 編集キー/
■101936 / inTopicNo.9)  Re[5]: Windowsサービスがシャットダウン状態から起動しない
□投稿者/ kiku (339回)-(2023/05/16(Tue) 16:34:48)
No101916 (kiku さん) に返信
> ■No101914 (魔界の仮面弁士 さん) に返信
>>■No101913 (kiku さん) に返信
> サービス登録を実施し実施したところ
> 下記のような状態になりました。
>
> 1.パターン1
>   1:ログインしている状態
>   2:サービスを起動
>   3:シャットダウンする
>   4:PCの電源入れる
>   5:ログインする
>  ログを見ると、上記の電源入れるあたりからログが記録
>  されているため、サービスが自動起動されているようです。
>
> 2.パターン2
>   1:ログインしている状態
>   2:サービスを停止し、自動起動になっていることを確認
>   3:シャットダウンする
>   4:PCの電源入れる
>   5:ログインする
>  ログを見ると、何も記録されていない。
>  サービスを見るとサービスが起動されていない。
>
> この状況から、上記のコメントのように
> 起動しているかしていないかをどこかで判定しなくてはならないのか?
> と思っていますが、どのように実装して良いか不明。

現在、上記の状況です。
引き続き情報を求めます。
※ずっと検証してられないので、どこかで諦めるかもしれません。

引用返信 編集キー/
■101937 / inTopicNo.10)  Re[6]: Windowsサービスがシャットダウン状態から起動しない
□投稿者/ kiku (340回)-(2023/05/16(Tue) 17:28:44)
No101936 (kiku さん) に返信
> ■No101916 (kiku さん) に返信
>>■No101914 (魔界の仮面弁士 さん) に返信
> >>■No101913 (kiku さん) に返信
>>サービス登録を実施し実施したところ
>>下記のような状態になりました。
>>
>>1.パターン1
>>  1:ログインしている状態
>>  2:サービスを起動
>>  3:シャットダウンする
>>  4:PCの電源入れる
>>  5:ログインする
>> ログを見ると、上記の電源入れるあたりからログが記録
>> されているため、サービスが自動起動されているようです。
>>
>>2.パターン2
>>  1:ログインしている状態
>>  2:サービスを停止し、自動起動になっていることを確認
>>  3:シャットダウンする
>>  4:PCの電源入れる
>>  5:ログインする
>> ログを見ると、何も記録されていない。
>> サービスを見るとサービスが起動されていない。
>>
>>この状況から、上記のコメントのように
>>起動しているかしていないかをどこかで判定しなくてはならないのか?
>>と思っていますが、どのように実装して良いか不明。
>
> 現在、上記の状況です。
> 引き続き情報を求めます。
> ※ずっと検証してられないので、どこかで諦めるかもしれません。

SQLServerExpressのサービスは、自動起動するのかを念のため検証したところ、
上記パターン1、パターン2と同様な結果になりました。
どうやら、この動作が仕様のようです。

どこかにマイクロソフトのドキュメントがあれば良いのですが。。。。
仕様として諦めようと思います。

もし、ご意見あればコメント欲しいです。
引用返信 編集キー/
■101942 / inTopicNo.11)  Re[7]: Windowsサービスがシャットダウン状態から起動しない
□投稿者/ kiku (344回)-(2023/05/17(Wed) 12:24:18)
No101937 (kiku さん) に返信
> ■No101936 (kiku さん) に返信
>>■No101916 (kiku さん) に返信
> >>■No101914 (魔界の仮面弁士 さん) に返信
>>>>■No101913 (kiku さん) に返信
> SQLServerExpressのサービスは、自動起動するのかを念のため検証したところ、
> 上記パターン1、パターン2と同様な結果になりました。
> どうやら、この動作が仕様のようです。
>
> どこかにマイクロソフトのドキュメントがあれば良いのですが。。。。
> 仕様として諦めようと思います。
>
> もし、ご意見あればコメント欲しいです。

その後、高速スタートアップを無効にすることで
パターン2でも、サービスが自動的に開始されることを
確認しました。

解決とさせて頂きます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -