5

C# で記述された Windows サービスがあります。サードパーティの COM コンポーネントを呼び出すとクラッシュします。この問題は、Windows 7 (x86 および x64) でのみ発生します。Windows 7 (x86 および x64) でコンソール アプリケーションと同じサービス コードを実行すると、正常に動作します。

Windows 2003 で同じサービスを実行すると、正常に動作します。UAC に関連している可能性があると思います。問題の原因を特定するために、このサービスのデバッグに関する提案/指示を探しています。ntdll.dll のデバッグ シンボルを使用しますか? イベントログからの情報の下。

Event ID: 1000, Level: Error
Faulting application name: ServiceHost.exe, version: 1.0.0.0, time stamp: 0x4f87bc9a
Faulting module name: ntdll.dll, version: 6.1.7601.17725, time stamp: 0x4ec49b60
Exception code: 0xc0000005
Fault offset: 0x0002bcbb
Faulting process id: 0x151c
Faulting application start time: 0x01cd1939c9017b2d
Faulting application path: E:\ServiceHost\bin\Debug\ServiceHost.exe
Faulting module path: C:\Windows\SYSTEM32\ntdll.dll
Report Id: 08da6aa3-852d-11e1-a889-00155d016f32
4

3 に答える 3

7

野蛮な推測として、あなたはセッション0の分離に反するかもしれません:

WindowsXP®、WindowsServer®2003、および以前のバージョンのWindows®オペレーティングシステムでは、すべてのサービスは、コンソールにログオンした最初のユーザーと同じセッションで実行されます。このセッションはセッション0と呼ばれます。セッション0でサービスとユーザーアプリケーションを一緒に実行すると、セキュリティリスクが発生します。これは、サービスが昇格された特権で実行されるため、自身の特権レベルを昇格させる手段を探している悪意のあるエージェントのターゲットになるためです。

これが通常サービスの問題を引き起こすのは、たとえば、何かがUIを作成しようとした場合です。

この問題に対処する最も簡単な方法は、サードパーティコンポーネントのベンダーに相談し、サービスでの使用がサポートされていることを確認することです。ただし、ベンダーが存在しない場合は、それが不可能な場合があります。

サービスの実行中に問題が発生した場合は、デバッガーを接続して、エラーが発生した時点でダンプをキャプチャできる可能性があります(たとえば、Windowsのデバッグツールのadplusなどを使用します)。サービスの起動中に問題が発生している場合は、診断が難しい場合があります。

エラーを引き起こすコード内の最後の関数呼び出しを分離してそこから診断を試みる必要があります。

于 2012-04-13T06:40:14.203 に答える
1

サービスのアカウントを他のアカウントに変更してみてください。のようにLocal System

于 2012-04-13T06:30:00.237 に答える
0

サード パーティの COM コンポーネントは、パフォーマンスを向上させるためにいくつかのハック (解放された API の一部) を使用しOSており、Windows の次のバージョンでは予告なくインターフェイスが変更されています。

これは、初期の Windows (Norton、Office...) からの古いポリシーであり、カーネルに直接呼び出しを行い、...

于 2012-04-13T06:51:26.677 に答える