it-swarm.com.de

System.Security.SecurityException: Die Quelle wurde nicht gefunden, aber einige oder alle Ereignisprotokolle konnten nicht durchsucht werden. Unzugängliche Protokolle: Sicherheit

Ich versuche, einen Windows-Dienst zu erstellen, aber wenn ich ihn versuche und installiere, wird der folgende Fehler zurückgesetzt:

System.Security.SecurityException: Die Quelle wurde nicht gefunden, aber einige oder alle Ereignisprotokolle konnten nicht durchsucht werden. Unzugängliche Protokolle: Sicherheit.

Ich weiß nicht, was das bedeutet - meine Anwendung hat das Nötigste, da ich nur die Dinge zuerst teste.

Mein Installer Code:

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)
        {
        }
    }
}

Mein Service Code:

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

Wenn Sie zur Eingabe eines Benutzernamens und eines Kennworts aufgefordert werden, wird irgendwo der Wert Account = ServiceAccount.User - das ist der einzige Weg, der passieren könnte (sollte). Möglicherweise wird Ihr Code im obigen Kommentar nicht ausgeführt, oder er wird durch die spätere Ausführung von Code zurückgesetzt.

In Bezug auf Ihren zweiten Absatz würde ich im Allgemeinen denken, dass ein Dienst hierfür in Ordnung ist, wenn Sie nicht möchten, dass er auf der Konsole angezeigt oder als Task ausgeführt wird. Ich bin nicht sicher, ob ich den Teil über die Ausführung als ASP.NET verstehe und nicht zulasse, dass Sie die Datenbank sehen ...

Schließlich kann ich in Ihrem letzten Absatz nicht mit der NullExeception sprechen, ohne mehr darüber zu wissen, was im Code Ihres Installers vor sich geht.

4
Jim

Ich habe die gleiche Ausnahme beim Versuch, einen Dienst über die Befehlszeile zu installieren, wenn installutil in Windows 7 verwendet wurde. Die Lösung bestand darin, die Befehlszeile als Administrator zu öffnen und dann installutil auszuführen.

Es kann auch einfacher sein, ein Framework wie TopShelf zum Hosten Ihrer Dienste zu verwenden, da es alle Setup-Konfiguration verwaltet, vom Namen und der Beschreibung des Dienstes bis zu Ihrer Wiederherstellung Prozess wird funktionieren. Sie können Ihren Dienst auch ganz einfach aus dem IDE heraus starten, wenn Sie ihn debuggen.

173
WhiteKnight

Führen Sie Ihre Eingabeaufforderung als Administrator aus. Es wird Ihr Problem lösen

49
Vicky

Als Administrator ausführen

Dies ist ein sehr häufiges Problem, das Programmierer vermissen

36
Omer K

Ich löse das gleiche Problem, indem ich die VS2013-Entwicklerkonsole mit Administratorrechten öffne.

9
MarioAraya

Sie versuchen wahrscheinlich, einen Dienst mit zu installieren

  1. Ein Benutzerkonto, das nicht über ausreichende Rechte verfügt ODER
  2. Ein Benutzer mit Administratorrechten hat die Eingabeaufforderung im Administratormodus nicht ausgeführt.

In diesem Fall liegt das Problem insbesondere in der Erstellung einiger EventLog-Registrierungsschlüssel während der Dienstinstallation.

Eine Möglichkeit, dies zu beheben, besteht darin, sicherzustellen, dass Sie die Eingabeaufforderung im Administratormodus ausführen. (Klicken Sie mit der rechten Maustaste auf> Als Administrator ausführen.

Ich bin auch auf einige Fälle gestoßen, in denen diese Methode das SecurityException -Problem immer noch nicht lösen kann, da einige Registrierungsschlüssel nicht über die Berechtigung "Vollzugriff" für Administratorkonten verfügen.

Für die folgenden Schlüssel sollte "Vollzugriff" für Administratoren festgelegt sein, damit der Dienst in das Ereignisprotokoll schreiben kann:

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

Dies kann erfolgen durch:

  1. Aufrufen des Windows-Registrierungseditors
    • Führe [Win + R] aus
    • Tippe 'regedit'
    • Okay
  2. Navigieren Sie zu einem der oben aufgeführten Pfade
  3. Klicken Sie mit der rechten Maustaste auf den gewünschten Pfad
  4. Stellen Sie sicher, dass sowohl die Kontrollkästchen Lesen als auch Vollzugriff für Administratoren aktiviert sind
  5. Klicken Sie auf Übernehmen und [~ # ~] OK [~ # ~]
  6. Wiederholen Sie den gleichen Vorgang für den anderen Pfad
6
keith.g