2010-02-22 203 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