Solucionando problemas de exceções do segurança de acesso do código
As permissões controlam o que seu código tem permissão para fazer e não.Quando que um aplicativo é executado, ele recebe um conjunto de permissões em time 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 de seu código recebe são determinadas pelo local do qual o aplicativo foi iniciado (por exemplo, a Internet, intranet ou no computador local) e as configurações de segurança no computador em que o aplicativo está executando.Já que essas configurações podem ser diferentes de um computador para outro, não pode sempre antecipar ou não o código receberá permissões suficientes.
Solicitar permissões garante que seu código será executado se permitir a diretiva de segurança no computador local.Se você não fizer isso solicitação as permissões necessárias, você corre o risco de seu código não executado.Para obter mais informações sobre permissões de acesso ao código e pedi-las, consulte Permissões de acesso a código ou Solicitando permissões. Para obter mais informações sobre o Try...Catch blocos, consulte Try... Catch... Finally instrução (Visual Basic).
ClickOnce aplicativos podem solicitar permissões adicionais, se necessário, usando a página segurança no aplicativo Designer. Para obter mais informações, consulte Como: Definir Personalizar permissões para um aplicativo ClickOnce.
Possíveis causas de exceções de segurança de acesso do código incluem:
Área de transferência. Colar da área de transferência por meio de programação é um recurso restrito de código gerenciado, porque a área de transferência pode conter informações confidenciais.
Acesso de sistema de registro ou arquivo. O acesso ao sistema de arquivos local é restrito.Se você estiver acessando um arquivo ou de um recurso que é implantado com seu assembly, use o código Assembly.GetExecutingAssembly.Location Para obter o caminho para o seu assembly.
Acesso à rede. Certifique-se de que seu assembly usa o mesmo protocolo ao qual o assembly foi carregado.Em geral, a comunicação de rede é permitida apenas a URL que fonte do assembly.
**A impressão. Software que está sendo executado na zona da Internet pode imprimir somente usando uma caixa de diálogo comuns.**É restrito ao uso da impressora padrão apenas se ele usa uma caixa de diálogo comuns 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 em execução com confiança total.Para serialização de XML, a 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 tempo de execução tem permissão para usar pelo código parcialmente confiável.
Testando código para determinar se IT vai lançar uma SecurityException de acesso do 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 ele puder e para solucionar a falha se não puder.
Às vezes, convém criar seu aplicativo para ajustar seu comportamento dependendo das permissões que do sistema host concedeu.Por exemplo, convém desabilitar um comando de impressão em um menu se o aplicativo não tem permissões de impressão.
Para testar isso, você pode criar uma instância de um CodeAccessPermission-classe derivada, sistema autônomo FileIOPermission. Em seguida, você pode executar o Demand método em que a permissão dentro de um Try...Catch bloco. Se a exceção é lançada, o 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 a execução de seu Demand método dentro de um Try...Catch bloco para determinar se o Demand é bem-sucedida.
Try
Dim MyPermission As New EventLogPermission
MyPermission.Demand()
MsgBox(MyPermission.ToString())
Catch ex As Exception
MsgBox("Assembly lacks EventLogPermission.")
End Try