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

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

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

Re[6]: サービス設定GUI


(過去ログ 108 を表示中)

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

■64588 / inTopicNo.1)  サービス設定GUI
  
□投稿者/ ひとみ (1回)-(2012/12/09(Sun) 15:24:37)

分類:[.NET 全般] 

サービス設定用アプリを作成してます。
設定ファイルに設定を保存し、サービスを再起動するだけです。
サービス側はStart時に設定ファイルを読み込みます。
今はこの設定ファイル共有方法で悩んでいます。

サービスプログラムの設定GUIの設計のお手本は無いですか?
できればc#だと助かります。
引用返信 編集キー/
■64589 / inTopicNo.2)  Re[1]: サービス設定GUI
□投稿者/ オショウ (49回)-(2012/12/09(Sun) 16:46:43)
> サービスプログラムの設定GUIの設計のお手本は無いですか?

  一般的には、サービス起動時にパラメータとして情報を渡す。
  動的に・・・とすると、.NETなので、.NETリモーティングを使って
  情報を渡す。

以上。参考まで
引用返信 編集キー/
■64590 / inTopicNo.3)  Re[2]: サービス設定GUI
□投稿者/ ひとみ (3回)-(2012/12/09(Sun) 19:01:14)
フォルダを監視する種類のサービスですが、監視するフォルダをたまに変更する必要があるので、設定用アプリを作ってます。
サービスに設定されているフォルダを取得して画面に表示し、変更されたらサービスの動作を変える動きになります。
双方向になるので、.NETリモーティングだと面倒では無いですか?.NETリモーティングをあまり使ったことが無いので苦手意識があるだけかもしれませんが、、、

サービスの作り方は有っても、設定を変更するGUIのサンプルはあまり無いですね。
まずは、.NETリモーティングを勉強して見ます。



No64589 (オショウ さん) に返信
>>サービスプログラムの設定GUIの設計のお手本は無いですか?
>
>   一般的には、サービス起動時にパラメータとして情報を渡す。
>   動的に・・・とすると、.NETなので、.NETリモーティングを使って
>   情報を渡す。
>
> 以上。参考まで
引用返信 編集キー/
■64591 / inTopicNo.4)  Re[1]: サービス設定GUI
□投稿者/ 渋木宏明 (23回)-(2012/12/09(Sun) 19:07:17)
渋木宏明 さんの Web サイト
> 今はこの設定ファイル共有方法で悩んでいます。

具体的に何が問題ですか?

めんどくさかったらレジストリでもいいんじゃないでしょうか。

引用返信 編集キー/
■64592 / inTopicNo.5)  Re[2]: サービス設定GUI
□投稿者/ ひとみ (5回)-(2012/12/09(Sun) 19:42:38)
サービスはLocal Seviceで、設定用アプリはユーザーアカウントなので、ユーザープロファイル周りが悩んでいます。(知識不足)
現在はサービスの設定は Properties.Settings.Default.XXX を参照してます。これを外部から変更しようと思ってました。
.configファイルはあまり手間をかけなくてもインストーラ/アンインストーラが面倒を見てくれるので良いかと思ってましたがかえって手間がかかってます。

やはりリジストリが楽ですかね。

No64591 (渋木宏明 さん) に返信
>>今はこの設定ファイル共有方法で悩んでいます。
>
> 具体的に何が問題ですか?
>
> めんどくさかったらレジストリでもいいんじゃないでしょうか。
>
引用返信 編集キー/
■64593 / inTopicNo.6)  Re[3]: サービス設定GUI
□投稿者/ オショウ (50回)-(2012/12/09(Sun) 21:04:42)
> やはりリジストリが楽ですかね。

  OSは?
  レジストリアクセスに管理者権限必要になりますが・・・
  それは問題ではない?

以上。
引用返信 編集キー/
■64594 / inTopicNo.7)  Re[4]: サービス設定GUI
□投稿者/ ひとみ (6回)-(2012/12/09(Sun) 22:18:48)
OSは7ですが、XP以降は対象にしたいです。
サービスの設定変更なので、最悪管理者権限は仕方が無いかもしれません。

本当はこんなところに時間をかけたくないし、環境によってうまく動かないトラブルも避けたいです。
本当はサンプルをコピー&ペーストで終わらせたかったのですが、一筋縄には行きませんでした。
Microsoftがサンプルを提示しても良いと思うのですが、、、、
良いサンプルなど有りませんか?

