1

AppDomain を作成し、それを介して外部 WPF アプリケーションを実行したいと考えています。主な理由はセキュリティです。外部の WPF アプリでできることを制御したいからです。具体的には、アンマネージ コードの使用を禁止したいと考えています。

次のコードを実行しました。

PermissionSet set = new PermissionSet(PermissionState.None);
set.AddPermission(new FileIOPermission(FileIOPermissionAccess.AllAccess, PATH));
set.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
set.AddPermission(new UIPermission(PermissionState.Unrestricted));
set.AddPermission(new SecurityPermission(SecurityPermissionFlag.UnmanagedCode));

Evidence ev = new Evidence();
AppDomain domain = AppDomain.CreateDomain("Test", ev, new AppDomainSetup() { ApplicationBase = PATH }, set);
domain.ExecuteAssembly(PATH);

そしてそれはうまく機能します。

アクセス許可セットの最後の行を削除すると (つまり、アンマネージ コードの実行を許可すると)、機能しなくなります。

新しいアプリ ドメインがアンマネージ コードを実行することを許可しないで、WPF アプリを引き続き実行するにはどうすればよいですか? (ちなみに、WPF アプリは単なる [ファイル] -> [新しい WPF アプリケーション] であるため、アンマネージ コードは使用しません)。

ありがとう!

4

1 に答える 1

1

残念ながら、WPFウィンドウをインスタンス化するには、UnamagedCodeアクセス許可が必要です。内部的には、WPFはアンマネージコードを使用して、メッセージングやウィンドウ管理などのWindowsAPIにアクセスします。

MSDNウィンドウの概要ドキュメントからhttp://msdn.microsoft.com/en-us/library/ms748948.aspx

ウィンドウをインスタンス化するには、UnmanagedCodeのセキュリティ権限が必要です。ローカルマシンにインストールされ、ローカルマシンから起動されるアプリケーションの場合、これはアプリケーションに付与される一連のアクセス許可に含まれます。

ただし、これは、ClickOnceを使用してインターネットまたはローカルイントラネットゾーンから起動されるアプリケーションに付与される一連のアクセス許可の範囲外です。その結果、ユーザーはClickOnceセキュリティ警告を受け取り、アプリケーションのアクセス許可セットを完全な信頼に昇格させる必要があります。

WPFアプリケーションで実行できることを制限したい場合は、別のユーザー名で実行してみてください。

于 2012-05-11T13:18:59.093 に答える