Ne peut pas démarrer le service Windows avec WiX
J'ai le texte suivant WiX projet d'installer mon service:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="GUID" Name="SetupWinService" Language="1049"
Version="1.0.0.0" Manufacturer="SetupWinService"
UpgradeCode="GUID">
<Package InstallerVersion="200" Compressed="yes"
Languages="1049" SummaryCodepage="1251"
InstallPrivileges="elevated"/>
<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="WinService" Name="My Windows Service">
</Directory>
</Directory>
</Directory>
<DirectoryRef Id="WinService">
<Component Id="WinServiceInstallation" Guid="GUID">
<File Id="ClientService.exe"
Name="ClientService.exe"
Source="...\ClientService.exe"
Vital="yes" KeyPath="yes" DiskId="1"/>
<File Id="App.config"
Name="App.config"
Source="...\App.config"
Vital="yes" KeyPath="no" DiskId="1"/>
<!--And some DLLs here-->
<ServiceInstall Id="ServiceInstaller"
Type="ownProcess"
Vital="yes"
Name="WcfServiceHost"
DisplayName="WcfServiceHost"
Description="Hosts Wcf Service"
Start="auto"
Account="LocalSystem"
ErrorControl="ignore"
Interactive="no">
</ServiceInstall>
<ServiceControl Id="StartService" Name="WcfServiceHost"
Start="install" Stop="uninstall" Remove="uninstall"
Wait="yes" />
</Component>
</DirectoryRef>
<Feature Id="Complete" Title="SetupWinService" Level="1">
<ComponentRef Id="WinServiceInstallation" />
<ComponentGroupRef Id="Product.Generated" />
</Feature>
</Product>
</Wix>
Je peux installer mon service, mais je ne peux pas le démarrer après l'installation. Il dit:
Échec de démarrage du Service. Vérifiez que vous disposez de suffisamment de privilèges pour démarrer les services système.
Mais je lance mon programme d'installation en tant qu'administrateur (Windows 7 Professionnel) et également désactiver Contrôle de compte d'utilisateur. En outre, je peux installer et exécuter le service avec instalutil.exe grâce à l'invite de commande (mon projet de service comprend la réalisation du programme d'installation de la classe et, en général, est marqué selon cet article), et tout fonctionne très bien avec le service dans ce cas.
Si je remplace Attendre="oui" de la ServiceControl élément "non", le service s'installe sans erreurs, mais il ne démarre pas. Je ne peux pas démarrer le service manuellement, dans ce cas, parce que le service démarre et s'arrête immédiatement avec le message "service sur l'Ordinateur Local a démarré puis s'est arrêté. Certains services s'arrêtent automatiquement si elles n'ont pas de travail à faire".
J'ai cherché sur ce problème sur Internet, mais je n'ai pas trouvé de solutions.
Comment puis-je résoudre ce problème?
Qui est le code de ma classe d'installation:
[RunInstaller(true)]
public class ProjectInstaller : Installer
{
private ServiceProcessInstaller serviceProcessInstaller;
private ServiceInstaller serviceInstaller;
public ProjectInstaller()
{
this.serviceProcessInstaller = new ServiceProcessInstaller();
this.serviceProcessInstaller.Account = ServiceAccount.LocalSystem;
this.serviceProcessInstaller.Username = null;
this.serviceProcessInstaller.Password = null;
this.serviceInstaller = new ServiceInstaller();
this.serviceInstaller.ServiceName = "ClientServicesHost";
this.serviceInstaller.StartType = ServiceStartMode.Automatic;
this.Installers.Add(serviceProcessInstaller);
this.Installers.Add(serviceInstaller);
this.AfterInstall +=
new InstallEventHandler(ProjectInstaller_AfterInstall);
}
void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e)
{
ServiceController sc = new ServiceController("ClientServicesHost");
sc.Start();
}
}
Et mon service Windows:
class WindowsClientService : ServiceBase
{
public ServiceHost serviceHost = null;
public WindowsClientService()
{
this.ServiceName = "WcfServiceHost";
}
public static void Main()
{
ServiceBase.Run(new WindowsClientService());
}
protected override void OnStart(string[] args)
{
if (serviceHost != null)
{
serviceHost.Close();
}
//Create a ServiceHost for WcfClientService type
//and provide the base address.
serviceHost = new ServiceHost(typeof(WcfClientService));
//Open the ServiceHost to create listeners
//and start listening for messages.
serviceHost.Open();
}
protected override void OnStop()
{
if (serviceHost != null)
{
serviceHost.Close();
serviceHost = null;
}
}
}
J'ai été souligné que la raison de mon service s'arrête automatiquement - il ne fait rien après le départ. Peut-il être? Mon service crée des auditeurs et commence à écouter - est qui "ne fait rien"?
installUtil
-commande que vous avez utilisé pour créer un service exécuté à l'entrée? ou encore mieux: s'il vous plaît ajouter votre concrètes de mise en œuvre de System.Configuration.Install.Installer
!rappelez-vous: vous avez seulement besoin de l'installer si vous êtes en utilisant
installUtil
. sinon c'est totalement inutile. j'ai eu une question similaire il y a quelques temps (stackoverflow.com/questions/9884959/...) et un gars m'a dit qu'au lieu d'utiliser la serviceInstall
-élément, j'ai pu également exécuter une commande par la suite (aka l'exécution de installUtil
après l'installation) pour obtenir mon service est installé correctement.Salut Andreas. Après l'installation du service avec WiX, il apparaît dans les services.msc. Je ne peut pas démarrer car il démarre et s'arrête immédiatement (je l'ai écrit dans ma question). Avec installutil.exe et avec ma mise en œuvre du programme d'installation de classe tous les installe et démarre bien. Je place mon de la mise en œuvre du programme d'installation de la classe de la question, en plus. Je sais aussi que je peux installer le service avec WiX et avec l'appel de la installutil.exe dans le CustomAction...
...Mais elle conduit à un autre problème avec installutil.exe l'emplacement et les différences entre les deux .NET framework version. Si je veux utiliser la fonctionnalité intégrée (ServiceInstall-ServiceControl) fo le premier. En outre, j'ai demandé à ma question aussi là, si vous intéressant.
btw ... au lieu de faire
...\ClientService.exe
vous pouvez également faire référence au projet et simplement utiliser par exemple $(var.**ProjectName**.TargetPath)
OriginalL'auteur user808128 | 2012-09-11
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème à l'aide de WiX 3.7.821.0 et de mon service. Il est installé depuis un moment et même ennuyeux "impossible de démarrer le Service. Vérifiez que vous disposez de suffisamment de privilèges pour démarrer les services système" est apparu.
J'ai essayé beaucoup de choses, mais au final, c'était d'utiliser deux sections pour
<ServiceControl>
au lieu d'essayer de caser le tout dans un seul. L'un pour le Début et un pour les Arrêter. Maintenant, le service démarre bien.Cela ne fonctionne pas:
Cela fonctionne:
OriginalL'auteur user2334883
J'ai eu la même erreur, et dans mon cas, j'ai été absent
KeyPath='yes' Vital="yes"
sur mon fichier de l'élément.Voici ma définition de composant:
OriginalL'auteur zeroEffect
J'ai été à la recherche de la réponse pour un certain temps, et finalement j'ai résolu!
Garder le même ServiceControl nom que le ServiceInstall nom.
Résultat:
OriginalL'auteur Alex Chi
Le nom d'utilisateur pour
ServiceInstall
doivent être pleinement qualifiés:NT AUTHORITY\NetworkService
NT AUTHORITY\LocalService
NT AUTHORITY\SYSTEM
OriginalL'auteur Daming Fu
Bien, je suis retourné à ce projet après environ 1 an et demi. Et d'essayer de recompiler et de commencer ce nouveau service. Et ça marche!!!
Tout ce qui a changé est que j'ai ajouté clientaccesspolicy.xml à mon service et l'exécuter policyServiceHost (de type WebServiceHost) avec mon service. Mais je ne pense pas que ce est important parce que cela se rapporte à l'intérieur de ma demande - pas de service de démarrage.
J'ai donc essayé plusieurs variantes, comme:
1).serviceProcessInstaller.Nom d'utilisateur = null;
ou
.serviceProcessInstaller.Nom d'utilisateur = @"AUTORITE NT\SYSTEM";
2) Deux ou seul ServiceControl sections.
3) Stop="deux"
ou
Stop="désinstaller"
TOUT FONCTIONNE TRÈS BIEN MAINTENANT!!!
Je ne sais pas ce qui se passe. Je viens de laisser un certain type de bug ou quelque chose d'étrange configuration de mon système ou tout autre chose qui ne m'autorise pas à commencer mon service automatiquement avant. Mais maintenant, tous les worksfine.
D'autres termes, je n'ai pas trouver ce qui était la raison de mon service ne démarre automatiquement. C'était à propos de "privilèges suffisants" (voir le premier post), mais il n'est pas assez clair pour moi, même maintenant.
Seulement une remarque. Si j'utilise deux ServiceControl des sections lors de la désinstallation du service, une fenêtre d'avertissement s'affiche (Windows 7) et offre de fermer l'application (service) automatiquement et ainsi de suite. Je viens donc de les accepter et de service désinstalle bien. Mais pas de fenêtre d'avertissement apparaît si j'utilise un seul ServiceControl chapitre, comme dans mon exemple dans le premier post. Et encore une fois c'est pas des relations à 1) et 3) les points de combinaison.
OriginalL'auteur user808128
J'utiliserais cet extrait de code pour le .wxs-fichier
Avec cette base
System.ServiceProcess.ServiceBase
-mise en œuvre (qui ne sont pas très différentes de la vôtre)Avec cet extrait j'ai eu une démo-projet de travailler ...
Entièrement de travail du projet de démo disponible - si cela ne fonctionne toujours pas, veuillez adapter le code pour que je puisse le reproduire votre problème!
serviceHost.Open();
dans la fenêtre de code de service. Je ne sais pas ce que la raison hui je vais essayer d'explorer plus tard. Mais sans cette chaîne de code tous les installe et démarre bien.pourriez-vous s'il vous plaît ajouter le code problématique pour mon démo-projet et de le télécharger quelque part afin que je puisse reproduire votre problème et peut-il vous aider?! J'ai utilisé le code fourni à plusieurs reprises dans de nombreux projets différents, et à chaque fois cela a fonctionné/travaux - donc, malheureusement, je ne peux pas reproduire votre problème...
Si vous connaissez les problématiques de lignes de code, vous devez entourer cette ligne avec un
try
etcatch
déclaration, de sorte que vous pouvez journal l'exception!téléchargé et testé votre code , mais cela ne fonctionne toujours pas démarrer automatiquement le service ? c'était la Question
Projet de démonstration lien est mort
OriginalL'auteur Andreas Niedermair
J'ai eu cette erreur sur certains ordinateurs. Le même exécutable fonctionne sur certains et donne cette erreur sur les autres.
La mise à jour .NET 1.1/2.0/3.0 sur ces ordinateurs à l'aide (il a travaillé pour moi sur Windows XP, 7 et 8.1).
Je suis en train d'arrêter et de démarrer le Service SQL sur la machine locale, par le biais de code d'Action Personnalisée. Je suis d'Accès Refusé. Quelqu'un peut-il aider s'il vous plaît? Est ce que quelqu'un d'autre face à cette problématique?
OriginalL'auteur hagai