No64593 (オショウ さん) に返信
>>やはりリジストリが楽ですかね。
>
>   OSは?
>   レジストリアクセスに管理者権限必要になりますが・・・
>   それは問題ではない?
>
> 以上。
引用返信 編集キー/
■64595 / inTopicNo.8)  Re[5]: サービス設定GUI
□投稿者/ オショウ (51回)-(2012/12/09(Sun) 22:45:04)
> 良いサンプルなど有りませんか?

  サービスの起動時パラメータ方式なら・・・
  ttp://www.c-sharpcorner.com/UploadFile/ankithakur/Passing_parameters_to_Windows_Services10062006000204AM/Passing_parameters_to_Windows_Services.aspx

  リモーティングなら・・・
  ttp://www.codeproject.com/Articles/1111/How-To-Host-NET-Remoting-Objects-in-Windows-Servic

※ 検索すれば、それなりにヒットするもんですヨ!

※ リモーティングの場合、TCPポートを開ける必要があります。
  セキュリティーの関係ですネ!
  その操作もプログラムで可能ですが、余計なスキルが要求されますので
  パラメータ変更時には、サービスを停止させ、パラメータ付で再起動と
  言うのがよいでしょう。

  レジストリの場合、タイマーでレジストリの変更を監視しないといけな
  いことになってしまいますので、それも面倒・・・

参考と言うことで・・・


引用返信 編集キー/
■64596 / inTopicNo.9)  Re[6]: サービス設定GUI
□投稿者/ 渋木宏明 (24回)-(2012/12/09(Sun) 22:58:43)
渋木宏明 さんの Web サイト
>サービスの設定変更なので、最悪管理者権限は仕方が無いかもしれません。

そう思います。

一般ユーザ権限でサービスの設定がぽんぽん変更できてしまうのは問題でしょう。

>   レジストリの場合、タイマーでレジストリの変更を監視しないといけな
>   いことになってしまいますので、それも面倒・・・

>設定ファイルに設定を保存し、サービスを再起動するだけです。

とのことなので、レジストリに設定を書きだしてサービスを再起動すればよろしいんじゃないでしょうか。

引用返信 編集キー/
■64597 / inTopicNo.10)  Re[6]: サービス設定GUI
□投稿者/ ひとみ (7回)-(2012/12/09(Sun) 23:52:01)
起動パラメータ方式はサービスの登録を自力で行うということですかね?

リモーティング方式はチョットすぐには理解出来ませんでした。

No64595 (オショウ さん) に返信
>>良いサンプルなど有りませんか?
>
>   サービスの起動時パラメータ方式なら・・・
>   ttp://www.c-sharpcorner.com/UploadFile/ankithakur/Passing_parameters_to_Windows_Services10062006000204AM/Passing_parameters_to_Windows_Services.aspx
>
>   リモーティングなら・・・
>   ttp://www.codeproject.com/Articles/1111/How-To-Host-NET-Remoting-Objects-in-Windows-Servic

引用返信 編集キー/
■64598 / inTopicNo.11)  Re[7]: サービス設定GUI
□投稿者/ ひとみ (8回)-(2012/12/09(Sun) 23:57:29)
レジストリ方式か独自XMLかが敷居が低そうですので、当面はどちらかでしのぐことになるかと思います。

No64596 (渋木宏明 さん) に返信
> >設定ファイルに設定を保存し、サービスを再起動するだけです。
>
> とのことなので、レジストリに設定を書きだしてサービスを再起動すればよろしいんじゃないでしょうか。
>
引用返信 編集キー/
■64604 / inTopicNo.12)  Re[8]: サービス設定GUI
□投稿者/ 魔界の仮面弁士 (107回)-(2012/12/10(Mon) 20:20:21)
2012/12/10(Mon) 20:24:18 編集(投稿者)

No64598 (ひとみ さん) に返信
>>>設定ファイルに設定を保存し、サービスを再起動するだけです。
>>とのことなので、レジストリに設定を書きだしてサービスを再起動すればよろしいんじゃないでしょうか。
> レジストリ方式か独自XMLかが敷居が低そうですので、当面はどちらかでしのぐことになるかと思います。

良いと思いますよ。サービスを再起動しても構わないのなら、
 ・レジストリを使う方法
 ・外部ファイル(XML等)を使う方法
 ・起動パラメータを使う方法
のいずれであっても、充分に対応できると思います。


なお、サービスの再起動方法としては:

(案1).NET の ServiceController クラスを使う
http://www.atmarkit.co.jp/fdotnet/dotnettips/364winservice1/winservice1.html

(案2)WMI の Win32_Service クラスを使う
http://www.atmarkit.co.jp/fdotnet/dotnettips/364winservice1/winservice1.html

(案3)コマンドプロンプトにて NET STOP / NET START
http://www.tkssoft.com/cmd/cmd028.html



