Estou trabalhando para tentar portar um aplicativo ASP.NET do Server 2003 (e IIS6) para o Server 2008 (IIS7).
Quando tento visitar a página no navegador, recebo o seguinte:
Erro de Servidor na '/' Aplicação.
Exceção de segurança
Descrição: o aplicativo tentou executar uma operação não permitida pela política de segurança. Para conceder a esse aplicativo a permissão necessária, entre em contato com o administrador do sistema ou altere o nível de confiança do aplicativo no arquivo de configuração.
Detalhes da exceção: System.Security.SecurityException: a fonte não foi encontrada, mas alguns ou todos os logs de eventos não puderam ser pesquisados. Logs inacessíveis: Segurança
Erro de origem:
Uma exceção não tratada foi gerada durante a execução da solicitação da web atual. Informações sobre a origem e o local da exceção podem ser identificadas usando o rastreamento da pilha de exceções abaixo.
Rastreio de pilha:
[SecurityException: a fonte não foi encontrada, mas alguns ou todos os logs de eventos não puderam ser pesquisados. Logs inacessíveis: Segurança.]
System.Diagnostics.EventLog.FindSourceRegistration (Origem da string, String machineName, Boolean readOnly) +562 System.Diagnostics.EventLog.SourceExists (Origem da string, String machineName) +251
[recorte]
Estas são as coisas que eu fiz para tentar resolvê-lo:
Conceda permissão de acesso total a "Todos" à chave
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Security
. Isso funcionou. Mas, naturalmente, não posso fazer isso na produção. Então, excluí a permissão "Todos" depois de executar o aplicativo por alguns minutos e o erro reapareceu.Criei a fonte no log do aplicativo e no log de segurança (e verifiquei que ele existe via regedit) durante a instalação com permissões elevadas, mas o erro permaneceu.
Dei ao aplicativo um nível de confiança total no
web.config
arquivo (e no usoappcmd.exe
), mas sem sucesso.
Alguém tem uma idéia do que poderia ser feito aqui?
PS: Este é um acompanhamento para esta pergunta . Eu segui as respostas dadas, mas sem sucesso (veja o item 2 acima).
Respostas:
Para dar
Network Service
permissão de leitura àEventLog/Security
chave (conforme sugerido por Firenzi e royrules22), siga as instruções em http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspxStart
entãoRun
regedt32
ouregedit
Navegue / expanda para a seguinte chave:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security
Clique com o botão direito nessa entrada e selecione Permissões
Adicione o
Network Service
usuárioConceda permissão de leitura
ATUALIZAÇÃO: As etapas acima estão corretas nas máquinas do desenvolvedor, nas quais você não usa o processo de implantação para instalar o aplicativo.
No entanto, se você implantar seu aplicativo em outra (s) máquina (s), considere registrar as fontes de log de eventos durante a instalação, conforme sugerido nas páginas de SailAvid e Nicole Calinoiu. .
Estou usando a função PowerShell (chamando Octopus Deploy.ps1)
fonte
O problema é que as
EventLog.SourceExists
tentativas de acessar aEventLog\Security
chave, acesso que é permitido apenas para um administrador.Um exemplo comum para o log de um programa C #
EventLog
é:No entanto, as seguintes linhas falham se o programa não tiver permissões de administrador e a chave não for encontrada em
EventLog\Application
comoEventLog.SourceExists
, em seguida, tentará acessarEventLog\Security
.Portanto, a maneira recomendada é criar um script de instalação, que cria a chave correspondente, a saber:
Pode-se então remover essas duas linhas.
Você também pode criar um
.reg
arquivo para criar a chave do Registro. Simplesmente salve o seguinte texto em um arquivocreate.reg
:fonte
A solução foi conceder permissão de leitura da conta "Serviço de Rede" na chave EventLog / Security.
fonte
Para mim, apenas conceder permissões de 'Leitura' para 'NetworkService' a toda a ramificação 'EventLog' funcionou.
fonte
Eu tive um problema muito semelhante com um programa de console que desenvolvo no VS2010 (atualizado do VS2008 no XP). Meu prog usa o EnLib para fazer alguns registros. O erro foi disparado porque o EntLib não tinha permissão para registrar uma nova fonte de eventos.
Então, comecei uma vez que meu programa compilado como administrador : registrou a fonte do evento. Então voltei a desenvolver e depurar de dentro do VS sem problemas.
(você também pode consultar http://www.blackwasp.co.uk/EventLog_3.aspx , isso me ajudou
fonte
Essa exceção estava ocorrendo para mim em um aplicativo de console .NET em execução como uma tarefa agendada e eu estava tentando fazer basicamente a mesma coisa: criar uma nova fonte de eventos e gravar no log de eventos.
No final, definir permissões completas para o usuário sob o qual a tarefa estava sendo executada nas seguintes chaves fez o truque para mim:
fonte
eventlog\Application
eeventlog\Security
; controle total necessário apenas naeventlog
raiz.Eu tento quase tudo aqui para resolver este problema ... Compartilho aqui a resposta que me ajuda:
em http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspx , obrigado Michael Freidgeim
fonte
Encontrei o mesmo problema, mas tive que subir um nível e dar acesso total a todos à chave HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ EventLog \, em vez de ir para a segurança, o que esclareceu o problema.
fonte
Mesmo problema no Windows 7 64bits. Executar como administrador resolveu o problema.
fonte
Uma nova chave com o nome da fonte usada precisa ser criada em HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ Aplicativo no regEdit quando você usa System.Diagnostics.EventLog.WriteEntry ("SourceName", "ErrorMessage", EventLogEntryType.Error);
Então, basicamente, seu usuário não tem permissão para criar a chave. Você pode fazer o seguinte, dependendo do usuário que você está usando no valor Identity nas configurações Advanced Pool de Aplicativos:
Clique com o botão direito do mouse na chave EventLog e selecione a opção Permissões ... 3. Adicione seu usuário com acesso total ao Controle.
-Se você estiver usando "NetworkService" adicione o usuário NETWORK SERVICE
-Se você estiver usando "ApplicationPoolIdentity" adicione IIS APPPOL {nome do seu pool de aplicativos} (use o local da máquina local ao pesquisar o usuário).
-Se você estiver usando o "LocalSystem", verifique se o usuário tem permissões de administrador. Não é recomendado para vulnerabilidades.
Repita as etapas de 1 a 3 para HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ Security
Para depuração com o Visual Studio, uso "NetworkService" (é usuário do ASP.NET) e, quando o site é publicado, usei "AppicationPoolIdentity".
fonte
Para sua informação ... meu problema foi que acidentalmente selecionou "Serviço local" como a conta nas propriedades do ProcessInstaller em vez de "Sistema local". Apenas mencionando para quem mais seguiu o tutorial do MSDN, como mostra a seleção do Serviço local primeiro e eu não estava prestando muita atenção ...
fonte
Parece haver uma solução óbvia e óbvia para isso: ainda não vi uma grande desvantagem, pelo menos onde não é prático obter direitos administrativos para criar sua própria fonte de eventos: use uma que já esteja lá.
Os dois que eu comecei a usar são ".Net Runtime" e "Application Error", que parecem estar presentes na maioria das máquinas.
As principais desvantagens são a incapacidade de agrupar por esse evento e você provavelmente não possui uma identificação de evento associada, o que significa que a entrada do log pode muito bem ser prefixada com algo semelhante ao efeito "A descrição da identificação de evento 0 da origem .Net O tempo de execução não pode ser encontrado ... "se você o omitir, mas o log entra e a saída parece amplamente sensata.
O código resultante acaba tendo a seguinte aparência:
Obviamente, como sempre há uma chance de você estar em uma máquina que não possui essas fontes de eventos por qualquer motivo, provavelmente desejará
try {} catch{}
envolvê-la caso ela falhe e torne as coisas piores, mas agora os eventos são salváveis.fonte
Não estou trabalhando no IIS, mas tenho um aplicativo que lança o mesmo erro em uma caixa 2K8. Funciona muito bem em uma caixa 2K3, vai entender.
Minha resolução foi "Executar como administrador" para conceder direitos elevados ao aplicativo e tudo funciona bem. Espero que isso ajude a levá-lo na direção certa.
Windows 2008 é direitos / permissões / elevação é realmente diferente do Windows 2003, gar.
fonte
Olá, encontrei o mesmo problema quando estava desenvolvendo um aplicativo e queria instalá-lo em um PC remoto. Corrigi-o fazendo o seguinte:
1) Vá para o seu registro, localize: HKLM \ System \ CurrentControlSet \ Services \ EventLog \ Application (??? YOUR_SERVICE_OR_APP_NAME ???)
Observe que "(??? YOUR_SERVICE_OR_APP_NAME ???)" é o nome do seu serviço de aplicativo como você o definiu quando criou sua implantação do .NET, por exemplo, se você nomeasse seu novo aplicativo como "Meu novo aplicativo", a chave seria: HKLM \ System \ CurrentControlSet \ Services \ EventLog \ Application \ Meu Novo Aplicativo
Nota2: Dependendo do eventLog em que você está gravando, você pode encontrar na sua caixa DEV, \ Application \ (como observado acima), ou também (\ System) ou (\ Security), dependendo do evento em que o aplicativo está gravando, principalmente , (\ Application) deve ficar bem o tempo todo.
2) Estar na tecla acima, no menu; Selecione "ARQUIVO" -> "Exportar" e salve o arquivo. (Nota: Isso criaria as configurações de registro necessárias quando o aplicativo precisaria acessar essa chave para gravar no Visualizador de Eventos). O novo arquivo será um arquivo .REG, pelo argumento, chame-o de "Meu Novo Aplicativo.REG "
3) Ao implantar no PRODuction, consulte o administrador do sistema do servidor (SA), entregue o arquivo "My New App.REG" junto com o aplicativo e peça à SA para instalar esse arquivo REG, uma vez feito (como administrador), crie a chave para sua aplicação.
4) Execute seu aplicativo, ele não precisará acessar nada além dessa chave.
O problema deve estar resolvido agora.
Causa:
Ao desenvolver um aplicativo que grava qualquer coisa no EventLog, ele exigiria uma CHAVE no registro do log de eventos, se essa chave não for encontrada, tentaria criá-la, o que falharia por não ter permissões para isso. O processo acima é semelhante à implantação de um aplicativo (manualmente), enquanto estamos criando isso por conta própria e não precisamos ter dor de cabeça, pois você não está aprimorando o registro adicionando permissões a TODOS, o que é um risco de segurança nos servidores de produção.
Espero que isso ajude a resolvê-lo.
fonte
Embora a resposta do instalador seja uma boa resposta, nem sempre é prático ao lidar com o software que você não escreveu. Uma resposta simples é criar o log e a fonte de eventos usando o comando PowerShell New-EventLog ( http://technet.microsoft.com/en-us/library/hh849768.aspx )
Execute o PowerShell como administrador e execute o seguinte comando alterando o nome e a origem do log necessários.
Aplicativo New-EventLog -LogName -Source TFSAggregator
Usei-o para resolver a exceção do log de eventos quando o agregador executa um problema no codeplex.
fonte
Teve um problema semelhante com todos os nossos servidores de 2008. O log de segurança parou de funcionar por causa de um GPO que levou o grupo Usuários Autenticados e a permissão de leitura para longe da chave
HKLM\System\CurrentControlSet\Services\EventLog\security
Colocar isso de volta por recomendação da Microsoft corrigiu o problema. Suspeito que a leitura de todos os usuários autenticados em um nível superior também corrija o seu problema.
fonte
Eu bati problema semelhante - no meu caso Fonte contido
<
,>
caracteres. Máquinas de 64 bits estão usando a nova base uniforme de log-xml, eu diria, e esses caracteres (definidos a partir da string) criam xml inválido, o que causa exceção. Indiscutivelmente, isso deve ser considerado um problema da Microsoft - não manipulando a Origem (nome / string) corretamente.fonte
A solução é muito simples - execute o aplicativo Visual Studio no modo Admin!
fonte
Meu aplicativo é instalado em servidores Web clientes. Em vez de mexer nas permissões do Serviço de Rede e no registro, optei por verificar
SourceExists
e executarCreateEventSource
no meu instalador.Também adicionei um try / catch ao redor
log.source = "xx"
do aplicativo para defini-lo como uma fonte conhecida se minha fonte de eventos não fosse criada (isso só seria possível se eu trocasse hot. Dll em vez de reinstalar).fonte
tente abaixo em web.config
fonte
Eu tive esse problema ao executar um aplicativo no VS. Tudo o que eu precisava fazer era executar o programa como Administrador uma vez, para poder executar no VS.
Para executar como administrador, basta navegar para sua pasta de depuração no Windows Explorer. Clique com o botão direito do mouse no programa e escolha Executar como administrador.
fonte
A reconstrução da solução funcionou para mim
fonte