35 votes

Installation d'un service Windows auto-développé

Je suis en train de déployer un service que j'ai écrit. Voici la InstallLog fichier:

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.

Comme vous pouvez le voir, il ne fonctionne pas. Je ne suis pas sûr de savoir comment procéder, et ont frappé le mur avec Bing et Google. J'ai mis le Compte système local pour le serviceProcessInstaller1. Le code se compile bien, mais maintenant, je tiens à exécuter la chose...des idées? Je suis administrateur sur ma boîte, et je suis en cours d'exécution de la commande:

InstallUtil TweetLinkQueue.exe

à partir de la VS2008 console d'administration.

Mis à JOUR AVEC /ShowCallStack option

La Pile Des Appels

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)

et voici que le constructeur:

public TweetLinkService()
{
    InitializeComponent();

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

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

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

Mis à JOUR avec Point d'Entrée:

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

122voto

Tom B Points 1293

J'avais juste ce problème et c'était parce que je n'exécutais pas mon invite de commande Visual Studio en tant qu'administrateur.

14voto

Matt Davis Points 22019

Je ne suis pas sûr de ce que votre problème spécifique. Il me semble que le problème se produit lors de la création du Journal des événements de la source. Double-vérifier que vous l'avez fait partie correctement. Vous pouvez faire référence à l'étape-par-étape ici. EDIT: EN PARTICULIER LORS DE L'ÉTAPE 9. Le problème peut être survenant parce que vous êtes de jouer avec le journal d'Application au lieu d'un seul spécifiques à votre application.

Il n'y a rien de mal à utiliser le InstallUtil, mais si vous avez besoin pour installer votre service sur une machine, InstallUtil n'est pas garanti d'être là. Vous pouvez suivre cette étape-par-étape pour faire de votre exécutable Windows service installer/désinstaller elle-même sans avoir besoin de InstallUtil. Voir ici pour des instructions.

8voto

Arifur Rahman Points 31

Pour résoudre ce problème, cliquez avec le bouton droit sur votre invite de commandes Visual Studio 2008 et cliquez sur Exécuter en tant qu'administrateur, puis exécutez votre commande comme installutil C: \ mcWebService \ bin \ Debug \ mcWebService.exe, puis il vous montrera un message réussi. J'espère que cela résoudra votre solution.

2voto

Jeff Sternal Points 30147

Le compte LocalSystem n'ont généralement pas l'autorisation de lire le journal des événements de Sécurité (ou de créer des sources d'événements pour cette question).

La méthode la plus simple et la plus sûre solution est de créer une source de l'événement programme d'installation que vous pouvez exécuter avec votre propre administration des qualifications de niveau sur toute la machine pour laquelle vous devez exécuter cette. Il pourrait même être la peine d'essayer cela comme un simple test, juste pour voir si votre compte a l'autorisation pour ce faire.

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

Si vous exécutez cette, est-il réussir? Vous pouvez le vérifier en regardant le journal de l'Application des propriétés et de la navigation sur les sources d'Événement sur son onglet Filtre.

Alternativement, étant donné que les services doivent être installés de toute façon, vous pouvez ajouter un EventLogInstaller (ce qui est mal nommée - c'est vraiment un "EventSourceInstaller" qui permettra de créer EventLogs que nécessaire) à l'assemblée au lieu d'utiliser EventLog.CreateEventSource dans le service du constructeur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X