Partilhar via


Solucionando problemas de exceções de segurança de acesso de código

As permissões controlam o que seu código tem permissão para fazer e não deve ser feito.No momento em que um aplicativo é executado, ele recebe um conjunto de permissões pelo tempo de execução.Se ela tiver permissões suficientes, ele é executado corretamente; Caso contrário, uma exceção de segurança ocorre.

As permissões que seu código é fornecido são determinadas pelo local do qual o aplicativo foi iniciado (por exemplo, a Internet, intranet ou o computador local) e as configurações de segurança no computador no qual o aplicativo é executado.Uma vez que essas configurações podem diferir de computador para computador, você não pode antecipar sempre ou não o código receberá permissões suficientes.

Solicitando permissões garante que seu código será executado se a diretiva de segurança no computador local permite que ele.Se você não solicitar as permissões necessárias, você corre o risco de seu código não executar.Para obter mais informações sobre permissões de acesso ao código e pedi-las, consulte Permissões de acesso de código ou Requesting Permissions.Para obter mais informações sobre Try...Catch blocos, consulte Try...Catch...Instrução finally (Visual Basic).

ClickOnceos aplicativos podem solicitar permissões adicionais, se necessário, usando a página de segurança no Designer de aplicativo.Para obter mais informações, consulte Como: definir permissões personalizadas para um aplicativo de ClickOnce.

Possíveis causas de exceções de segurança de acesso ao código incluem:

  • Área de transferência. Colar da área de transferência por meio de programação é um recurso restrito do código gerenciado, porque a área de transferência pode conter informações confidenciais.

  • Acesso de sistema de registro ou arquivo. Acesso ao sistema de arquivos local é restrito.Se você estiver acessando um arquivo ou recurso que é implantado com seu assembly, use o código Assembly.GetExecutingAssembly.Location para obter o caminho para seu assembly.

  • Acesso à rede. Certifique-se de que seu assembly usa o mesmo protocolo com o qual o assembly foi carregado.Em geral, a comunicação de rede é permitida somente para a URL que foi a origem do assembly.

  • A impressão. Software em execução na zona da Internet pode imprimir somente usando uma caixa de diálogo comum.É restrito ao uso de impressora do padrão apenas se ele usa uma caixa de diálogo comum para permitir que o usuário selecionar uma impressora.

  • Serialização. A capacidade para recriar um objeto de dados arbitrários é restrita ao código executado com confiança total.Para a serialização de XML, o XmlSerializer o tipo deve ser tecnicamente utilizável pelo código parcialmente confiável.Para obter mais informações sobre o XmlSerializer digite, consulte Classe XmlSerializer.

  • Reflexão. Muitos dos recursos relacionados a reflexão do runtime são impedidos de uso pelo código parcialmente confiável.

Teste o código para determinar se ele lançará um SecurityException de acesso de código

Se você tiver um bloco de código com potencial para lançar um CodeAccessSecurityException, use um Try...Catch bloco para permitir que seu código para executar se puder e para solucionar a falha se não for possível.

Às vezes, você talvez queira criar seu aplicativo para ajustar seu comportamento, dependendo das permissões que do sistema host concedeu.Por exemplo, convém desativar um comando de impressão em um menu, se o aplicativo não tiver permissões de impressão.

Para testar isso, você pode criar uma instância de um CodeAccessPermission-derivado de classe, como FileIOPermission.E em seguida, você pode executar o Demand método na permissão de dentro de um Try...Catch bloco.Se a exceção é lançada, seu assembly não tem a permissão.

O exemplo a seguir testa se o assembly tem EventLogPermission permissão de execução ou criando um EventLogPermission e executar seu Demand método dentro de um Try...Catch bloco para determinar ou não o Demand for bem-sucedida.

Try
    Dim MyPermission As New EventLogPermission
    MyPermission.Demand()
    MsgBox(MyPermission.ToString())
Catch ex As Exception
    MsgBox("Assembly lacks EventLogPermission.")
End Try

Consulte também

Conceitos

Permissões de acesso de código

Noções básicas sobre segurança de acesso de código.

Outros recursos

Requesting Permissions