2012-05-06 7 views
1

AppDomainを作成し、それを使って外部WPFアプリケーションを実行したいとします。 主な理由はセキュリティです。私は外部のWPFアプリケーションが何ができるのかを制御したいのです。 具体的には、アンマネージドコードの使用を禁止したいと考えています。AppDomainを作成して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アプリを実行するにはどうすればよいですか? (Btw、WPFアプリケーションは単なるFile-> New WPFアプリケーションなので、アンマネージコードは使用しません)。

ありがとうございます!

+1

どのようにして動作が停止しますか?エラーメッセージはありますか? –

+0

MainWindow.xamlをロードできなかったというエラーメッセージが表示されます。 – user1177998

答えて

1

残念ながら、WPFウィンドウをインスタンス化するにはUnamagedCode権限が必要です。このフードの下で、WPFはアンマネージコードを使用して、メッセージングやウィンドウ管理などのためにWindows APIにアクセスします。

MSDNウィンドウの概要ドキュメントから

http://msdn.microsoft.com/en-us/library/ms748948.aspx

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

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

WPFアプリケーションでできることを制限する場合は、別のユーザー名で実行することをお勧めします。

関連する問題