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"?

ainsi, l'exécution de votre wix-programme d'installation crée une entrée dans le "des services.msc"? pouvez-vous démarrer à partir de là? si non, et ce serait pour moi deviner, vous pourriez avoir un problème avec l'utilisateur en cours d'exécution du service. pouvez-vous fournir le 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 , 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