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.

Foi útil?

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.

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