2015-05-04 34 views
3

我有我的应用程序权限问题:安全异常与使用Microsoft外接程序框架(MAF)回调2周的AppDomain

我有它运行在一个充满信任的应用程序域主机应用程序。该主机通过MAF框架加载AddIn,并在仅具有Internet访问的另一个App-Domain中激活此加载项。

主机在主应用程序域中创建助手对象,并通过MAF管道将其引用传递给加载项(使用HostView和Add-In View适配器)。 Add-In然后在这个Helper-Object上调用一个方法,该方法应该从文件System中加载一个Textfile。当执行此,我geeting的抛出:SecurityException:

An unhandled exception of type 'System.Security.SecurityException' occurred in mscorlib.dll 
Additional information: Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed. 

我已经调试代码了一下,发现类FileStream.cs,有下面的检查:

new FileIOPermission(secAccess, control, new String[] { filePath }, false, false).Demand(); 

需求的分析法在CodeAccessPermissions.cs实现,似乎检查完整的调用堆栈,如果所有元素都具有权限来执行此方法:当我在执行此方法

StackCrawlMark stackMark = StackCrawlMark.LookForMyCallersCaller; 

Helper类直接出自Main Method,然后一切正常。

当我将加载项的权限设置为FullTrust时,它也可以正常工作。

我也检查了AppDomain和AppDomain.CurrentDomain.IsFullyTrusted属性,在任何情况下都是如此。

所以它似乎是AddIn在导致权限问题的调用堆栈中的问题。

我也尝试在一个新的线程中执行此操作,不再有在调用堆栈中的AddIn,但那没有任何效果。

这个问题对我来说非常重要,因为我不想授予加载项完全权限,但让加载项在主机上执行方法。

有谁知道这个问题的解决方案?

+0

嗨, 我在同时发现了一个解决方案: 所谓堆栈遍历可以通过使用断言方法的许可对象上采空: 的PermissionSet permSet =新的PermissionSet(PermissionState.Unrestricted); permSet.Assert(); //执行有问题的东西 PermissionSet。RevertAssert(); 使用RevertAssert,StackWalk不会在这里停止。 亲切的问候 Tobi –

回答

0

我在同时发现了一个解决方案:

所谓的堆栈遍历可以通过使用断言方法的许可对象上采空:

PermissionSet permSet = new PermissionSet(PermissionState.Unrestricted); 

permSet.Assert(); 

//Do the problematic Stuff 

PermissionSet.RevertAssert(); 

使用RevertAssert,该StackWalk不会停止了这里。

亲切的问候

托比