web-dev-qa-db-fra.com

System.Security.SecurityException: La source n'a pas été trouvée, mais certains ou tous les journaux des événements n'ont pas pu être recherchés. Journaux inaccessibles: Sécurité

J'essaie de créer un service Windows, mais lorsque j'essaie de l'installer, il revient en arrière et me donne cette erreur:

System.Security.SecurityException: La source n'a pas été trouvée, mais certains ou tous les journaux des événements n'ont pas pu être recherchés. Journaux inaccessibles: Sécurité.

Je ne sais pas ce que cela signifie - mon application a le minimum, car je teste d'abord les choses.

Mon code installateur:

namespace WindowsService1
{
    [RunInstaller(true)]
    public partial class ProjectInstaller : System.Configuration.Install.Installer
    {
        public ProjectInstaller()
        {
            //set the privileges
            processInstaller.Account = ServiceAccount.LocalSystem;
            processInstaller.Username = null;
            processInstaller.Password = null;

            serviceInstaller.DisplayName = "My Service";
            serviceInstaller.StartType = ServiceStartMode.Manual;

            //must be the same as what was set in Program's constructor
            serviceInstaller.ServiceName = "My Service";

            this.Installers.Add(processInstaller);
            this.Installers.Add(serviceInstaller);
        }

        private void serviceProcessInstaller1_AfterInstall(object sender, InstallEventArgs e)
        {
        }

        private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
        {
        }
    }
}

Mon code de service:

public partial class Service1 : ServiceBase
{
    public Service1()
    {
        this.ServiceName = "My Service";
    }

    protected override void OnStart(string[] args)
    {
        base.OnStart(args);
    }

    protected override void OnStop()
    {
        base.OnStop();
    }
}
68
michelle

Si vous êtes invité à entrer un nom d'utilisateur et un mot de passe, quelque chose, quelque part, est défini sur Account = ServiceAccount.User - c'est le seul moyen qui pourrait (devrait) arriver. Peut-être que votre code dans le commentaire ci-dessus n'est pas en cours d'exécution ou qu'il est modifié par un code en exécution ultérieure.

En ce qui concerne votre deuxième paragraphe, en général, je penserais qu'un service conviendrait à cela si vous ne voulez pas qu'il soit visible sur la console ou exécuté en tant que tâche. Je ne suis pas sûr de comprendre la partie sur son exécution en tant qu'ASP.NET et de ne pas l'avoir autorisée à voir la base de données ...

Enfin, dans votre dernier paragraphe, je ne peux pas parler de NullExeception sans en savoir plus sur ce qui se passe dans le code de votre installateur.

4
Jim

La même exception s'est produite lors de l'installation d'un service à partir de la ligne de commande lors de l'utilisation de installutil sous Windows 7. La solution consistait à ouvrir la ligne de commande en tant qu'administrateur, puis à exécuter installutil.

Vous pouvez également trouver plus facile d’utiliser un framework tel que TopShelf pour héberger vos services, car il gère tout le configuration d’installation à partir du nom et de la description du service jusqu’à la manière dont votre récupération a été effectuée. processus fonctionnera. Cela permet également de démarrer facilement votre service depuis l’intérieur du IDE lorsque vous le déboguez.

173
WhiteKnight

Exécutez votre invite de commande en tant qu'administrateur. Ça va résoudre ton problème

49
Vicky

Exécuter en tant qu'administrateur

C’est un problème très courant qui manque aux programmeurs.

36
Omer K

Je résous ce problème en ouvrant la console développeur VS2013 avec des autorisations administratives.

9
MarioAraya

Vous essayez probablement d'installer un service en utilisant

  1. Un compte utilisateur qui ne dispose pas de droits suffisants OU
  2. Un utilisateur avec des privilèges d'administrateur mais n'a pas exécuté l'invite de commande en 'Mode administrateur'.

Plus précisément, le problème dans ce cas est la création de certaines clés de registre EventLog lors de l’installation du service.

ne façon de résoudre ce problème consiste à vérifier que vous exécutez l'invite de commande en mode Administrateur. (Cliquez avec le bouton droit de la souris sur> Exécuter en tant qu'administrateur)

J'ai également rencontré des cas où cette méthode ne résout toujours pas le problème SecurityException car certaines clés de registre ne disposent pas des autorisations "Contrôle total" pour les comptes d'administrateur.

"Contrôle total" doit être défini sur les clés suivantes pour les administrateurs afin que le service puisse écrire dans le journal des événements:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application

Cela peut être fait par:

  1. Invocation de l'éditeur de registre Windows
    • Run [Win + R]
    • Tapez 'regedit'
    • D'accord
  2. Naviguez vers un chemin répertorié ci-dessus
  3. Clic droit sur le chemin souhaité
  4. Assurez-vous que les cases à cocher Lecture et Contrôle total sont cochées pour les administrateurs.
  5. Cliquez sur Appliquer et [~ # ~] ok [~ # ~]
  6. Répétez le même processus pour l'autre chemin
6
keith.g