Je essaie de déployer un service que j'ai écrit. Voici le fichier InstallLog :
Installation de l'assembly 'c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe'.
Les paramètres affectés sont :
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
Installation du service TweetLinkService...
Création de la source EventLog TweetLinkService dans le journal Application...
Rolling back de l'assembly 'c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe'.
Les paramètres affectés sont :
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
Restauration du journal d'événements à l'état précédent pour la source TweetLinkService.
Une exception s'est produite pendant la phase de rollback de l'installateur System.Diagnostics.EventLogInstaller.
System.Security.SecurityException : La source n'a pas été trouvée, mais certains journaux d'événements ne peuvent pas être consultés. Journaux inaccessibles : Sécurité.
Une exception s'est produite pendant la phase de rollback de l'installation. Cette exception sera ignorée et le rollback se poursuivra. Cependant, la machine pourrait ne pas revenir entièrement à son état initial après la fin du rollback.
Comme vous pouvez le constater, cela ne fonctionne pas. Je ne sais pas comment procéder, et j'ai repris le mur avec Bing et Google. J'ai défini le compte sur LocalSystem pour le serviceProcessInstaller1. Le code se compile bien, mais maintenant j'aimerais exécuter la chose...des idées ? Je suis administrateur sur ma boîte, et j'exécute la commande :
InstallUtil TweetLinkQueue.exe
depuis la console d'administration VS2008.
MIS À JOUR AVEC l'option /ShowCallStack
Call Stack
Une exception s'est produite pendant la phase d'installation.
System.Security.SecurityException : La source n'a pas été trouvée, mais certains journaux d'événements ne peuvent pas être consultés. Journaux inaccessibles : Sécurité.
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 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 le point d'entrée :
namespace TweetLinkQueue
{
static class Program
{
///
/// Le point d'entrée principal de l'application.
///
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new TweetLinkService()
};
ServiceBase.Run(ServicesToRun);
}
}
}
0 votes
Obtenez-vous des informations supplémentaires si vous exécutez installutil avec l'option /ShowCallStack?
0 votes
Les informations du fichier journal se trouvent dans la question ci-dessus.
0 votes
L'utilisateur avec lequel vous essayez d'installer le service a-t-il l'autorisation d'écrire dans le journal des événements de sécurité?
0 votes
À partir de la documentation EventLog.SourceExists : "Dans Windows Vista, les utilisateurs n'ont pas la permission d'accéder au journal de sécurité ; par conséquent, une SecurityException est lancée." Êtes-vous certain de lancer à partir d'une invite de commande élevée ? (Désolé si cela semble être une question stupide, mais les symptômes semblent correspondre...!)
3 votes
Pour l'édification de tous, le problème décrit n'a rien à voir avec le code dans un constructeur ou un point d'entrée. InstallUtil n'exécute pas ce code; il est seulement exécuté lorsque le service démarre réellement. InstallUtil utilise la réflexion pour découvrir des choses sur le service afin de l'installer sur le système. Donc, pour simplement installer le service, il est important de s'assurer que le service a été configuré correctement. Une fois que le service est installé, vous pouvez travailler sur les tests/la correction du code.
0 votes
Merci Matt pour la clarté... Je fournissais des informations à l'avance. En lisant ce que vous et d'autres avez écrit, j'ai un problème d'accès. Cependant, l'utilisateur local a des droits d'administration sur la boîte, donc je ne sais pas quel est le problème.
3 votes
Brandon : sous Vista, il y a une différence entre avoir des droits d'administrateur et exécuter avec des droits d'administrateur : par défaut, l'UAC contraint les utilisateurs admin à n'avoir que des droits standards (explication embrouillée mais j'espère que ça a du sens!). Essayez de cliquer avec le bouton droit sur le raccourci de l'invite de commandes, choisir Exécuter en tant qu'administrateur (ce qui supprime la restriction de l'UAC) et relancer installutil depuis cette invite de commande élevée.
1 votes
Le problème pourrait être que vous n'avez pas la permission d'accéder à l'Observateur d'événements du tout, auquel cas, vous avez besoin de plus de permissions pour permettre l'écriture dans le journal des événements. Ou cela pourrait simplement être que vous n'avez pas la permission de manipuler le journal des applications de l'Observateur d'événements. Essayez de créer votre propre journal en vous référant à l'exemple que j'ai mentionné dans ma réponse (c'est-à-dire, l'étape 9). Cela pourrait régler le problème pour vous.
0 votes
@Matt, j'ai essentiellement copié votre code de l'étape 9... ça ne résout pas le problème. Dommage.
0 votes
Il semble que ce soit un problème d'autorisations alors.