2011-08-12 6 views
0

実行中のWindowsサービスがあります。私はアプリケーションの新しいバージョンを作成しました。私はWindowsサーバーに行き、サービスを停止しました。私はその後、サービスの新しい.exeをコピーし、サービスを開始しようとしました。サービスは開始せず、タイムアウトして開始しようとしていますが、理由を把握できません。私は前にこれをしたことが肯定的です。サービスをアンインストールして再インストールする必要がありますか?新しいWindowsサービスアプリケーションのバージョンが起動しません。

サーバー:のWindows Server 2003 R2 アプリケーションの.NETバージョン:VS 2005 言語VB.NET

のOnStart方法:

Protected Overrides Sub OnStart(ByVal args() As String) 
    ' Add code here to start your service. This method should set things 
    ' in motion so your service can do its work. 
    Me.Timer1.Enabled = True 
End Sub 

のInitializeComponent: CHECKDB_INTERVAL_TIME = 10

で開発2.0
Private Sub InitializeComponent() 
    Dim iWaitTime As Int16 
    iWaitTime = CType(ConfigurationManager.AppSettings("CHECKDB_INTERVAL_TIME"), Int16) 
    Me.components = New System.ComponentModel.Container 
    Me.Timer1 = New System.Timers.Timer() 
    Me.Timer1.Interval = iWaitTime * 60000 
    ' 
    'HarleyCloser 
    ' 
    Me.ServiceName = "MyService" 

End Sub 

Friend WithEvents Timer1 As System.Timers.Timer 

問題が見つかりました。この問題は、デバッグモードとリリースモードで異なる何かをするために使用されていたディレクティブで起こっていました。

+2

イベントビューアにエラーメッセージがありますか? – iandotkelly

+2

* *イベントビューア*の*アプリケーションログ*とは何ですか? – jgauffin

+1

イベントビューアに何も表示されない場合は、デバッグ中にイベントログエントリやメッセージを「DoSomeWorkを呼び出す...」や「DoSomeWork Completed ...」などのように追加することをお勧めします特に、完了するまでに時間がかかる可能性のあるプロセスを含むループ内。サービスアプリケーションを簡単にデバッグするために私が考え出した唯一の方法です。これは、コード内でサービスがハングしているか、予想以上に長い時間がかかっているかを表示します。 – David

答えて

0

問題が見つかりました。デバッグディレクティブでサービスに隠されたコードがいくつかありました。デバッグでコンパイルされたサービスは、コンソールアプリケーションのように実行され、リリースでコンパイルされた場合はサービスとして実行されます。したがって、OnStartはコンソールアプリケーション全体を実行しようとしていたため、サービスはタイムアウトしていました。

0

サービスexeを変更する場合は、前のバージョンをアンインストールして新しいものをインストールしてください。また、新しいものをインストールする前に、アンインストールを完了するためにリブートする必要があることがよくあります。

+0

これは機能しませんでした。 – Adam

0

サービスを停止して、exeを置き換えて再起動するのがいいでしょう。これは何度もやっています。

バージョン間で変更したものは、あなたのOnStartで長時間かかるタスクを入れます。 OnStartは30秒以内に開始から終了まで行わなければなりません。 OnStartコードでブロックしているものがないかチェックしてください。

OnStartをデバッグする必要がある場合は、here is some tipsを実行する必要がありますが、30秒の制限が適用されます。別のヒントは、OnStartにいくつかのロギングメッセージを入れて、Windowsログにコードがどれだけ届いているかを示すメッセージを追加します。

+0

私はタイマーを使用していて、OnStartイベントでタイマーを有効にしています。サービスが開始しようとしている間、これは発砲し、おそらくタイムアウトになりますか? – Adam

+0

タイマーの種類は、.netフレームワークにはいくつかあります。あなたが行うことができる最も有益なことは、元の質問にOnStartメソッド全体を編集として投稿することです。貼り付けてハイライトし、 '{}'ボタンをクリックするだけで、正しくフォーマットされます。 –

0

古いサービスをアンインストールしてからもう一度新しいサービスをインストールするには、「installutil」を使用する必要があります。 Visual Studioのコマンドプロンプトから "installutil"を使用できます。

サービスのOnStartメソッドの実行に時間がかかる場合は、そのOnStartメソッド内のすべての作業を行うタイマーを開始したい場合があります。

+0

これは機能しませんでした。 – Adam

0

インストールとアンインストールには、installutilを使用する必要があります。いつも.EXEを置き換えるのは良い方法ではありません。

また、サービスが実行されるユーザーを確認する必要があります。デフォルトでは、そのローカルサービスには多くの特権があると思うので、コードでサービスを設定するか、サービススナップインを使用してユーザーを設定できます。

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.User; this.serviceProcessInstaller1.Password = ConfigurationSettings.AppSettings ["password"]; this.serviceProcessInstaller1.Username = ConfigurationSettings.AppSettings ["username"];

+0

サービスをアンインストールして再インストールしても機能しませんでした。 – Adam