質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

Q&A

1回答

4567閲覧

C#(.Net Framework 4.5)でサービスの操作を行いたい

capoco

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

1グッド

2クリップ

投稿2018/01/24 07:49

編集2022/01/12 10:55

C#(.Net Framework 4.5)ASP.NETを用いて、WindowsフォームアプリケーションWebアプリケーションを作成しております。
その処理の中で、特定のサービスが起動している必要があり、
特定のサービスの起動を行いたく、下記のようなコードを記述しました。

C#

1System.ServiceProcess.ServiceController sc = new System.ServiceProcess.ServiceController("hogehoge", "."); 2 3if (sc.Status == System.ServiceProcess.ServiceControllerStatus.Stopped) 4{ 5 try 6 { 7 sc.Start(); 8 sc.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Running, new TimeSpan(0, 0, 10)); 9 } 10 catch (Exception ex) 11 { 12 return; 13 } 14}

そこで以下の不明点が発生したので、ご助言頂きたく、質問させて頂きます。

質問①: タイムアウトについて

Startメソッドにてサービスの起動を行っておりますが、
ユーザが手動でサービスの開始をする場合、
規定では30秒(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServicesPipeTimeoutの値)経過すると
自動で起動エラー(タイムアウト)になるのですが、本メソッドも同様に上記レジストリの値分待機しますでしょうか。

質問②: エラー内容について

Startメソッドが失敗し、Runnningステータスにできなかった場合(e.g.: タイムアウト、管理者権限不足等)、
例外等がスローされずに後続の処理が実行されます。
例外がスローされないのは別に良いのですが、"何故起動に失敗したのか"を知る術はありますでしょうか。

質問③: WaitForStatusについて

全て同一スレッドで実行しているのですが、Startメソッド実行時に処理がそこで停止しているようです。
C#でのサービス起動処理の仕方を検索した際、参考にしたサイトではWaitForStatusをコールしていたので
そのように作りましたが、本メソッドをコールする必要はあるのでしょうか。

  • Startメソッドで開始を試みる(ここで処理待機)⇒失敗する⇒WaitForStatusで処理待機(Startメソッドは既に失敗しているのでRunになることはないので無駄な待機となる)

となってしまう気がするのですが、間違っておりますでしょうか。

五月雨で申し訳ございませんが、ご回答頂けますでしょうか。
宜しくお願い致します。

◆追記①

x_x様、SurferOnWww様、ご回答頂きありがとうございます。

申し訳ございません、根本的に書き間違いをしており、Webアプリケーションではなくフォームアプリケーションです。
なのでIIS等のWebサーバは関係しておらず、自身の端末上のサービスを自身が起動したい、だけとなります。

サービスとはいわゆる Windows Service ですか?

はい、Windows Serviceです。

具体的に何をしたいのですか? 

第三者の作成したサービスがあり、そのサービスはマシン起動時に自動で立ち上がるように
クライアント端末にインストールされております。
そして、私の作成したフォームアプリケーションでは、上記のサービスが立ち上がっていることが前提に
処理を組んでおります。

しかし、たまにマシン起動時にサービスが立ち上がらないケースがあるようで、
その場合はフォームアプリケーション起動時に、"特定のサービスが立ち上がっていない場合に起動する"処理を追加したいです。

そこで前述したソースを書いてみたのですが、不明点がいくつかあがり、
本質問を行わせて頂きました。

拙い文章で申し訳ございませんが、必要な情報は足りてますでしょうか。

◆追記②

SurferOnWww様、ご回答頂きありがとうございます。

申し訳ございません、ASP.NETについてさして気にせず、普段使っているからという理由で書いてしまいました。
ASP.NETはWebアプリケーションのフレームワークでした、、
正確には".Net Framework 4.5を用いて作っているWindowsフォームアプリケーション"です。
度重なる回答、お手数おかけ致します…

TAKAYASU👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

x_x

2018/01/24 08:29

そもそも、ASP.NETからWindowsサービスを起動する権限があるでしょうか? サービスはずっと起動したままというものではないのですね?
退会済みユーザー

退会済みユーザー

2018/01/24 14:00

サービスとはいわゆる Windows Service ですか? 具体的に何をしたいのですか? ASP.NET でワーカープロセスから Windows Service を起動するというのは少なくとも自分は聞いたことがないです。失礼ながら、何か見当違いがあるような気がするのですが・・・ 具体的に何がしたいかを書いていただけると、代案が出てくるかもしれません。
退会済みユーザー

退会済みユーザー

2018/01/25 01:31 編集

> ASP.NETを用いて、Windowsフォームアプリケーションを作成しております。 ← 質問を書き直された(Web アプリケーション ⇒ Windows フォームアプリケーション)ようですが、まだ変です。ASP.NET とは何かご存知ですか? ASP.NET で Windows フォームアプリは作れないと思いますが? どういうことですか?
退会済みユーザー

退会済みユーザー

2018/01/25 05:41 編集

どのような Windows Service なのか不明なので可能かどうかわかりませんが、可能であれば Windows Service に頼らず Windows Forms アプリ内で完結できるように、Windows Forms 内で必要な処置をすべて実装するのがよさそうですが? Windows Service で何をしているのかを書いていただけると代案が出てくるかもしれません。
guest

回答1

0

回答がつかないようなので答えますが、わたしはプログラムから普通のexeを起動したことはありますが、サービスを起動したことはありません。その前提で

  1. タイムアウトについて

TimeSpanで10秒を指定しているようですが?
30秒にしたほうがいいかもしれません。

  1. エラー

例外を握りつぶしているのでそうなります。
スローしたければ変更してください。
エラー内容はex.Messageにあるかもしれません。

C#

1 catch (Exception ex) 2 { 3 throw; 4 }
  1. WaitForStatus

起動待ちをしているだけなので、起動してしまえばタイムアウトを待たずにすぐに抜けます。
待たなければ起動前に後続の処理をすることになり、「サービスが起動している必要があり」が満たせなくなり、何のために起動しようとしたのかわからなくなってしまいます。

投稿2018/01/26 08:19

編集2018/01/26 08:20
x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

x_x

2018/01/26 08:21

3.と書いたのに1.になってますね。直し方がわからないのでいまはこのままで
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問