我正在尝试在网络驱动器上的exe中使用Reflection调用方法,但是我得到以下异常。
[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(Object 需求,StackCrawlMark& stackMark,Boolean isPermSet)at System.Security.CodeAccessPermission.Demand()at System.IO.FileStream.Init(String path,FileMode mode,FileAccess 访问,Int32权限,布尔useRights,FileShare共享,Int32 bufferSize,FileOptions选项,SECURITY_ATTRIBUTES secAttrs,String System.IO.FileStream..ctor中的msgPath,Boolean bFromProxy(String path,FileMode模式,FileAccess访问,FileShare共享,Int32 bufferSize,FileOptions options)at System.IO.StreamWriter.CreateFile(String path,Boolean append)at System.IO.StreamWriter..ctor(String path,Boolean append,Encoding System.IO.StreamWriter..ctor(String。)中的编码,Int32 bufferSize) path,Boolean append,Encoding encoding)at System.IO.File.AppendAllText(String path,String contents,Encoding System.IO.File.AppendAllText(String path,String。) 内容)在ccc.ControllerBO.ExecuteTest()
我已经阅读了安全设置,但我不想安装调用程序EXE,也无法找到解决方案。
我能做些什么来克服这个问题?
答案 0 :(得分:0)
您可以将可执行文件复制到您自己的程序集本地的位置,然后从那里调用它。
答案 1 :(得分:0)
您可以创建证据实例并将其传递给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 - 是带有程序集的文件的完整路径(例如,在网络驱动器上)。