0

背景: 2 つの c ファイルを含む DLL を作成しました。これらの c ファイルは、class 型のポインターであるユーザー定義型 (class_pointer と呼びます) を定義する 3 番目の c ファイルを参照します。

例 typedef class pointer_class *class_pointer;

次にクラスを定義します: typedef class pointer_class {..}

pointer_class には、元の 2 c ファイルが class_pointer を介して使用するさまざまな変数と関数が関連付けられています。

この DLL を ASP.NET C# Web アプリケーションで使用しています。PInvoke を使用して関数を dll にインポートしています。しかし、class_pointer を含むこれらの関数を呼び出すと、IIS で実行されている Web サイトがハングします。これは、VS デバッガーでは発生しません。上記のclass_pointersをコメントアウトすると、すべてがスムーズに実行されます.DLLとすべてにアクセスできます.

NETWORK SERVICEが読み取り/実行権限を持つように、binディレクトリに含まれるすべてのDLLの権限を(安全のために)変更しようとしました。dll は class_pointers がなくても動作するので、権限の問題ではないと思います。これらの class_pointers が関係しているときに IIS がハングする原因について誰かアドバイスはありますか?

4

1 に答える 1

0

Microsoft のデバッグ ツールの助けを借りて、ようやくこれを理解することができました。

class_pointers は、私の職場を離れた別の開発者によって作成されました。pointer_class には、現在のアプリケーション パスを取得する関数がありました。Web 上で実行する場合、これは SYSWOW64 の inetsrv ディレクトリに設定されました (私が実行していたマシンは 64 ビット マシンでした)。この問題を解決するために、.exe アプリケーションが実行されていた場所 (SYSWOW64/inetsrv) ではなく、Web を実行しているときにアプリケーション パスを Web サイトに設定しました。

アプリケーション パスが間違っていたため、ネイティブ dll が一部のファイルをロードできず、ポップアップ警告メッセージが表示されていました。これらのポップアップ メッセージはユーザーの応答を待っていましたが、Web 上で応答を取得できなかったため、アプリケーションがハングしました。

これが他の誰かに役立つことを願っています!

于 2012-05-03T18:18:37.377 に答える