Je travaille à essayer de porter une application ASP.NET du serveur 2003 (et IIS6) au serveur 2008 (IIS7).
Lorsque j'essaye de visiter la page du navigateur, j'obtiens ceci:
Erreur serveur dans l'application '/'
Exception de sécurité
Description: l'application a tenté d'effectuer une opération non autorisée par la stratégie de sécurité. Pour accorder à cette application l'autorisation requise, veuillez contacter votre administrateur système ou modifier le niveau de confiance de l'application dans le fichier de configuration.
Détails de l'exception: System.Security.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é
Erreur source:
Une exception non gérée a été générée lors de l'exécution de la requête Web actuelle. Les informations concernant l'origine et l'emplacement de l'exception peuvent être identifiées à l'aide de la trace de pile d'exceptions ci-dessous.
Trace de la pile:
[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) +562 System.Diagnostics.EventLog.SourceExists (String source, String machineName) +251
[couper]
Voici ce que j'ai fait pour essayer de le résoudre:
Donnez à «Tout le monde» l'autorisation d'accès complet à la clé
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Security
. Cela a fonctionné. Mais naturellement je ne peux pas faire ça en production. J'ai donc supprimé l'autorisation «Tout le monde» après avoir exécuté l'application pendant quelques minutes et l'erreur est réapparue.J'ai créé la source dans le journal d'application et le journal de sécurité (et j'ai vérifié qu'il existe via regedit) lors de l'installation avec des autorisations élevées, mais l'erreur est restée.
J'ai donné à l'application un niveau de confiance total dans le
web.config
fichier (et en utilisantappcmd.exe
) mais en vain.
Quelqu'un a-t-il une idée de ce qui pourrait être fait ici?
PS: Ceci est une suite à cette question . J'ai suivi les réponses données mais en vain (voir # 2 ci-dessus).
Réponses:
Pour donner l'
Network Service
autorisation de lecture sur laEventLog/Security
clé (comme suggéré par Firenzi et royrules22), suivez les instructions de http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspxStart
alorsRun
regedt32
ouregedit
Naviguez / développez jusqu'à la clé suivante:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security
Faites un clic droit sur cette entrée et sélectionnez Autorisations
Ajouter l'
Network Service
utilisateurDonnez-lui l'autorisation de lecture
MISE À JOUR: Les étapes ci-dessus sont correctes sur les machines de développement, où vous n'utilisez pas le processus de déploiement pour installer l'application.
Cependant, si vous déployez votre application sur d'autres machines, envisagez d' enregistrer les sources du journal des événements pendant l'installation, comme suggéré dans les réponses de SailAvid et Nicole Calinoiu .
J'utilise la fonction PowerShell (appelant dans Octopus Deploy.ps1)
la source
Le problème est que l '
EventLog.SourceExists
essaie d'accéder auEventLog\Security
clé, accès qui n'est autorisé que pour un administrateur.Un exemple courant de connexion à un programme C #
EventLog
est:Cependant, les lignes suivantes échouent si le programme ne dispose pas des autorisations d'administrateur et que la clé ne se trouve pas sous
EventLog\Application
carEventLog.SourceExists
elle essaiera alors d'accéderEventLog\Security
.Par conséquent, la méthode recommandée est de créer un script d'installation, qui crée la clé correspondante, à savoir:
On peut alors supprimer ces deux lignes.
Vous pouvez également créer un
.reg
fichier pour créer la clé de registre. Enregistrez simplement le texte suivant dans un fichiercreate.reg
:la source
La solution consistait à donner au compte «Service réseau» l'autorisation de lecture sur la clé EventLog / Security.
la source
Pour moi, seule l'octroi d'autorisations "Lecture" pour "NetworkService" à toute la branche "EventLog" fonctionnait.
la source
J'ai eu un problème très similaire avec un programme de console que je développe sous VS2010 (mis à jour à partir de VS2008 sous XP). Mon prog utilise EnLib pour effectuer une journalisation. L'erreur a été déclenchée car EntLib n'avait pas l'autorisation d'enregistrer une nouvelle source d'événements.
J'ai donc commencé une fois mon prog compilé en tant qu'administrateur : il a enregistré la source de l'événement. Ensuite, je suis retourné développer et déboguer depuis VS sans problème.
(vous pouvez également vous référer à http://www.blackwasp.co.uk/EventLog_3.aspx , cela m'a aidé
la source
Cette exception se produisait pour moi à partir d'une application console .NET exécutée en tant que tâche planifiée, et j'essayais de faire fondamentalement la même chose: créer une nouvelle source d'événements et écrire dans le journal des événements.
En fin de compte, la définition d'autorisations complètes pour l'utilisateur sous lequel la tâche s'exécutait sur les clés suivantes a fait l'affaire pour moi:
la source
eventlog\Application
eteventlog\Security
; contrôle total requiseventlog
uniquement sur la racine.J'essaye presque tout ici pour résoudre ce problème ... Je partage ici la réponse qui m'aide:
sur http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspx , merci Michael Freidgeim
la source
J'ai rencontré le même problème, mais j'ai dû monter d'un niveau et donner un accès complet à tout le monde à la clé HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ EventLog \, au lieu de passer à la sécurité, qui a résolu le problème pour moi.
la source
Même problème sur Windows 7 64bits. Exécuter en tant qu'administrateur a résolu le problème.
la source
Une nouvelle clé avec le nom source utilisé doit être créée sous HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ Application dans regEdit lorsque vous utilisez System.Diagnostics.EventLog.WriteEntry ("SourceName", "ErrorMessage", EventLogEntryType.Error);
Donc, fondamentalement, votre utilisateur n'a pas l'autorisation de créer la clé. Le peut effectuer les opérations suivantes en fonction de l'utilisateur que vous utilisez à partir de la valeur Identité dans les paramètres avancés du pool d'applications:
Cliquez avec le bouton droit sur la clé EventLog et sélectionnez l'option Autorisations ... 3. Ajoutez votre utilisateur avec un accès Contrôle total.
-Si vous utilisez "NetworkService", ajoutez un utilisateur de SERVICE RÉSEAU
-Si vous utilisez "ApplicationPoolIdentity" ajoutez IIS APPPOL {nom de votre pool d'applications} (utilisez l'emplacement de la machine locale lors de la recherche de l'utilisateur).
-Si vous utilisez "LocalSystem", assurez-vous que l'utilisateur dispose des droits d'administrateur. Il n'est pas recommandé pour les vulnérabilités.
Répétez les étapes de 1 à 3 pour HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ Security
Pour le débogage avec Visual Studio, j'utilise "NetworkService" (c'est un utilisateur ASP.NET) et lorsque le site est publié, j'utilise "AppicationPoolIdentity".
la source
FYI ... mon problème était que accidentellement sélectionné "Local Service" comme compte sur les propriétés de ProcessInstaller au lieu de "Local System". Je mentionne simplement pour quiconque a suivi le didacticiel MSDN, car la sélection du service local le montre en premier et je ne faisais pas attention ....
la source
Il semble y avoir une solution évidente à cela que je n'ai pas encore vu un énorme inconvénient, du moins lorsqu'il n'est pas pratique d'obtenir des droits administratifs afin de créer votre propre source d'événements: utilisez-en une qui existe déjà.
Les deux que j'ai commencé à utiliser sont ".Net Runtime" et "Application Error", qui semblent tous deux être présents sur la plupart des machines.
Les principaux inconvénients sont l'impossibilité de regrouper par cet événement et le fait que vous n'avez probablement pas d'ID d'événement associé, ce qui signifie que l'entrée de journal peut très bien être précédée de quelque chose comme "La description de l'ID d'événement 0 de la source .Net Runtime ne peut pas être trouvé .... "si vous l'omettez, mais le journal entre et la sortie semble globalement raisonnable.
Le code résultant finit par ressembler à:
Bien sûr, comme il y a toujours une chance que vous soyez sur une machine qui ne dispose pas de ces sources d'événements pour une raison quelconque, vous voudrez probablement l'
try {} catch{}
envelopper au cas où cela échouerait et aggraverait les choses, mais les événements sont désormais sauvegardables.la source
Je ne travaille pas sur IIS, mais j'ai une application qui renvoie la même erreur sur une boîte 2K8. Cela fonctionne très bien sur une boîte 2K3, allez comprendre.
Ma résolution était de "Exécuter en tant qu'administrateur" pour donner à l'application des droits élevés et tout fonctionne bien. J'espère que cela vous guidera dans la bonne direction.
Windows 2008 est droits / autorisations / élévation est vraiment différent de Windows 2003, gar.
la source
Salut, j'ai rencontré le même problème lorsque je développais une application et que je voulais l'installer sur un PC distant, je l'ai résolu en procédant comme suit:
1) Accédez à votre registre, recherchez: HKLM \ System \ CurrentControlSet \ Services \ EventLog \ Application (??? YOUR_SERVICE_OR_APP_NAME ???)
Notez que "(??? YOUR_SERVICE_OR_APP_NAME ???)" est le nom de votre service d'application tel que vous l'avez défini lors de la création de votre déploiement .NET, par exemple, si vous avez nommé votre nouvelle application "Ma nouvelle application", la clé serait: HKLM \ System \ CurrentControlSet \ Services \ EventLog \ Application \ My New app
Note 2: Selon le eventLog dans lequel vous écrivez, vous pouvez trouver sur votre boîte DEV, \ Application \ (comme indiqué ci-dessus), ou aussi (\ System) ou (\ Security) en fonction de l'événement dans lequel votre application écrit, principalement , (\ Application) devrait être correct tout le temps.
2) Être sur la touche ci-dessus, dans le menu; Sélectionnez "FILE" -> "Export", puis enregistrez le fichier. (Remarque: Cela créerait vos paramètres de registre nécessaires lorsque l'application aurait besoin d'accéder à cette clé pour écrire dans l'Observateur d'événements), le nouveau fichier sera un fichier .REG, pour le bien de l'argument, appelez-le «Ma nouvelle application.REG "
3) Lors du déploiement sur PRODuction, consultez l'administrateur système du serveur (SA), remettez le fichier "My New App.REG" avec l'application, et demandez au SA d'installer ce fichier REG, une fois terminé (en tant qu'administrateur), cela créez la clé de votre application.
4) Exécutez votre application, elle ne devrait pas avoir besoin d'accéder à autre chose que cette clé.
Le problème devrait être résolu maintenant.
Cause:
Lors du développement d'une application qui écrit quoi que ce soit dans le EventLog, il faudrait une CLÉ pour elle sous le registre Eventlog si cette clé n'est pas trouvée, il essaierait de la créer, ce qui échoue alors pour n'avoir aucune autorisation pour le faire. Le processus ci-dessus est similaire au déploiement d'une application (manuellement) alors que nous la créons nous-mêmes, et pas besoin d'avoir un mal de tête puisque vous ne modifiez pas le registre en ajoutant des autorisations à TOUT LE MONDE, ce qui constitue un risque de sécurité sur les serveurs de production.
J'espère que cela aidera à le résoudre.
la source
Bien que la réponse de l'installateur soit une bonne réponse, elle n'est pas toujours pratique lorsqu'il s'agit d'un logiciel que vous n'avez pas écrit. Une réponse simple consiste à créer le journal et la source d'événements à l'aide de la commande PowerShell New-EventLog ( http://technet.microsoft.com/en-us/library/hh849768.aspx )
Exécutez PowerShell en tant qu'administrateur et exécutez la commande suivante en modifiant le nom du journal et la source dont vous avez besoin.
New-EventLog -LogName Application -Source TFSAggregator
Je l'ai utilisé pour résoudre l' exception du journal des événements lorsque l'agrégateur exécute un problème à partir du codeplex.
la source
Eu un problème similaire avec tous nos serveurs 2008. Le journal de sécurité a complètement cessé de fonctionner en raison d'un objet de stratégie de groupe qui a retiré le groupe Utilisateurs authentifiés et l'autorisation de lecture de la clé
HKLM\System\CurrentControlSet\Services\EventLog\security
Remettre cela en fonction de la recommandation de Microsoft a corrigé le problème. Je pense que donner à tous les utilisateurs authentifiés une lecture à un niveau supérieur corrigera également votre problème.
la source
J'ai frappé problème similaire - dans mon cas Source contenu
<
,>
caractères. Les machines 64 bits utilisent un nouveau journal pair - une base XML, je dirais, et ces caractères (définis à partir d'une chaîne) créent un XML invalide qui provoque une exception. Cela devrait sans doute être considéré comme un problème avec Microsoft - ne pas gérer correctement la source (nom / chaîne).la source
La solution est très simple - Exécutez l'application Visual Studio en mode administrateur!
la source
Mon application est installée sur les serveurs Web clients. Plutôt que de jouer avec les autorisations du service réseau et le registre, j'ai choisi de vérifier
SourceExists
et d'exécuterCreateEventSource
mon programme d'installation.J'ai également ajouté un essai / capture
log.source = "xx"
dans l'application pour le définir sur une source connue si ma source d'événement n'a pas été créée (cela ne se produirait que si j'échangeais à chaud un .dll au lieu de la réinstaller).la source
essayez ci-dessous dans web.config
la source
J'ai eu ce problème lors de l'exécution d'une application dans VS. Tout ce que j'avais à faire était d'exécuter le programme en tant qu'administrateur une fois, puis je pourrais exécuter à partir de VS.
Pour exécuter en tant qu'administrateur, accédez simplement à votre dossier de débogage dans l'explorateur Windows. Cliquez avec le bouton droit sur le programme et choisissez Exécuter en tant qu'administrateur.
la source
Reconstruire la solution a fonctionné pour moi
la source