it-swarm.com.de

Einen selbst entwickelten Windows-Dienst installieren

Ich versuche, einen Dienst bereitzustellen, den ich geschrieben habe. Hier ist die InstallLog-Datei:

Installing Assembly 'c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe'.
Affected parameters are:
   logtoconsole = 
   assemblypath = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe
   logfile = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.InstallLog
Installing service TweetLinkService...
Creating EventLog source TweetLinkService in log Application...
Rolling back Assembly 'c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe'.
Affected parameters are:
   logtoconsole = 
   assemblypath = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe
   logfile = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.InstallLog
Restoring event log to previous state for source TweetLinkService.
An exception occurred during the Rollback phase of the System.Diagnostics.EventLogInstaller installer.
System.Security.SecurityException: The source was not found, but some or all event logs could not be searched.  Inaccessible logs: Security.
An exception occurred during the Rollback phase of the installation. This exception will be ignored and the rollback will continue. However, the machine might not fully revert to its initial state after the rollback is complete.

Wie Sie sehen, funktioniert es nicht. Ich bin nicht sicher, wie ich vorgehen soll, und bin mit Bing und Google an die Wand getreten. Ich habe das Konto auf LocalSystem für den serviceProcessInstaller1 gesetzt. Der Code lässt sich gut kompilieren, aber jetzt möchte ich die Sache ausführen ... irgendwelche Ideen? Ich bin Administrator auf meiner Box und führe den Befehl aus:

InstallUtil TweetLinkQueue.exe

von der VS2008-Verwaltungskonsole aus.

UPDATED WITH/ShowCallStack-Option

Stack anrufen

An exception occurred during the Install phase.
System.Security.SecurityException: The source was not found, but some or all eve
nt logs could not be searched.  Inaccessible logs: Security.
   at System.Diagnostics.EventLog.FindSourceRegistration(String source, String m
achineName, Boolean readOnly)
   at System.Diagnostics.EventLog.SourceExists(String source, String machineName
)
   at System.Diagnostics.EventLogInstaller.Install(IDictionary stateSaver)
   at System.Configuration.Install.Installer.Install(IDictionary stateSaver)
   at System.ServiceProcess.ServiceInstaller.Install(IDictionary stateSaver)
   at System.Configuration.Install.Installer.Install(IDictionary stateSaver)
   at System.Configuration.Install.Installer.Install(IDictionary stateSaver)
   at System.Configuration.Install.AssemblyInstaller.Install(IDictionary savedSt
ate)
   at System.Configuration.Install.Installer.Install(IDictionary stateSaver)
   at System.Configuration.Install.TransactedInstaller.Install(IDictionary saved
State)

und hier ist der Konstruktor:

public TweetLinkService()
{
    InitializeComponent();

    if (!EventLog.SourceExists("TweetLinkQueue"))
    {
        EventLog.CreateEventSource("TweetLinkQueue", "Log");

        TweetLinksLog.Source = "TweetLinkQueue";
        TweetLinksLog.Log = "Log";

        TweetLinksLog.WriteEntry("Log Created!");
    }
}

AKTUALISIERT mit ENtry Point:

namespace TweetLinkQueue
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main()
        {
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] 
            { 
                new TweetLinkService() 
            };
            ServiceBase.Run(ServicesToRun);
        }
    }
}
35
Brandon Watson

Ich bin nicht sicher, was Ihr spezifisches Problem ist. Es scheint mir, als ob das Problem beim Erstellen der EventLog-Quelle auftritt. Prüfen Sie noch einmal, ob Sie diesen Teil richtig gemacht haben. Sie können auf die Schritt-für-Schritt-Methode hier verweisen. EDIT: BESONDERE ANSICHT AT SCHRITT 9. Möglicherweise tritt das Problem auf, weil Sie sich mit dem Anwendungsprotokoll und nicht mit einem für Ihre Anwendung spezifischen Protokoll beschäftigen.

Es ist nichts falsch mit InstallUtil, aber wenn Sie Ihren Service auf einem fremden Computer installieren müssen, ist InstallUtil nicht garantiert. Sie können diesen Schritt für Schritt befolgen, um die ausführbare Datei Ihres Windows-Dienstes selbst zu installieren/deinstallieren, ohne dass InstallUtil erforderlich ist. Siehe hier für diese Anweisungen.

13
Matt Davis

Ich hatte gerade dieses Problem und es war, weil ich meinen Visual Studio-Befehl Prompt nicht als Administrator ausgeführt hatte.

115
Tom B

Um dieses Problem zu lösen, klicken Sie mit der rechten Maustaste auf die Eingabeaufforderung von Visual Studio 2008, und klicken Sie auf Als Administrator ausführen. Führen Sie dann den Befehl wie installutil C:\mcWebService\bin\Debug\mcWebService.exe aus Anschließend wird die erfolgreiche Meldung angezeigtHoffentlich löst dies Ihre Lösung.

8
Arifur Rahman

Das Konto LocalSystem hat normalerweise keine Berechtigung zum Lesen des Sicherheitsereignisprotokolls (oder zum Erstellen von Ereignisquellen für diese Angelegenheit). 

Die einfachste und sicherste Lösung ist das Erstellen eines Ereignisquelleninstallationsprogramms, das Sie unter Ihren eigenen Anmeldeinformationen auf Administratorebene auf jedem Computer ausführen können, für den Sie dies ausführen möchten. Es lohnt sich vielleicht, dies als einfachen Test zu versuchen, nur um zu sehen, ob Ihr Konto die Berechtigung dazu hat.

class Program {
    static void Main(string[] args) {
        EventLog.CreateEventSource("TestSource", "Application");
    }
}

Wenn Sie das ausführen, gelingt es? Sie können dies überprüfen, indem Sie die Eigenschaften des Anwendungsprotokolls anzeigen und die Ereignisquellen auf der Registerkarte Filter durchsuchen. 

Da Services ohnehin installiert werden müssen, können Sie alternativ eine EventLogInstaller (falsch benannt - es handelt sich tatsächlich um einen "EventSourceInstaller", der nach Bedarf EventLogs erstellt) zur Assembly hinzufügen, anstatt EventLog.CreateEventSource im Konstruktor des Services zu verwenden.

2
Jeff Sternal

Mein Problem war, dass ein Fenster zum Eingeben von Anmeldeinformationen auftauchte und ich meinen Benutzernamen ohne die Domäne eingab. Nachdem ich Domain\Benutzername All eingegeben hatte, war alles in Ordnung.

0
CodingYoshi

Bei der Installation von Windows-Diensten sind dieselben unerklärlichen Fehler aufgetreten ... In unserem Fall war der Benutzer das Problem.

Die Installation des Servers mit dem Administratorbenutzer hat funktioniert, jedoch nicht für einen lokalen Administrator. Dies ist jedoch keine bevorzugte Lösung. Daher haben wir diese Informationen verwendet, um einen anderen Benutzer zu erstellen, der den Dienst installieren könnte.

0
hormberg