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();
}
}
c#
windows
windows-services
event-log
Michelle
quelle
quelle
Antworten:
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.
quelle
Account
,Username
undPassword
. Ich vermute, dass dies aufgerufen wird, nachdem das Installationsprogramm die EigenschaftenServiceAccount.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.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.
quelle
Führen Sie Ihre Eingabeaufforderung als Administrator aus. Es wird Ihr Problem lösen
quelle
Als Administrator ausführen
Dies ist ein sehr häufiges Problem, das Programmierer verpassen
quelle
Ich löse das gleiche Problem, indem ich die VS2013-Entwicklerkonsole mit Administratorrechten öffne.
quelle
Sie versuchen wahrscheinlich, einen Dienst mit zu installieren
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:
quelle
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.
quelle