Je reçois l'exception suivante. J'ai donné le plein contrôle au compte Asp.net sur Eventlogs dans le registre.
[SecurityException: la source n'a pas été trouvée, mais certains ou tous les événements les journaux 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?
EventLog.SourceExists
énumère à travers les sous-clés de HKLM\SYSTEM\CurrentControlSet\services\eventlog
pour voir s'il contient une sous-clé avec le nom spécifié. Si le compte d'utilisateur sous lequel le code est exécuté n'a pas d'accès en lecture à une sous-clé à laquelle il tente d'accéder (dans votre cas, la sous-clé Security
) avant de trouver la source cible, vous verrez une exception similaire à celle que vous avez décrite.
L’approche habituelle pour traiter ces problèmes consiste à enregistrer les sources du journal des événements au moment de l’installation (sous un compte administrateur), puis supposer qu’elles existent au moment de l’exécution, permettant ainsi à toute exception résultante d’être traitée comme inattendue si une source de journal des événements cible n'existe pas réellement au moment de l'exécution.
A eu la même exception. Dans mon cas, je devais exécuter l'invite de commande avec les droits d'administrateur.
Dans le menu Démarrer, cliquez avec le bouton droit de la souris sur Invite de commandes, sélectionnez "Exécuter en tant qu'administrateur".
Pour moi, cette erreur était due à la commande Invite, qui ne fonctionnait pas sous les privilèges d'administrateur. Vous devez faire un clic droit sur la commande Invite et dire " Exécuter en tant qu'administrateur ".
Vous avez besoin du rôle d'administrateur pour installer ou désinstaller un service.
Lancez la ligne de commande du développeur "En tant qu'administrateur". Ce compte a un accès complet au journal de sécurité.
Cela n'a pas fonctionné pour moi.
J'ai créé une nouvelle valeur de clé et de chaîne et j'ai réussi à le 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
Si vous effectuez une nouvelle installation du site Web SenseNet TaskManagement sur IIS (à partir du code source, pas de WebPI), vous obtiendrez ce message, généralement lié à la communication SignalR. Comme le souligne @ nicole-caliniou, cela est dû à une recherche de clé dans le registre qui a échoué.
Pour résoudre ce problème avec SenseNet TaskManagement version 1.1.0, commencez par rechercher le nom de la clé de registre dans le fichier web.config. Par défaut c'est "SnTaskWeb".
<appSettings>
<add key="LogSourceName" value="SnTaskWeb" />
Ouvrez l'éditeur de registre, regedit.exe
et accédez à HKLM\SYSTEM\CurrentControlSet\Services\EventLog\SnTask
. Cliquez avec le bouton droit sur SnTask et sélectionnez New Key
, puis nommez la clé SnTaskWeb
pour la configuration indiquée ci-dessus. Cliquez ensuite avec le bouton droit sur l’élément SnTaskWeb
et sélectionnez New Expandable String Value
. Le nom doit être EventMessageFile
et les données de la valeur doivent être C:\Windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll
.
Mots-clés: signalr, sensenet, regedit, permissions
Pour moi, je viens de travailler iisreset (exécutez cmd en tant qu'administrateur -> iisreset). Peut-être que quelqu'un pourrait essayer.
Journaux inaccessibles: Sécurité
Une nouvelle source d'événements doit avoir un nom unique dans tous les journaux, y compris Security (qui nécessite le privilège administrateur lors de la lecture).
Donc, votre application aura besoin du privilège admin pour créer une source. Mais c'est probablement un peu exagéré.
J'ai écrit ce script powershell pour créer la source de l'événement à volonté. Enregistrez-le sous le nom *.ps1
et exécutez-le avec le privilège any. Il s’élèvera lui-même.
# 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');