使用来自网络驱动器上的exe的Reflection调用方法

时间:2013-07-12 10:56:34

标签: c# security reflection

我正在尝试在网络驱动器上的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,也无法找到解决方案。

我能做些什么来克服这个问题?

2 个答案:

答案 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 - 是带有程序集的文件的完整路径(例如,在网络驱动器上)。