4

私はWindowsサービスとスレッド化に少し慣れていないので、ここで明らかな間違いを犯していないことを願っています。C#でさまざまなネットワークメンテナンスタイプのアクティビティを実行するために開発したアプリケーションがあります。アプリケーションはローカルマシンで完全に動作します。Windowsサービスとして実行することにしたので、同じコードを使用すると適切な変更が加えられ、ローカルマシンでも正常に動作します。

ネットワーク上のサーバーに移植すると、問題が発生します。Windows以外のサービスコードも正常に機能し、期待どおりに実行されます。ただし、Windowsサービスコードは何もしないようです。プロセスは正常にインストールされ、正常に開始/停止しますが、コードが実行されていないようです。VisualStudioでWindowsサービスをデバッグする際のヘルプもありがたいです。これが私のOnStartプロシージャのコードで、実行されていないようです。

        smThread = new Thread(delegate() { sm.RunServerMonitor(ref run); });
        smThread.Start();

        dailyThread = new Thread(delegate() { dailyEvents(); });
        dailyThread.Start();

Windows以外のサービスコードが機能するため、アクセス許可タイプの問題が発生しているとは思わない。ただし、サービスがリモートでタスクを実行できるようにするために設定する必要のあるアクセス許可が、同じことを行うプレーンなc#コードに必要なアクセス許可とは異なる場合を除きます。 。

ありがとう、マット

4

2 に答える 2

5

コメントをありがとう、問題は許可関連でした。サービスをクリックし、[ログオン]タブでアカウントを管理者権限を持つアカウントに変更すると、正常に機能します。皆様のご協力に感謝いたします。

于 2012-12-21T18:55:50.993 に答える
2

OnStartメソッド内のコードの最初の行として次の行を追加します

while(!System.Diagnostics.Debugger.IsAttached)
{
    System.Threading.Thread.Sleep(100);
}

smThread = new Thread(delegate() { sm.RunServerMonitor(ref run); });
smThread.Start();

dailyThread = new Thread(delegate() { dailyEvents(); });
dailyThread.Start();

whileループ後の次の行のコードにブレークポイントを設定して、サービスを開始できます。次に、Visual Studioから、デバッグ用のサービスのプロセスに接続します。

于 2012-12-21T15:55:41.147 に答える