2

私は現在、ユーザーが動的にdllを選択し、アプリケーションがそのdll内のいくつかのメソッドを実行するアプリケーションを開発しています。(最初のリンクをたどると、.Net Frameworkを使用して一種のRobocodeゲームアプリケーションを開発していることがわかります)。

たとえば、バトルが始まると、rundllのメソッドが実行されます。

runメソッドで指定されたものはすべて実行されるため、適用する必要のあるセキュリティ制約がかなりあります。

たとえば、dllをプログラムしたユーザーが、インターフェイスから適用可能なメソッド(ロボットが歩いたり発射したりするために使用するメソッドなど)だけを使用するのではなく、ファイルを取得し、場合によっては削除するメソッドを呼び出す場合などです。ハードディスクからファイル...そして別のユーザーがそのdllを自分のコンピューターにロードすると、それらのメソッドが自分のPCで呼び出され、自分のファイルがこの悪意のあるコードによって変更されます。

したがって、どのようなメソッドが呼び出されても、dllが開かれているコンピューターのハードディスクに影響を与えないように、このアプリケーションを一種のサンドボックス環境から実行する必要があります。

これをどのように始めるべきかについてのアイデアはありますか?

これらのdllをロードし、それらのメソッドを呼び出す方法の例を次に示します。

for (int i = 0; i < robotList.Count; i++)
{
    IRunnable o = robotList[i];
    new Thread(delegate()
    {
        o.run();    
    }).Start();
}
4

2 に答える 2

7

普段は一緒に暮らすだけかもしれません

AppDomain newDomain = AppDomain.CreateDomain(name);
Assembly asm = newDomain.Load(System.IO.File.ReadAllBytes(name));

ただし、興味深い点の 1 つは、AppDomain.Load メソッドがアセンブリを現在のドメインだけでなく、新しいアプリ ドメインにも読み込むことです。

より洗練された解決策は、3.5 で System.AddIn 名前空間を使用することです。- http://msdn.microsoft.com/en-us/magazine/cc163476.aspx

次に、次のように AddinSecurityLevel を使用して、アドインの信頼レベルを実際に指定できます。

//Activate the selected AddInToken in a new
//application domain with the Internet trust level.
Calculator CalcAddIn = selectedToken.Activate<Calculator>(AddInSecurityLevel.Internet);

詳細については、 http://msdn.microsoft.com/en-us/library/bb355219.aspxを参照してください。

于 2009-02-04T06:21:46.737 に答える
2

あなたがしようとしていることは、基本的に別のアプリケーション ドメインでアセンブリを実行することです。良い出発点として、MSDN のこのページをチェックしてください。それは実際には非常に東です:

http://msdn.microsoft.com/en-us/library/ms173139(VS.80).aspx

于 2009-02-04T05:11:36.423 に答える