Проблема безопасности доступа к коду - в чем здесь проблема? - PullRequest
0 голосов
/ 22 февраля 2010

Фон

У меня есть событие после сборки, которое я использую для генерации некоторых пакетных файлов, которые содержат номер текущей версии нашего приложения. Событие вызывает пакетный файл, который вызывает управляемое приложение , которое загружает сборку и использует отражение для поиска информации о версии.

Задача

Когда событие после сборки выполняется локально, все в порядке. Когда он запускается в рамках нашего автоматизированного процесса сборки, я вижу следующую ошибку в журналах. Я ничего не знаю о безопасности доступа к коду, и надеялся, что кто-нибудь быстро укажет на проблему.

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

1 Ответ

3 голосов
/ 22 февраля 2010

Какую версию фреймворка вы используете?Старые версии не очень доверяют общим сетевым ресурсам - поэтому вам может потребоваться использовать « caspol » для включения доверия (или перед перемещением файла локально перед его запуском).Совсем недавно фреймворк доверял mappped общих ресурсов (например, Q:\), но не доверял UNC-ресурсам (\\someserver\whatever) без настройки "caspol".

Самым простым вариантом является запуск exe-файла с локального диска, а не по сети.

...