ウィンドウサービスにスレッドを作成できません

私は困惑している。 例えば、10秒ごとに何かをするサービスを作るだけです。 最初はSystem.Timers.Timerを使っていました。私のPC上ではすべてOKだった。しかし、私は顧客のWindows Server 2003サーバーの問題に直面していました。 System.Timers.Timer timer1_Elapsedは発砲せず、System.Threading.Timerのためにこのタイマーを変更しました。同じ画像が表示されます。それは私のPC上で動作し、顧客のサーバー上で動作しません。 私はこれらのタイマを両方ともドロップし、このタスクにBackgroundWorkedを使用した後 コード:

public partial class XXXService : ServiceBase
{
    public XXXService()
    {
        InitializeComponent();



        if (!System.Diagnostics.EventLog.SourceExists("XXXSource1"))
            System.Diagnostics.EventLog.CreateEventSource("XXXSource1", "XXXLog");
        EventXXXLog.Source = "XXXSource1";
        EventXXXLog.Log = "XXXLog";
    }

    private ManualResetEvent threadSleepEvent = new ManualResetEvent(false);
    private BackgroundWorker fBg = new System.ComponentModel.BackgroundWorker();

    protected override void OnStart(string[] args)
    {
        EventXXXLog.WriteEntry("XXX Service has started.");

        //fTimer.Enabled = false;
        //fTimer.Interval = 1000;
        //fTimer.Elapsed += new System.Timers.ElapsedEventHandler(fTimer_Elapsed);
        //fTimer.Start();

        //fTimer = new System.Threading.Timer(new System.Threading.TimerCallback(fTimer_Elapsed), null, 1000, 5000);

        fBg.DoWork += new System.ComponentModel.DoWorkEventHandler(fBg_DoWork);

        EventXXXLog.WriteEntry("XXX Service has started. test 2");
        fBg.RunWorkerAsync();
        EventXXXLog.WriteEntry("XXX Service has started. test 3");
    }

    void fBg_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
    {
        //EventXXXLog.WriteEntry("test 4");
        lock (EventXXXLog)
        {
            EventXXXLog.WriteEntry("test 4");
        }
    }
}

すべて同じ。私のPC上ではすべて正常ですが、Server 2003のコンプでは動作しません。テスト1、テスト2、テスト3のログメッセージが表示され、「テスト4」は表示されません。 BackgroundWorkerはfBg_DoWorkを実行していないようです。

原因は何ですか?何か案は?

1
これはおそらく適度に役立ちますが、2003マシンの設定に問題がある可能性があると考えられます。少なくとも、私はきれいな2003年のインストールでこれを試してみましょう。
追加された 著者 Grant H.,
あなたが実行していた正確なコードですか?それを投稿するためにそれをトリミングしましたか?
追加された 著者 Rob Levine,
私はあなたがこれを説明するかもしれない何かを整理したかどうか疑問に思っています - 私はそこにサンプルで何かが間違って見ることができません。上記のこの正確なコードはまだ問題を呈していますか?
追加された 著者 Rob Levine,
@RobLevineはい、私はトリミングしました。
追加された 著者 Don Tomato,
@RobLevine、ありがとう。私はこのバグの原因を発見しました。アプリケーションモード(サービスではない)で使用されるオブジェクトへの参照を削除することを忘れてしまいました。私はこのトピックを閉じる方法を知らない。
追加された 著者 Don Tomato,

1 答え

前にログを取得していますか?

ロック(EventEDILog)

なぜなら、EventEDILogが別のスレッドによってロックされていてロック解除されていない場合 BackgroundWorkerは、EventEDILogがロック解除されるのをブロックされます。

0
追加された
私はtryiedと 'ロック'と 'ロック'なし。すべて同じ。 :(
追加された 著者 Don Tomato,