Executando assemblies .NET “parcialmente confiáveis” a partir de um compartilhamento de rede

StackOverflow https://stackoverflow.com/questions/24468

  •  09-06-2019
  •  | 
  •  

Pergunta

Quando tento executar um assembly .NET (boo.exe) de um compartilhamento de rede (mapeado para uma unidade), ele falhará porque é apenas parcialmente confiável:

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

Com instruções de uma postagem no blog, adicionei uma política à configuração do .NET confiando totalmente em todos os assemblies com file:///H:/* como seu URL.Eu verifiquei isso inserindo o URL file:///H:/boo-svn/bin/boo.exe no Avaliar montagem ferramenta na configuração do .NET e observando que boo.exe tinha o Irrestrito permissão (que não tinha antes da política).

Mesmo com a permissão, boo.exe não funciona.Ainda recebo a mesma mensagem de erro.

O que posso fazer para depurar esse problema?Existe outra maneira de executar assemblies "parcialmente confiáveis" a partir de compartilhamentos de rede sem precisar alterar algo para cada assembléia que desejo executar?

Foi útil?

Solução

Com o .NET 3.5 SP1, os assemblies .NET executados em compartilhamentos UNC têm permissões totais.

Veja Brad Abrams Permitir que .exes sejam executados em compartilhamentos de rede para soluções alternativas e discussões e, finalmente, o acompanhamento O .NET 3.5 SP1 permite que código gerenciado seja iniciado a partir de um compartilhamento de rede.

Outras dicas

Resolvi o problema usando caspol conforme instruído na postagem do blog de Johnny Hughes Executando um aplicativo .Net a partir de um compartilhamento de rede:

caspol -addgroup 1.2 -url file:///H:/* FullTrust

Parece que a GUI de configuração do .NET para gerenciar as políticas simplesmente não funciona.

Dê uma olhada no programa 'caspol.exe' (fornecido com tempos de execução .NET).Você terá que fazer isso na máquina a partir da qual está tentando executar o aplicativo.Não consegui 'marcar' e montar (provavelmente só eu).No entanto, usar caspol e configurar a permissão adequada para meu aplicativo, LocalIntranet_Zone, corrige meu problema semelhante.

Ouvi dizer (mas ainda não tentei) que o .NET 3.5 sp1 removeu esse requisito de segurança mais rígido (não permitindo que assemblies .NET residissem em um compartilhamento por padrão).

Eu acho que você quer adicionar o Permitir chamadas parcialmente confiáveis atribua à sua montagem.A mensagem de erro implica que algo que está chamando seu assembly boo.exe não é totalmente confiável e boo.exe não possui esse atributo que permite isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top