No64589 (オショウ さん) に追記
>   動的に・・・とすると、.NETなので、.NETリモーティングを使って
>   情報を渡す。

今回は動的変更ではなく、再起動だけで済ませられるとは思いますが、
もしも設定値の動的な変更のためにプロセス間通信が必要となるのであれば、
Visual Studio のバージョン(というよりも .NET Framework のバージョン)にご注意下さい。


.NET Framework 2.0 以下での開発なら、.NET Remoting という選択肢もアリですが、
現行バージョンにおいてはあまり推奨されていなかったはずです。
http://msdn.microsoft.com/ja-jp/library/72x4h507.aspx


.NET Framework 3.0 以降では、かわりに WCF を使うことも検討してみてください。
http://msdn.microsoft.com/ja-jp/vstudio/aa663324.aspx
http://msdn.microsoft.com/ja-jp/library/ms733069.aspx

# codezine や @it あたりに、WCF なサンプルがあったはず。


パフォーマンスに関する記事として:
http://msdn.microsoft.com/ja-jp/library/bb310550.aspx
http://blogs.msdn.com/b/tsmatsuz/archive/2009/09/25/wcf-scalable-practical.aspx
引用返信 編集キー/
■64620 / inTopicNo.13)  Re[9]: サービス設定GUI
□投稿者/ ひとみ (9回)-(2012/12/11(Tue) 23:09:47)
ありがとうございます。
WFCって何?みたいなレベルなので、すべては理解出来ませんでした。
また悩んだ時にこの内容を見返してその時勉強します。
今回はEXEと同じフォルダにxmlでも生成して対応します。
まだアンインストーラで綺麗に掃除できるか確認していませんが、
仕様からしたら程よい設計だったのかな?と感じる事が出来ました。

あっ、サービスの開始でチョットだけ躓いたのは管理者権限で実行させる為のアプリケーションマニュフェスト設定でした。

今回は、exe.config の仕組みが使えると思ったけど、使いこなせなかったのが失敗でした。
皆さん色々ありがとうございました。

No64604 (魔界の仮面弁士 さん) に返信
> 2012/12/10(Mon) 20:24:18 編集(投稿者)
>
> ■No64598 (ひとみ さん) に返信
> >>>設定ファイルに設定を保存し、サービスを再起動するだけです。
> >>とのことなので、レジストリに設定を書きだしてサービスを再起動すればよろしいんじゃないでしょうか。
>>レジストリ方式か独自XMLかが敷居が低そうですので、当面はどちらかでしのぐことになるかと思います。
>
> 良いと思いますよ。サービスを再起動しても構わないのなら、
>  ・レジストリを使う方法
>  ・外部ファイル(XML等)を使う方法
>  ・起動パラメータを使う方法
> のいずれであっても、充分に対応できると思います。
>
>
> なお、サービスの再起動方法としては:
>
> (案1).NET の ServiceController クラスを使う
> http://www.atmarkit.co.jp/fdotnet/dotnettips/364winservice1/winservice1.html
>
> (案2)WMI の Win32_Service クラスを使う
> http://www.atmarkit.co.jp/fdotnet/dotnettips/364winservice1/winservice1.html
>
> (案3)コマンドプロンプトにて NET STOP / NET START
> http://www.tkssoft.com/cmd/cmd028.html
>
>
>
> ■No64589 (オショウ さん) に追記
>>  動的に・・・とすると、.NETなので、.NETリモーティングを使って
>>  情報を渡す。
>
> 今回は動的変更ではなく、再起動だけで済ませられるとは思いますが、
> もしも設定値の動的な変更のためにプロセス間通信が必要となるのであれば、
> Visual Studio のバージョン(というよりも .NET Framework のバージョン)にご注意下さい。
>
>
> .NET Framework 2.0 以下での開発なら、.NET Remoting という選択肢もアリですが、
> 現行バージョンにおいてはあまり推奨されていなかったはずです。
> http://msdn.microsoft.com/ja-jp/library/72x4h507.aspx
>
>
> .NET Framework 3.0 以降では、かわりに WCF を使うことも検討してみてください。
> http://msdn.microsoft.com/ja-jp/vstudio/aa663324.aspx
> http://msdn.microsoft.com/ja-jp/library/ms733069.aspx
>
> # codezine や @it あたりに、WCF なサンプルがあったはず。
>
>
> パフォーマンスに関する記事として:
> http://msdn.microsoft.com/ja-jp/library/bb310550.aspx
> http://blogs.msdn.com/b/tsmatsuz/archive/2009/09/25/wcf-scalable-practical.aspx
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -