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


72

Ich versuche, einen Windows-Dienst zu erstellen, aber wenn ich versuche, ihn zu installieren, wird ein Rollback ausgeführt, der folgenden Fehler verursacht:

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 Installationscode:

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();
    }
}

2
"Ich habe sowohl Konto als auch Passwort auf null und Konto auf lokales System gesetzt." - Wie haben Sie dieselbe Eigenschaft auf zwei verschiedene Dinge festgelegt ...?
QJake

`processInstaller.Account = ServiceAccount.LocalSystem; processInstaller.Username = null; processInstaller.Password = null; `
Michelle

sry ich habe nicht bemerkt, dass ich Konto zweimal sagte: /
michelle

Wenn Sie einen Teil Ihres Codes veröffentlicht haben, können wir Ihnen möglicherweise helfen.
Mark Kram

10
Versuchen Sie, den Befehl "installUtil" mit Administratorrechten auszuführen.
Corstian Boerman

Antworten:


4

Wenn Sie zur Eingabe eines Benutzernamens und eines Kennworts aufgefordert werden, ist irgendwo etwas festgelegt Account = ServiceAccount.User- nur so kann (sollte) dies geschehen. Möglicherweise wird Ihr Code im obigen Kommentar nicht ausgeführt oder durch späteres Ausführen von Code zurückgesetzt.

Was Ihren zweiten Absatz betrifft, würde ich im Allgemeinen denken, dass ein Dienst dafür in Ordnung wäre, wenn Sie nicht möchten, dass er auf der Konsole angezeigt oder als Aufgabe ausgeführt wird. Ich bin nicht sicher, ob ich den Teil über das Ausführen als ASP.NET verstehe und ob Sie damit die Datenbank nicht sehen können ...

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


Was den zweiten Absatz betrifft, habe ich viel Code, der, wie bereits erwähnt, RSS-Feeds extrahiert, Daten sammelt, analysiert und in einer Datenbank speichert. Ich habe eine ASP.NET-Webanwendung, weil ich dem Benutzer eine Schnittstelle zur Verfügung stelle, damit er Empfehlungen basierend auf den Daten in meiner Datenbank sehen kann. Wenn es eine bessere Methode gibt, mit der ich einen Hintergrundprozess in ASP.NET verwenden kann, würde ich das gerne wählen. Gibt es einen Weg?
Michelle

@michelle, Versuchen Sie, die drei Zeilen Code zu entfernen , die die festgelegt Account, Usernameund Password. Ich vermute, dass dies aufgerufen wird, nachdem das Installationsprogramm die Eigenschaften ServiceAccount.Userüberprüft und die Standardeinstellungen angezeigt hat , dann nach Anmeldeinformationen fragt und diese dann mit Nullen überschreibt. Versuchen Sie es auf den Eigenschaftenseiten. Nur ein Stich in die Dunkelheit.
Jim

1
@michelle, was den anderen Teil Ihres Kommentars betrifft, haben Sie erwähnt, dass ein "Hintergrundprozess in ASP.NET" ausgeführt wird. Entschuldigung, das geht über mein Fachwissen hinaus. Wenn das, was Sie versuchen, getan werden kann, ist wahrscheinlich AJAX erforderlich. AJAX bietet eine viel umfassendere Erfahrung mit der Web-Benutzeroberfläche (z. B. verwendet Google Maps AJAX, wahrscheinlich ebenso wie die Google-Suche, wenn Sie Dinge in die gerade angezeigten Ergebnisse eingeben). Sie werden wahrscheinlich mehr Glück haben, wenn Sie eine neue Frage starten, die speziell mit diesem Tag versehen ist.
Jim

187

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.

Möglicherweise fällt es Ihnen auch leichter, ein Framework wie TopShelf zum Hosten Ihrer Dienste zu verwenden, da es die gesamte Setup-Konfiguration vom Namen und der Beschreibung des Dienstes bis zur Funktionsweise Ihres Wiederherstellungsprozesses verwaltet. Sie können Ihren Dienst auch problemlos innerhalb der IDE starten, wenn Sie ihn debuggen.


3
Dies war die Lösung für mich. Prost.
John

1
Ich kann nicht glauben, dass es mir passiert ist. Nochmal !
Ilans

4
Dies sollte idealerweise als Antwort darauf eingestellt werden! :)
Amogh Natu

Das war mein Problem. Ein Dienst war in Ordnung, aber die Installation eines zweiten schlug fehl.
Adam Benoit

54

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


2
Das hat bei mir funktioniert. Obwohl mein Konto in der Gruppe Administratoren ist
Lee Englestone

39

Als Administrator ausführen

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


1
Ich habe 2 Stunden verschwendet. Vielen Dank!
Habib

10

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


7

Sie versuchen wahrscheinlich, einen Dienst mit zu installieren

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

In diesem Fall besteht 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. (Rechtsklick> Als Administrator ausführen)

Ich habe auch einige Fälle festgestellt, in denen diese Methode das SecurityException- Problem immer noch nicht löst , da einige Registrierungsschlüssel nicht über die Berechtigung "Vollzugriff" für Administratorkonten verfügen.

Für die folgenden Schlüssel sollte für Administratoren die Option "Vollzugriff" festgelegt sein, damit der Dienst in das EventLog 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ühren Sie [Win + R] aus
    • Geben Sie 'regedit' ein
    • OK
  2. Navigieren Sie zu einem oben aufgeführten Pfad
  3. Klicken Sie mit der rechten Maustaste auf den gewünschten Pfad
  4. Stellen Sie sicher, dass die Kontrollkästchen Lese- und Vollzugriffsberechtigung für Administratoren aktiviert sind
  5. Klicken Sie auf Übernehmen und auf OK
  6. Wiederholen Sie den gleichen Vorgang für den anderen Pfad

1

Ich habe diesen Fehler (oben im OP) erhalten, als ich versucht habe, die Existenz eines EventLog zu testen

   if (!EventLog.SourceExists("applicatioName"))
         EventLog.CreateEventSource("applicatioName", "Application");

Durch Ausführen von VisualStudio als Administrator wurde das Problem behoben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.