2012-04-17 15 views
0

(Visual Studio 8)を使用してWindowsサービスを作成し、installutil.exeツールを使用してWindowsサービスをインストールしましたが、サービス開始時に次のコードを実行したため、方法。Windowsサービスの起動方法にエラーが発生する

protected override void OnStart(string[] args) 
{ 
    FileStream fs = new FileStream(@"e:\mcWindowsService.txt", 
     FileMode.OpenOrCreate, FileAccess.Write); 
    StreamWriter m_streamWriter = new StreamWriter(fs); 
    m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); 
    m_streamWriter.WriteLine("m ready buddy"); 
    m_streamWriter.Flush(); 
    m_streamWriter.Close(); 
} 

Eドライブにファイルを作成する代わりに、私がそれを見つめているときにフォローエラーが表示されています。

ローカルコンピュータのテストサービスインストーラサービスが開始されて停止しました。一部のサービスは、他のサービスやプログラムによって使用されていない場合、自動的に停止します。

+2

サービスを実行しているアカウントにEを読み書きしていますか?ユーザーにはEも存在しますか? (IEはネットワーク共有にマップされたボリュームですか?) – vcsjones

+0

アカウントは管理者権限で実行されており、ローカルシステムで実行しています。 – San

+0

管理者権限で実行していても、サービスがネットワークドライブにアクセスできないことがあります。 Eはネットワークドライブですか? – CoreTech

答えて

2

上記のコードをTry-Catchブロックに入れて、例外ログをイベントログに書き込み、調査します。ブロックを避けるために別々のスレッドに入れておくと良いでしょう。

+0

OK、別のスレッドの下で実行します。問題が解決することがあります。 – San

+0

スレッドありがとうございました。 – San

0

コンソールからサービスを実行する場合は、アカウントにEドライバの権限があることを確認してください。

あなたがあなたのサービスをインストールしている場合は、それが例外をスローしたことに気づいたが、その後、私はほとんど正あなたのコードがクラッシュしたんだ

var serviceInstaller = new ServiceProcessInstaller(); 
      serviceInstaller.Account = ServiceAccount.LocalSystem; 
0

のようなサービスのインストーラのためのアカウントの種類を設定します。上記のtry-catchの提案はこれまでのところ最高ですので、何が爆発するのかを見ることができます。

さらに: OnStartの軽い初期化作業で時間がかかるものは実行しないようにしてください。タイムアウトがあり、そのしきい値を超えた場合、Windowsは起動できないと不平を言うでしょう - それは迷惑な起動状態にとどまります。 OnStartでは、ただタイマーを起動し、そのタイマーのインターバルの満了イベントのハンドラーで重いものを実行します。タイマー _Elapsed。あなたのものを実行する前に、タイマーを一時停止し、操作が終了した後にそれを開始してください。

関連する問題