erro RegistryPermission quando chamada de um aplicativo C # consola
-
23-08-2019 - |
Pergunta
Basta olhar para alguns ponteiro antes de ir para o caminho errado. Eu escrevi pequena C # consola aplicativo que abre, lê, escreve e exclusões de nossos usuários Registro em ambos HKEY_LOCAL_MACHINE e HKEY_CURRENT_USER
Claro, eu tenho que trabalhar no meu PC e todo o PC de teste, mas um de nossos clientes está recebendo um erro quando tentar executar o .exe
System.Security.SecurityException: solicitação da permissão do tipo 'System.Security.Permissions.RegistryPermission, mscorlib, versão = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' falhou <. / p>
no System.Security.CodeAccessSecurityEngine.Check (Object demanda, StackCrawlMark & ??stackMark, Boolean isPermSet) em System.Security.CodeAccessPermission.Demand () em Microsoft.Win32.RegistryKey.CheckSubKeyReadPermission (String SubkeyName) em Microsoft.Win32.RegistryKey.CheckOpenSubKeyPermission (String SubkeyName, Boolean> subKeyWritable) em Microsoft.Win32.RegistryKey.OpenSubKey (String nome, booleano gravável) em EstateMasterClearReg.Program.Main (String [] args)
A ação que falhou foi:
Demand. O tipo da primeira permissão que falhou foi: System.Security.Permissions.RegistryPermission A Zona do assembly que falhou foi: Intranet
Como eu não será capaz de testar isso nas máquinas clientes (e eles disseram que eles têm o .exe executado localmente e está conectado como Admin) não há nada que eu possa fazer para tentar e garantir que o aplicativo irá rodar em qualquer máquina?
Eu preciso usar uma chave forte e AllowPartiallyTrustedCallers nome ou devo usar System.Security.Permissions.RegistryPermission?
Obrigado por sua ajuda.
Solução
Parece que eles podem estar correndo o executável através da rede. Tê-los tentar copiá-lo para um disco rígido local e execute novamente. As permissões atribuídas para o executável diferem entre executá-lo a partir de um compartilhamento de rede vs. correr a partir do sistema de arquivos local.
Como alternativa, poderia ser possível que eles tenham modificado as configurações de segurança padrão, de modo que mesmo se ele estiver sendo executado localmente, é considerado parte da zona de Intranet. Verifique aqueles, também.
As dicas aqui também podem ser úteis:
http://blogs.msdn.com/shawnfa /archive/2003/06/20/57023.aspx
Note que se você der o seu assembly um nome forte, você ainda vai precisar de política de segurança local a ser modificado para dar aos seus montagem as permissões apropriadas. O nome forte por si só não vai conceder a permissão adicional necessário.