Condividi tramite


Creare un programma di installazione del servizio Windows

Quando si crea un servizio Windows .NET (per non sbagliare con un servizio Windows .NET Framework), è possibile creare un programma di installazione per il servizio. Senza un programma di installazione, gli utenti dovranno sapere come installare e configurare il servizio. Un programma di installazione aggrega i file eseguibili dell'app ed espone un'esperienza utente di installazione personalizzabile. Questa esercitazione è una continuazione dell'esercitazione Creare un servizio Windows . Illustra come creare un programma di installazione per il servizio Windows .NET.

In questa esercitazione si apprenderà come:

  • Installare l'estensione Progetti del programma di installazione di Visual Studio.
  • Creare un progetto di installazione.
  • Aggiornare un progetto di lavoro .NET esistente per supportare l'installazione.
  • Automatizzare l'installazione e la disinstallazione con Windows Service Control Manager.

Prerequisiti

Installare le dipendenze della strumentazione

Per iniziare, installare il set di strumenti Wix. Il set di strumenti Wix è un set di strumenti che compilano pacchetti di installazione di Windows dal codice sorgente XML.

dotnet tool install --global wix

Installare quindi l'estensione HeatWave per VS2022. Dopo l'installazione, riavviare Visual Studio e verranno visualizzati nuovi modelli di progetto disponibili.

Ottenere un progetto esistente

Questa esercitazione si basa sull'app creata come parte dell'esercitazione Creare un servizio Windows con BackgroundService . È possibile clonare il repository di esempio o usare l'app compilata nell'esercitazione precedente.

Suggerimento

Tutto il codice sorgente di esempio "Workers in .NET" è disponibile nel Samples Browser per il download. Per ulteriori informazioni, consulta Esempi di codice: Workers in .NET.

Aprire la soluzione in Visual Studio e selezionare F5 per assicurarsi che l'app venga compilata ed eseguita come previsto. Premere CTRL+C per arrestare l'app.

Aggiungere un nuovo progetto di installazione

Per aggiungere un nuovo progetto di installazione wix, fare clic con il pulsante destro del mouse sulla soluzione in Esplora soluzioni e scegliere Aggiungi > nuovo progetto:

Finestra di dialogo Aggiungi nuovo progetto: Nuovo pacchetto MSI (Wix v4).

Selezionare Pacchetto MSI (Wix v4) nei modelli disponibili e quindi selezionare Avanti. Specificare il nome e il percorso desiderati, quindi selezionare Crea.

Configurare il progetto del programma di installazione

Per configurare il progetto di installazione, è prima necessario aggiungere un riferimento al App.WindowsService progetto. Fare clic con il pulsante destro del mouse sul progetto di installazione in Esplora soluzioni e quindi scegliere Aggiungi > riferimento al progetto.

Il modello include file di componente di esempio e di localizzazione. Eliminare questi file, lasciando solo il file Package.wxs . Il progetto dovrebbe ora includere un ProjectReference elemento, simile al seguente:

<Project Sdk="WixToolset.Sdk/4.0.0">
  <ItemGroup>
    <ProjectReference Include="..\App.WindowsService.csproj" />
  </ItemGroup>
</Project>

Dopo aver aggiunto il riferimento al progetto, configurare il file Package.wxs . Aprire il file nell'editor e quindi sostituire il contenuto con quanto segue:

<?xml version="1.0" encoding="UTF-8"?>

<!-- Define the variables in "$(var.*) expressions" -->
<?define Name = ".NET Joke Service" ?>
<?define Manufacturer = "Microsoft" ?>
<?define Version = "1.0.0.0" ?>
<?define UpgradeCode = "9ED3FF33-8718-444E-B44B-69A2344B7E98" ?>

<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
    <Package Name="$(Name)"
             Manufacturer="$(Manufacturer)"
             Version="$(Version)"
             UpgradeCode="$(var.UpgradeCode)"
             Compressed="true">

        <!-- Allow upgrades and prevent downgrades -->
        <MajorUpgrade DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." />

        <!-- Define the directory structure -->
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFiles64Folder">

                <!-- Create a folder inside program files -->
                <Directory Id="ROOTDIRECTORY" Name="$(var.Manufacturer)">

                    <!-- Create a folder within the parent folder given the name -->
                    <Directory Id="INSTALLFOLDER" Name="$(Name)" />
                </Directory>
            </Directory>
        </Directory>

        <!-- The files inside this DirectoryRef are linked to
             the App.WindowsService directory via INSTALLFOLDER -->
        <DirectoryRef Id="INSTALLFOLDER">

            <!-- Create a single component which is the App.WindowsService.exe file -->
            <Component Id="ServiceExecutable" Bitness="always64">

                <!-- Copies the App.WindowsService.exe file using the
                     project reference preprocessor variables -->
                <File Id="App.WindowsService.exe"
                      Source="$(var.App.WindowsService.TargetDir)publish\App.WindowsService.exe"
                      KeyPath="true" />

                <!-- Remove all files from the INSTALLFOLDER on uninstall -->
                <RemoveFile Id="ALLFILES" Name="*.*" On="both" />

                <!-- Tell WiX to install the Service -->
                <ServiceInstall Id="ServiceInstaller"
                                Type="ownProcess"
                                Name="App.WindowsService"
                                DisplayName="$(Name)"
                                Description="A joke service that periodically logs nerdy humor."
                                Start="auto"
                                ErrorControl="normal" />

                <!-- Tell WiX to start the Service -->
                <ServiceControl Id="StartService"
                                Start="install"
                                Stop="both"
                                Remove="uninstall"
                                Name="App.WindowsService"
                                Wait="true" />
            </Component>
        </DirectoryRef>

        <!-- Tell WiX to install the files -->
        <Feature Id="Service" Title="App.WindowsService Setup" Level="1">
            <ComponentRef Id="ServiceExecutable" />
        </Feature>

    </Package>
</Wix>

Quando si compila il progetto, l'output è un file MSI che può essere usato per installare e disinstallare il servizio.

Testare l'installazione

Per testare il programma di installazione, pubblicare il progetto App.WindowsService . Fare clic con il pulsante destro del mouse sul progetto in Esplora soluzioni e quindi scegliere Pubblica. Dopo la pubblicazione con il profilo creato nell'esercitazione precedente, l'eseguibile si troverà nella directory di pubblicazione. Compila il progetto di installazione ed esegui il programma di installazione successivamente.

È necessario eseguire l'installazione come amministratore. A tale scopo, fare clic con il pulsante destro del mouse sul file MSI e quindi scegliere Esegui come amministratore.

Dopo aver installato il servizio, è possibile aprire Servizi per visualizzare il servizio in esecuzione. Per disinstallare il servizio, usare la funzionalità Installazione applicazioni di Windows per chiamare il programma di installazione.

Vedere anche