0

(Visual Studio 8) を使用して Windows サービスを作成し、installutil.exeツールを使用してインストールしましたが、サービス開始メソッドで次のコードを実行したため、適切な結果が得られません。

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ドライブにファイルを作成する代わりに、それを見つめていると次のエラーが表示されます!

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

4

3 に答える 3

2

上記のコードを Try-Catch ブロックに入れ、例外がないかイベント ログに書き込み、調査します。また、ブロックを回避するために、それらを別のスレッドに配置することをお勧めします。

于 2012-04-17T17:50:10.057 に答える
0

私はあなたのコードがクラッシュすることをほぼ確信しています。上記のtry-catchの提案はこれまでのところ最高なので、何が爆発するかを確認できます。

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

于 2012-04-17T20:58:00.243 に答える
0

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

サービスをインストールし、例外がスローされたことに気付いた場合は、次のようにサービスインストーラーのアカウントタイプを設定します。

var serviceInstaller = new ServiceProcessInstaller();
            serviceInstaller.Account = ServiceAccount.LocalSystem;
于 2012-04-17T19:54:07.683 に答える