13

次のリンクでウォークスルーを実行しています:http: //msdn.microsoft.com/en-us/library/zt39148a%28VS.80%29.aspx

私はそれを1行ずつ正確に追跡しました。サービスを正常にインストールしましたが、実行しようとすると、次のエラーメッセージが表示されます。

MyNewService.Exe [5292]で未処理の例外(「System.Security.SecurityException」)が発生しました。

私は多くの人にとってそれが機能するのを見てきました、しかし私が答えを見つけることができなかったけれども、何人かの人々はこの例外を受け取ります。誰かアイデアがありますか?ありがとう。

4

4 に答える 4

19

EventLog.SourceExistsメソッドが、この例外の原因になります。最も一般的な理由は、すべてのイベント ログ (セキュリティ ログを含む) にアクセスしようとすることです。これは、Vista では既定で許可されていません。もう 1 つの理由は、探しているソースがイベント ログに見つからない場合です (これはかなり奇妙です!)。

回避策:

bool sourceFound = false;
try
{
    sourceFound = EventLog.SourceExists("MySource");
}
catch (SecurityException)
{
    sourceFound = false;
}

別のオプションは、単にアクセス許可を昇格させることですが、チュートリアルの手順を順を追って実行すると、サービスは LocalService アカウントで実行されます (この特定のメソッドに対するアクセス許可はありません)。したがって、MSDN のドキュメントには、ServiceInstaller にイベント ソースが存在するかどうかを確認し、存在しない場合はインストーラーでソースを作成するという解決策が記載されています。

于 2009-10-12T13:36:43.997 に答える
1

あなたはマシンのローカル管理者ですか? その場合は、Windows サービスのコンストラクターの先頭に次のコード行を追加します。

System.Diagnostics.Debugger.Break();

サービスの実行が開始されると、このブレークポイントにヒットし、Visual Studio にジャンプできるようになります。例外が発生している場所が見つかるまで、そこからデバッグできます。

于 2009-09-03T16:53:59.043 に答える
0

Process Monitorのコピーを入手して、何が起こるかを監視します。問題が失敗の結果として表示され、そこから調査できます...

編集:明確にするために、それはマイクロソフト(sysinternals)からの無料のツールであり、それは缶に書かれていることをします:)

于 2009-09-03T14:56:37.867 に答える
0

推測ですが、あなたの .exe ファイルはネットワーク フォルダにありますか? または、「インターネットからダウンロード」とマークされていますか? その場合、.NET Framework は、ローカル ドライブに直接あり、インターネットからダウンロードしたものとしてマークされていない場合よりも少ないアクセス許可を割り当てるためです。

于 2009-09-03T17:16:18.670 に答える