我有我的应用程序权限问题:安全异常与使用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,但那没有任何效果。
这个问题对我来说非常重要,因为我不想授予加载项完全权限,但让加载项在主机上执行方法。
有谁知道这个问题的解决方案?
嗨, 我在同时发现了一个解决方案: 所谓堆栈遍历可以通过使用断言方法的许可对象上采空: 的PermissionSet permSet =新的PermissionSet(PermissionState.Unrestricted); permSet.Assert(); //执行有问题的东西 PermissionSet。RevertAssert(); 使用RevertAssert,StackWalk不会在这里停止。 亲切的问候 Tobi –