我试图在网络驱动器上的exe中使用反射来调用一个方法,但我得到了以下异常。
〔2013-07-12 11:58:54 AM〕发生以下错误:异常被调用的目标抛出。内部异常:System.Security.SecurityException:请求类型的权限'System.Security.Permissions.FileIOPermission,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089'失败。在System.Security.CodeAccessSecurityEngine.Check(对象需求,StackCrawlMark&stackMark,布尔值isPermSet)位于的System.Security.CodeAccessPermission.Demand()System.IO.FileStream.IInit(字符串路径、FileMode模式、FileAccess访问,Int32权限,布尔使用权限,FileShare共享,Int32bufferSize,FileOptions选项,SECURITY_ATTRIBUTES secAttrs,字符串msgPath,布尔bFromProxy)在System.IO.FileStream.ctor(字符串路径,FileMode模式,FileAccess访问,FileShare共享,Int32bufferSize、FileOptions选项)位于的System.IO.StreamWriter.CreateFile(字符串路径,布尔附加)System.IO.StreamWriter.ctor(字符串路径,布尔附加,编码encoding,Int32 bufferSize)(字符串)路径,布尔附加,编码)System.IO.File.AppendAllText(字符串路径,字符串内容,编码编码)在System.IO.File.AppendAllText(字符串路径,字符串内容)。ControllerBO.ExecutTest()
我已经阅读了安全设置,但我不想安装调用程序EXE,找不到解决方案。
我能做些什么来克服这个问题?
您可以将可执行文件复制到自己程序集的本地位置,并从那里调用它。
您可以创建证据实例并将其传递给LoadForm方法,如下所示:
#if NET35
var evidence = new System.Security.Policy.Evidence();
evidence.AddHost(new System.Security.Policy.Url(assemblyPath));
evidence.AddHost(new System.Security.Policy.Zone(System.Security.SecurityZone.MyComputer));
Assembly assembly = Assembly.LoadFrom(assemblyPath, evidence);
#elif NET40
var evidence = new System.Security.Policy.Evidence();
evidence.AddHostEvidence(new System.Security.Policy.Url(assemblyPath));
evidence.AddHostEvidence(new System.Security.Policy.Zone(System.Security.SecurityZone.MyComputer));
Assembly assembly = Assembly.LoadFrom(assemblyPath);
#endif
其中assemblyPath-是带有程序集的文件的完整路径(例如,在网络驱动器上)。