2016-05-09 8 views
0

Ich bin neu in Wix und Erstellen eines Windows-Dienstes. Ich habe meinen Dienst erstellt und Fensterdienst erfolgreich hinzugefügt, aber wenn ich es ausführe, stoppte es wegen des Fehlers.Wix-Fenster-Service kopieren nur EXE-Datei im Installationsordner nicht alle Abhängigkeiten

<?xml version="1.0" encoding="UTF-8"?> 
<?define Name = "New Window Service" ?> 
<?define Manufacturer = "GAT" ?> 
<?define UpgradeCode = "{0d4fb541-bb66-4df8-bdab-893564e191fc}" ?> 

<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" 
    xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util" 
     > 
    <Product Id="*" Name="$(var.Name)" Manufacturer="$(var.Manufacturer)" Version="1.0.0.0" UpgradeCode="$(var.UpgradeCode)" Language="1033"> 
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> 
    <Media Id="1" Cabinet="GAT.GATAC.ServiceLayer.WindowsServiceHost.cab" EmbedCab="yes" /> 
    <MajorUpgrade DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." /> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder"> 
     <Directory Id="ROOTDIRECTORY" Name="$(var.Manufacturer)"> 
      <Directory Id="INSTALLFOLDER" Name="$(var.Name)" /> 
     </Directory> 
     </Directory> 
    </Directory> 
    <DirectoryRef Id="INSTALLFOLDER"> 
     <Component Id="$(var.GAT.GATAC.ServiceLayer.WindowsServiceHost.TargetFileName)"> 
     <CreateFolder /> 
     <File Id="$(var.GAT.GATAC.ServiceLayer.WindowsServiceHost.TargetFileName)" Source="D:\Projects\GATAC\GAT.GATAC.ServiceLayer.WindowsServiceHost\bin\Release\GAT.GATAC.ServiceLayer.WindowsServiceHost.exe" KeyPath="yes" Vital="yes" /> 
     <File Id="GAT.GATAC.ServiceLayer.WindowsServiceHost.exe.config" 
            Name="MyProduct.exe.config" 
            Source="D:\Projects\GATAC\GAT.GATAC.ServiceLayer.WindowsServiceHost\bin\Release\GAT.GATAC.ServiceLayer.WindowsServiceHost.exe.config" 
            Vital="yes" 
            KeyPath="no" 
            DiskId="1" /> 
     <RemoveFile Id="ALLFILES" Name="*.*" On="both" /> 
     <util:XmlFile Id="ModifyServiceLocation" Action="setValue" ElementPath="/configuration/connectionStrings/add[\[]@name='DefaultConnection'[\]]/@connectionString" File="D:\Projects\GATAC\GAT.GATAC.ServiceLayer.WindowsServiceHost\bin\Release\GAT.GATAC.ServiceLayer.WindowsServiceHost.exe.config" Value="Data Source=[DB_SERVER];Initial Catalog=[DB_DATABASE];User Id=[DB_USER];Pwd=[DB_PASSWORD]"/> 

     <ServiceInstall Id="ServiceInstaller" 
         Type="ownProcess" 
         Name="GAT.GATAC.ServiceLayer.WindowsServiceHost" 
         DisplayName="$(var.Name)" 
         Description="A Test Service that logs dummy text on an interval to a text file." 
         Start="auto" 
         ErrorControl="normal" 
         /> 
     <ServiceControl Id="ServiceInstaller" 
        Stop="both" 
        Remove="both" 
        Name="GAT.GATAC.ServiceLayer.WindowsServiceHost" 
        Wait="yes" /> 
     </Component> 
    </DirectoryRef> 
    <Feature Id="MainApplication" Title="Main Application" Level="1"> 
     <ComponentRef Id="$(var.GAT.GATAC.ServiceLayer.WindowsServiceHost.TargetFileName)" /> 
    </Feature> 
    </Product> 
</Wix> 

, wenn ich in Installationsordner von Service sah es nur exe-Datei, so wie alle Abhängigkeiten von Fenster-Service in diesem Ordner kopieren mein Code following.When ich Dateien manuell in Installationsordner kopieren works.Do I muss ernten

Antwort

3

Ja, Sie müssen ALLE Dateien in Ihrem WXS als Komponenten, die Sie installieren möchten, enthalten.

Wenn Sie einige Abhängigkeiten haben, können Sie sie einfach als Dateikomponenten hinzufügen. Wenn es viele Dateien gibt, sollten Sie die wxs-Datei mithilfe von heat generieren und die Dateielemente in Ihren wxs-Code kopieren. Wenn sich die Dateiabhängigkeiten häufig ändern, sollten Sie in Erwägung ziehen, mithilfe von Heat die wxs immer zu generieren und sie als verknüpfte Datei in Ihr Hauptinstallationsprojekt aufzunehmen.

alle Ihre Abhängigkeiten in der GAT.GATAC.ServiceLayer.WindowsServiceHost Projekts Binärordner werden eingeschlossen, so dass Sie nur $ (var.GAT.GATAC.ServiceLayer.WindowsServiceHost.TargetDir) DependencyFileName als Quelle für die Datei verwenden kann ideal.

+0

Vielen Dank für Ihre Antwort, aber ich bekomme Fehler, wenn ich $ (var.GAT.GATAC.ServiceLayer.WindowsServiceHost.TargetDir) "undefinierte Präprozessor Variable". Ich habe bereits Referenz des Projekts in Wix-Projekt sowie –

+0

hinzugefügt Es sollte im Ausgabefenster sein, wenn Sie eine Kerze.exe und dann eine Menge von definieren. Sie können dieses Fenster nach "TargetDir" durchsuchen und es sollte Ihnen zeigen -d .TargetDir = Pfad für das GAT.GATAC ... Projekt. Vielleicht ist es nur ein kleiner Tippfehler. –