La source n'a pas été trouvée, mais certains ou tous les journaux d'événements n'ont pas pu être recherchés


125

J'obtiens l'exception suivante. J'ai donné le contrôle total au compte Asp.net sur Eventlogs dans l'édition du registre.

[SecurityException: la source n'a pas été trouvée, mais certains ou tous les journaux d'événements n'ont pas pu être recherchés. Journaux inaccessibles: sécurité.]

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

Je suppose que cela est dû à un problème de configuration sur le serveur?



J'ai publié ma réponse et le modérateur l'a supprimée. Assurez-vous d'exécuter votre service en tant que système local mais pas autre, car le système local ne peut créer que des journaux d'événements et des sources. J'exécutais mon service en tant que service réseau et j'ai obtenu cette exception. Plus tard, j'ai arrêté le service et redémarré en tant que système local et cela a bien fonctionné et après cela j'ai arrêté et redémarré mon service en tant que service réseau et cela a bien fonctionné.
Ziggler

Réponses:


105

EventLog.SourceExistsénumère à travers les sous-clés de HKLM\SYSTEM\CurrentControlSet\services\eventlogpour voir si elle contient une sous-clé avec le nom spécifié. Si le compte d'utilisateur sous lequel le code s'exécute n'a pas d'accès en lecture à une sous-clé à laquelle il tente d'accéder (dans votre cas, la Securitysous - clé) avant de trouver la source cible, vous verrez une exception comme celle que vous avez décrite.

L'approche habituelle pour gérer ces problèmes consiste à enregistrer les sources du journal des événements au moment de l'installation (sous un compte d'administrateur), puis à supposer qu'elles existent au moment de l'exécution, ce qui permet à toute exception résultante d'être traitée comme inattendue si une source de journal des événements cible n'existe pas réellement lors de l'exécution.


26
Sur Windows 8, il semble que même lorsque l'UAC est désactivé ET que l'utilisateur est administrateur, il est toujours nécessaire d'exécuter VS en tant qu'administrateur. c'est la solution sur mon cas
itsho

2
Pour moi, il suffisait d'exécuter l'application en tant qu'administrateur uniquement la première fois. Après cela, la source de l'événement a été créée et l'application a bien fonctionné.
thomaskonrad

2
ceci est un exemple sur la façon dont les fenêtres découragent d'utiliser les outils intégrés dans le système d'exploitation
Felice Pollano

67

Eu la même exception. Dans mon cas, j'ai dû exécuter l'invite de commande avec les droits d'administrateur.

Dans le menu Démarrer, faites un clic droit sur l'invite de commandes, sélectionnez "Exécuter en tant qu'administrateur".


2
La mienne situation est d'exécuter Visual Studio 2015 en tant qu'administrateur. (faisant un projet d'API Web.)
Kevin .NET

9

Pour moi, cette erreur était due à l'invite de commande, qui ne fonctionnait pas sous les privilèges d'administrateur. Vous devez faire un clic droit sur l'invite de commande et dire « Exécuter en tant qu'administrateur ».

Vous avez besoin du rôle d'administrateur pour installer ou désinstaller un service.


J'étais en train de tâtonner pendant environ 2 heures, merci mon pote!
Mox Shah

8

Lancez la ligne de commande Developer "En tant qu'administrateur". Ce compte a un accès complet au journal de sécurité


6

Cela n'a pas fonctionné pour moi.

J'ai créé une nouvelle valeur de clé et de chaîne et j'ai réussi à la faire fonctionner

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

J'ai fait la même chose. Je viens de créer une nouvelle clé avec le nom de la source que j'utilise dans mon application et cela a fonctionné.
Campinho

1

Pour moi, je viens de travailler iisreset (exécutez cmd en tant qu'administrateur -> iisreset). Quelqu'un pourrait peut-être essayer.


1

Journaux inaccessibles: sécurité

Une nouvelle source d'événements doit avoir un nom unique dans tous les journaux, y compris la sécurité (qui nécessite le privilège d'administrateur lors de sa lecture).

Votre application aura donc besoin des privilèges d'administrateur pour créer une source. Mais c'est probablement exagéré.

J'ai écrit ce script PowerShell pour créer la source de l'événement à volonté. Enregistrez-le sous *.ps1et exécutez-le avec n'importe quel privilège et il s'élèvera.

# 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');

1

J'ai récemment rencontré l'erreur et aucune des solutions n'a fonctionné pour moi. Ce qui a résolu l'erreur pour moi a été d'ajouter l'utilisateur du pool d'applications au groupe Utilisateurs avec pouvoir dans la gestion de l'ordinateur. Je n'ai pas pu utiliser le groupe Administrateur en raison d'une politique d'entreprise.


0

Si vous effectuez une nouvelle installation du site Web SenseNet TaskManagement sur IIS (à partir du code source, et non de WebPI), vous recevrez ce message, généralement lié à la communication SignalR. Comme le souligne @ nicole-caliniou, cela est dû à une recherche par clé dans le registre qui échoue.

Pour résoudre ce problème pour SenseNet TaskManagement v1.1.0, recherchez d'abord le nom de la clé de registre dans le fichier web.config. Par défaut, il s'agit de "SnTaskWeb".

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

Ouvrez l'éditeur de registre regedit.exeet accédez à HKLM\SYSTEM\CurrentControlSet\Services\EventLog\SnTask. Cliquez avec le bouton droit de la souris sur SnTask et sélectionnez New Keyet nommez la clé SnTaskWebpour la configuration ci-dessus. Cliquez ensuite avec le bouton droit sur l' SnTaskWebélément et sélectionnez New Expandable String Value. Le nom doit être EventMessageFileet les données de valeur doivent être C:\Windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll.

Mots-clés: signalr, sensenet, regedit, autorisations


0

Si vous souhaitez simplement détecter si une source existe sur la machine locale mais que vous n'avez pas la possibilité d'obtenir l'autorisation de le faire, vous pouvez la rechercher dans l'exemple suivant (VB).

Cela contourne l'erreur de sécurité. Vous pouvez également modifier cette fonction pour renvoyer le LogName pour la source.

Public Shared Function eventLogSourceExists(sSource as String) as Boolean
    Try
        EventLog.LogNameFromSourceName(sSource, ".")
        Return True
    Catch
        Return False
    End Try
End Function
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.