2009-09-01 5 views
0

ネイティブCアプリケーションから呼び出された混在モードのDLLがロードされません: Unknownモジュールで 'System.IO.FileLoadException'の未処理の例外が発生しました。混在モードアプリケーションがネットワーク共有から起動したときに、C++ DLL関数呼び出しに失敗しました。アンマネージcアプリケーションから呼び出されました

追加情報:ファイルまたはアセンブリ 'XXSharePoint、Version = 0.0.0.0、Culture = neutral、PublicKeyToken = e0fbc95fd73fff47'またはその依存関係の1つを読み込めませんでした。最小限の許可要求を許可することができませんでした。 (HRESULTからの例外:0x80131417)

私の環境は次のとおりです。ネイティブCアプリケーションは、混在モードのC++ DLLを呼び出し、C#DLLをロードします。これはローカルドライブからロードされたときに正しく動作しますが、ネットワークドライブ上記のメッセージで失敗します。

GetProcAddressと同様に、LoadLibraryの呼び出しが成功します。私が関数を呼び出すと、読み込みエラーが発生します。

私はCアプリケーションにデジタル署名をしており、2つのDLLに「強力な名前」の署名を行っています。上記のメッセージのPublickKeyTokenは、指定されたDLLと一致します。私はまた、その厳密な名前のkeytokenにFullTrustを与えるために、クライアントにCASPOLコマンドを発行しました。それがうまくいかなかった場合、CASPOLコマンドを実行して、ネットワークドライブのURL(アプリケーションのディレクトリへのパスを含む)にFullTrustを許可しました。結果に変化はない。

すべての依存関係を削除してみましたので、最初の混合モードDLLだけがありました。すべての関数のボディを "成功"整数値の単なる戻り値に置き換えました。結果は変わらない。私はそれを混合モードからWin32に変更し、構成プロパティ>>一般>>共通言語ランタイムサポートを「共通言語ランタイムサポート」から「共通言語ランタイムサポートなし」に変更した場合のみ、DLLを呼び出しても期待される結果が得られました「成功」整数の戻り値を返します)。

答えて

1

あなたはこの共有でコードを実行する権限を持っていません。私はあなたが共有から任意の.NETアプリを実行することはできないと思う。試してみて、.NET実行可能ファイルを共有ファイルに配置して実行してみてください。それが動作しない場合は、共有を使用するには、あなたの.net設定にアクセス許可を追加する必要があります。

+0

私が読んだところでは、強力な名前の署名をDLLに追加してから、CASPOLコマンドを使用して、クライアントマシンでその強力な名前FullTrust権限を与えることが必要でした。私は両方のことをしましたが、結果は同じでした。 – Steve

+0

これは署名の問題ではありません。 .NET Frameworkは、共有からFullTrustを実行するように構成する必要があります。 ランタイムセキュリティの下に追加コード>新しいコードグループをコードグループ 条件タイプのURLを選択 共有のパスをURLとして指定 既存のコードを使用するパーミッションは "FullTrust" に設定され、動作します。 このコードグループでは、共有のアクセス許可を制御できます。 –

関連する問題