Когда я пытаюсь запустить сборку .NET (boo.exe) из общего сетевого ресурса (сопоставленного с диском), он терпит неудачу, поскольку ему доверяют лишь частично:
Unhandled Exception: System.Security.SecurityException: That assembly does not allow partially trusted callers.
at System.Security.CodeAccessSecurityEngine.ThrowSecurityException(Assembly asm, PermissionSet granted, PermissionSet refused, RuntimeMethodHandle rmh, SecurityAction action, Object demand, IPermission permThatFailed)
at BooCommandLine..ctor()
at Program..ctor()
at ProgramModule.Main(String[] argv)
The action that failed was:
LinkDemand
The assembly or AppDomain that failed was:
boo, Version=0.0.0.0, Culture=neutral, PublicKeyToken=32c39770e9a21a67
The Zone of the assembly that failed was:
Intranet
The Url of the assembly that failed was:
file:///H:/boo-svn/bin/boo.exe
С помощью инструкций от сообщение в блоге я добавил политику в конфигурацию .NET, полностью доверяющую всем сборкам с file:///H:/* в качестве их URL-адреса. Я проверил это, введя URL-адрес file:///H:/boo-svn/bin/boo.exe в инструмент Оценить сборку в конфигурации .NET и отметив, что у boo.exe было разрешение Неограниченный (которого у него не было до политики).
Даже с разрешения boo.exe не запускается. Я по-прежнему получаю то же сообщение об ошибке.
Что я могу сделать для устранения этой проблемы? Есть ли другой способ запускать сборки с частичным доверием из общих сетевых ресурсов без необходимости что-то менять для каждой сборки, которую я хочу запустить?





С .NET 3.5 SP1 сборки .NET, запущенные из общих ресурсов UNC, имеют полные разрешения.
См. Обходной путь и обсуждения Брэда Абрамса Разрешить запускать .exes из общих сетевых ресурсов, и, наконец, следующий .NET 3.5 SP1 позволяет запускать управляемый код из общего сетевого ресурса..
Я думаю, вы хотите добавить в свою сборку атрибут AllowPartialTrustedCallers. Сообщение об ошибке означает, что что-то, что вызывает вашу сборку boo.exe, не является полностью доверенным, и у boo.exe нет этого атрибута, позволяющего это сделать.
Взгляните на программу «caspol.exe» (входит в состав среды выполнения .NET). Вам нужно будет сделать это на машине, с которой вы пытаетесь запустить приложение. Я не умел «маркировать» и собирать (наверное, только у меня). Однако использование caspol и настройка надлежащего разрешения для моего приложения LocalIntranet_Zone устраняет мою аналогичную проблему.
Я слышал (но еще не пробовал), что .NET 3.5 sp1 удалил это ужесточающее требование безопасности (не позволяя сборкам .NET размещаться в общей папке по умолчанию).
Я решил проблему, используя caspol, как указано в сообщении блога Джонни Хьюза Запуск приложения .Net из общего сетевого ресурса:
caspol -addgroup 1.2 -url file:///H:/* FullTrust
Кажется, что графический интерфейс .NET Configuration для управления политиками просто не работает.
Интересно. Возможно, заблокированные исполняемые файлы Windows 7 запускаются через общие сетевые ресурсы, управляемые или собственные.