A fonte não foi encontrada, mas alguns ou todos os logs de eventos não puderam ser pesquisados

125

Estou recebendo a seguinte exceção. Dei controle total à conta Asp.net nos logs de eventos na edição do Registro.

[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(String source,  String machineName, Boolean readOnly, Boolean wantToCreate) +664
System.Diagnostics.EventLog.SourceExists(String source, String machineName, Boolean wantToCreate) +109
System.Diagnostics.EventLog.SourceExists(String source) +14 Microsoft.ApplicationBlocks.ExceptionManagement.DefaultPublisher.VerifyValidSource() +41

Eu acho que isso é devido a algum problema de configuração no servidor?

Vaibhav Jain
fonte
Postei minha resposta e o moderador a excluiu. Certifique-se de executar o serviço como sistema local, mas não outro, pois o sistema local pode criar apenas logs e fontes de eventos. Eu estava executando meu serviço como serviço de rede e recebi essa exceção. Mais tarde, parei o serviço e reiniciei como sistema local e funcionou bem. Depois disso, parei e reiniciei meu serviço como serviço de rede e funcionou bem.
Ziggler

Respostas:

105

EventLog.SourceExistsenumera através das subchaves de HKLM\SYSTEM\CurrentControlSet\services\eventlogpara ver se ele contém uma subchave com o nome especificado. Se a conta de usuário sob a qual o código está sendo executado não tiver acesso de leitura a uma subchave que ele tenta acessar (no seu caso, a Securitysubchave) antes de encontrar a fonte de destino, você verá uma exceção como a que você descreveu.

A abordagem usual para lidar com esses problemas é registrar fontes de log de eventos no momento da instalação (em uma conta de administrador) e assumir que elas existem no tempo de execução, permitindo que qualquer exceção resultante seja tratada como inesperada se uma fonte de log de eventos de destino não existir realmente em tempo de execução.

Nicole Calinoiu
fonte
26
No Windows 8, parece que mesmo quando o UAC está desabilitado E o usuário é administrador, ainda é necessário executar o VS como administrador. essa é a solução no meu caso
itsho
2
Para mim, bastava executar o aplicativo como administrador apenas pela primeira vez. Depois disso, a fonte do evento foi criada e o aplicativo funcionou bem.
Thomaskonrad
2
este é um exemplo de como janelas desencorajar usando as ferramentas embutidas no OS
Felice Pollano
67

Teve a mesma exceção. No meu caso, tive que executar o prompt de comando com direitos de administrador.

No menu Iniciar, clique com o botão direito do mouse em Prompt de Comando, selecione "Executar como administrador".

amor ao vivo
fonte
2
A minha situação é executar o Visual Studio 2015 como administrador. (executando um projeto de API da Web).
Kevin .NET
9

Para mim, esse erro ocorreu devido ao prompt de comando, que não estava sendo executado sob privilégios de administrador. Você precisa clicar com o botão direito do mouse no prompt de comando e dizer " Executar como administrador" ".

Você precisa da função de administrador para instalar ou desinstalar um serviço.

Raza
fonte
Eu estava me atrapalhando por cerca de 2 horas, obrigado companheiro!
Mox Shah
8

Inicie a linha de comando do desenvolvedor "Como administrador". Esta conta tem acesso total ao log de segurança

dmolisher
fonte
6

Não funcionou para mim.

Criei um novo valor de chave e sequência e consegui fazê-lo funcionar

Key= HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\<Your app name>\
String EventMessageFile value=C:\Windows\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll
Mike Hart
fonte
Eu fiz o mesmo. Acabei de criar uma nova chave com o nome da fonte que estou usando dentro do meu aplicativo e funcionou.
Campinho
1

Para mim, apenas funcionou o iisreset (execute o cmd como administrador -> iisreset). Talvez alguém possa tentar.

Miroslav Bihari
fonte
1

Logs inacessíveis: Segurança

Uma nova fonte de eventos precisa ter um nome exclusivo em todos os logs, incluindo Segurança (que precisa de privilégio de administrador durante a leitura).

Portanto, seu aplicativo precisará de privilégio de administrador para criar uma fonte. Mas isso é provavelmente um exagero.

Eu escrevi esse script do PowerShell para criar a fonte do evento à vontade. Salve-o como *.ps1e execute-o com qualquer privilégio e ele se elevará.

# CHECK OR RUN AS ADMIN

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{   
    $arguments = "& '" + $myinvocation.mycommand.definition + "'"
    Start-Process powershell -Verb runAs -ArgumentList $arguments
    Break
}

# CHECK FOR EXISTENCE OR CREATE

$source = "My Service Event Source";
$logname = "Application";

if ([System.Diagnostics.EventLog]::SourceExists($source) -eq $false) {
    [System.Diagnostics.EventLog]::CreateEventSource($source, $logname);
    Write-Host $source -f white -nonewline; Write-Host " successfully added." -f green;
}
else
{
    Write-Host $source -f white -nonewline; Write-Host " already exists.";
}

# DONE

Write-Host -NoNewLine 'Press any key to continue...';
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown');
Bizhan
fonte
1

Recentemente, experimentei o erro e nenhuma das soluções funcionou para mim. O que resolveu o erro para mim foi adicionar o usuário do pool de aplicativos ao grupo Usuários avançados no gerenciamento de computadores. Não pude usar o grupo Administrador devido a uma política da empresa.

Mandi
fonte
0

Se você estiver executando uma nova instalação do site do SenseNet TaskManagement no IIS (do código-fonte, não do WebPI), receberá essa mensagem, geralmente relacionada à comunicação do SignalR. Como o @ nicole-caliniou aponta, é devido a uma pesquisa chave no Registro que falha.

Para resolver isso no SenseNet TaskManagement v1.1.0, localize primeiro o nome da chave do registro no arquivo web.config. Por padrão, é "SnTaskWeb".

 <appSettings>
   <add key="LogSourceName" value="SnTaskWeb" />

Abra o editor de registro regedit.exee navegue até HKLM\SYSTEM\CurrentControlSet\Services\EventLog\SnTask. Clique com o botão direito do mouse em SnTask New Key, selecione e nomeie a chave SnTaskWebda configuração mostrada acima. Em seguida, clique com o botão direito do mouse no SnTaskWebelemento e selecione New Expandable String Value. O nome deve ser EventMessageFilee os dados do valor devem ser C:\Windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll.

Palavras-chave: signalr, sensenet, regedit, permissões

Thane Plummer
fonte
0

Se você deseja apenas detectar se existe uma fonte na máquina local, mas não tem a capacidade de obter autorização para fazer isso, você pode digitá-la no exemplo a seguir (VB).

Isso ignora o erro de segurança. Da mesma forma, você pode modificar essa função para retornar o LogName da origem.

Public Shared Function eventLogSourceExists(sSource as String) as Boolean
    Try
        EventLog.LogNameFromSourceName(sSource, ".")
        Return True
    Catch
        Return False
    End Try
End Function
Timothy C. Quinn
fonte