31

.NET アプリケーションをネットワーク ドライブから実行すると、まったく同じ実行可能ファイルがローカル ハード ドライブから完全に正常に実行される場合でも失敗しますか?

次のように「完全な信頼」を確認してみました。

try
{
    // Demand full trust permissions
    PermissionSet fullTrust = new PermissionSet( PermissionState.Unrestricted );
    fullTrust.Demand();

    // Perform normal application logic

}
catch( SecurityException )
{
    // Report that permissions were not full trust
    MessageBox.Show( "This application requires full-trust security permissions to execute." );
}

ただし、これは役に立ちません。つまり、アプリケーションが起動し、catch ブロックに入ることはありません。ただし、デバッグ ビルドは、スローされた例外が InheritanceDemand によって引き起こされた SecurityException であることを示しています。何か案は?

4

6 に答える 6

22

実際、ネットワークの場所にあるアプリは、ローカルの hdd よりも信頼性が低いという事実に関係しています (.NET フレームワークの既定のポリシーによる)。

私が間違っていなければ、Microsoft は最終的に .NET 3.5 SP1 でこの煩わしさを修正しました (多くの開発者が不満を述べた後)。

私はそれをグーグルで検索しました:.NET Framework 3.5 SP1 ネットワーク共有からマネージコードを起動できます!

于 2008-09-29T14:26:38.920 に答える
14

CasPol を使用して共有を完全に信頼しようとしましたか?

于 2008-09-29T14:23:31.923 に答える
11

これは既に行っているかもしれませんが、CasPol.exe を使用して、指定したネットワーク共有に対して FullTrust を有効にすることができます。

例えば

cd c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
CasPol.exe -m -ag 1.2 -url file:///N:/your/network/path/* FullTrust

詳細はこちら

于 2008-09-29T14:26:14.320 に答える
3

これが .NET 2.0 以降の場合、ClickOnceはこの展開作業を実際に支援するために作成されました。それを使用してネットワーク共有にのみ展開します。

于 2008-09-29T14:25:25.850 に答える
0

これは、Microsoft によって .net フレームワークに組み込まれたセキュリティです。これは、完全な特権でマルウェアがローカルで実行されるのを阻止する方法であるため、コードでプログラムによってこれを変更することはできません。

あなたがする必要があるのは、特定のアセンブリの信頼を高めることです。これは .NET Framework 構成 ([コントロール パネル] -> [管理ツール]) で行い、各コンピューターで行う必要があります。

他のセキュリティ対策と同様に、面倒ですが、世界の感染を減らすのに役立ちます...

于 2008-09-29T14:26:04.913 に答える