2010-02-22 6 views
0

ContexteCode d'accès Problème de sécurité - quel est le problème ici?

J'ai un événement après génération que j'utilise pour générer des fichiers de traitement par lots qui contiennent le numéro de version de notre application. L'événement appelle un fichier de traitement par lots qui appelle un managed app qui charge l'assemblage et utilise la réflexion pour trouver ses informations de version.

Problème

Lorsque l'événement post-build fonctionne localement, tout est très bien. Lorsqu'il est exécuté sous notre processus de génération automatique, l'erreur suivante apparaît dans les journaux. Je ne connais rien à la sécurité d'accès au code, et j'espérais que quelqu'un pourrait signaler le problème rapidement.

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 

Répondre

3

Quelle version de l'infrastructure utilisez-vous? Les versions plus anciennes ne font pas beaucoup confiance aux partages réseau - vous devrez peut-être utiliser "caspol" pour activer l'approbation (ou déplacer le fichier localement avant de l'exécuter). Plus récemment, le cadre fait trust mappé partages (tels que Q:\), mais ne fait pas confiance aux partages UNC (\\someserver\whatever) sans un réglage "caspol".

L'option la plus simple consiste à exécuter l'exe à partir d'un lecteur local plutôt que sur le réseau.

+0

J'utilise 2.0. Après le mappage de Q :, je suis en mesure d'exécuter l'application gérée (de manière interactive à partir de la ligne de commande) sur Q: \ Whatever \ MyApp.exe. –

+0

Dans l'application gérée, j'utilise 'Assembly.LoadFile'. Je suppose que je devrais utiliser 'Assembly.ReflectionOnlyLoadFrom' mais pourrait-il être le problème (CAS sur l'une des dépendances)? –