2010-02-22 125 views
0

背景代码访问安全性问题 - 这里有什么问题?

我有我用它来生成包含我们的应用程序的当前版本号一些批处理文件生成后事件。该事件调用批处理文件,该文件调用managed app加载程序集并使用反射来查找其版本信息。

问题

当生成后事件在本地运行,每天的罚款。当它在我们的自动构建过程中运行时,我在日志中看到以下错误。我对Code Access Security一无所知,并希望有人能够快速指出问题。

call GenerateBatchFiles.bat Q:\MyApp\MyCompany.Services.Hosts.MyApp.exe 

     Unhandled Exception: System.Security.SecurityException: Request failed. 
      at System.Security.CodeAccessSecurityEngine.ThrowSecurityException(Assembly asm, PermissionSet granted, PermissionSet refused, RuntimeMethodHandle rmh, SecurityAction action, Object demand, IPermission permThatFailed) 
      at System.Security.CodeAccessSecurityEngine.ThrowSecurityException(Object assemblyOrString, PermissionSet granted, PermissionSet refused, RuntimeMethodHandle rmh, SecurityAction action, Object demand, IPermission permThatFailed) 
      at System.Security.CodeAccessSecurityEngine.CheckSetHelper(PermissionSet grants, PermissionSet refused, PermissionSet demands, RuntimeMethodHandle rmh, Object assemblyOrString, SecurityAction action, Boolean throwException) 
      at System.Security.CodeAccessSecurityEngine.CheckSetHelper(CompressedStack cs, PermissionSet grants, PermissionSet refused, PermissionSet demands, RuntimeMethodHandle rmh, Assembly asm, SecurityAction action) 
      at Version.Program.Main(String[] args) 
     The action that failed was: 
     LinkDemand 
     The type of the first permission that failed was: 
     System.Security.PermissionSet 
     The demand was for: 
     <PermissionSet class="System.Security.PermissionSet" 
     version="1" 
     Unrestricted="true"/> 

     The granted set of the failing assembly was: 
     <PermissionSet class="System.Security.PermissionSet" 
     version="1"> 
     <IPermission class="System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     version="1" 
     Read="USERNAME"/> 
     <IPermission class="System.Security.Permissions.FileDialogPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     version="1" 
     Unrestricted="true"/> 
     <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     version="1" 
     Read="Q:\MyApp\" 
     PathDiscovery="Q:\MyApp\"/> 
     <IPermission class="System.Security.Permissions.IsolatedStorageFilePermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     version="1" 
     Allowed="AssemblyIsolationByUser" 
     UserQuota="9223372036854775807" 
     Expiry="9223372036854775807" 
     Permanent="True"/> 
     <IPermission class="System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     version="1" 
     Flags="ReflectionEmit"/> 
     <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     version="1" 
     Flags="Assertion, Execution, BindingRedirects"/> 
     <IPermission class="System.Security.Permissions.UIPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     version="1" 
     Unrestricted="true"/> 
     <IPermission class="System.Security.Permissions.UrlIdentityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     version="1" 
     Url="file:///Q:/MyApp/Version.exe"/> 
     <IPermission class="System.Security.Permissions.ZoneIdentityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     version="1" 
     Zone="Intranet"/> 
     <IPermission class="System.Net.DnsPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     version="1" 
     Unrestricted="true"/> 
     <IPermission class="System.Drawing.Printing.PrintingPermission, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
     version="1" 
     Level="DefaultPrinting"/> 
     </PermissionSet> 

     The assembly or AppDomain that failed was: 
     Version, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 
     The Zone of the assembly that failed was: 
     Intranet 
     The Url of the assembly that failed was: 
     file:///Q:/MyApp/Version.exe 

回答

3

您使用的是哪个版本的框架?旧版本不太信任网络共享 - 因此您可能需要使用“caspol”来启用信任(或在运行之前在本地移动文件)。最近,框架确实信任映射股(如Q:\),但不信任UNC股份(\\someserver\whatever)没有“caspol”调整。

尽管最简单的选择是从本地驱动器而不是通过网络运行exe。

+0

我正在使用2.0。在映射Q:之后,我可以针对Q:\ Whatever \ MyApp.exe运行托管应用程序(从命令行以交互方式)。 – 2010-02-22 17:03:40

+0

在托管应用程序中,我使用'Assembly.LoadFile'。我想我应该使用'Assembly.ReflectionOnlyLoadFrom',但这可能是问题(CAS在其中一个依赖项上)? – 2010-02-22 17:32:40