Compartilhar via


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

Permissões de controlam e não é permitido seu código. No momento em que um aplicativo é executado, ele recebe um conjunto de permissões pelo runtime. Se ele tem permissões suficientes, ele será 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. Desde 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 Solicitando permissões. Para obter mais informações sobre Try...Catch blocos, consulte Instrução Try...Catch...Finally (Visual Basic).

ClickOnceos aplicativos podem solicitar permissões adicionais, se necessário, usando a página de segurança no Designer do aplicativo. For more information, see How to: Definir permissões Personalizar para um aplicativo de ClickOnce.

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

  • Área de transferência. Colando programaticamente a área de transferência é 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 o seu assembly.

  • Acesso à rede. Certificar-se de que seu assembly usa o mesmo protocolo com o qual o assembly foi carregado. Geralmente, a comunicação de rede é permitida apenas a URL que foi a origem do assembly.

  • 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 padrão apenas se ele usa uma caixa de diálogo comum para permitir ao usuário selecionar uma impressora.

  • Serialização. A capacidade de 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 usar por 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, convém 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. 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

Solicitando permissões

Noções Básicas sobre Segurança de Accesso a Código