Creare un programma di installazione del servizio Windows
Quando si crea un servizio Windows .NET (da non confondere 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.
Questa esercitazione illustra come:
- Installa l’estensione di Visual Studio per progetti di programmi di installazione.
- Crea un progetto di installazione.
- Aggiorna un progetto di lavoro .NET esistente per supportare l'installazione.
- Automatizza l'installazione e la disinstallazione con la Gestione controllo servizi di Windows.
Prerequisiti
- Si prevede di aver completato l'esercitazione Creare un servizio Windows o di essere preparati a clonare il repository di esempio.
- .NET 8.0 SDK o versioni successive
- Un sistema operativo Windows
- Ambiente di sviluppo integrato .NET (IDE)
- È possibile usare Visual Studio
- Un servizio Windows .NET esistente
Installa le dipendenze degli strumenti
Per iniziare, installa il set di strumenti Wix. Il set di strumenti Wix è un set di strumenti che compila pacchetti di installazione di Windows dal codice sorgente XML.
dotnet tool install --global wix
Installa quindi l'estensione HeatWave per VS2022. Dopo l'installazione, riavvia Visual Studio e verranno visualizzati nuovi modelli di progetto disponibili.
Ottieni 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 di "Ruoli di lavoro in .NET" è disponibile per il download nel browser esempi. Per altre informazioni, fai riferimento a Esplorare esempi di codice: ruoli di lavoro in .NET.
Apri la soluzione in Visual Studio e seleziona F5 per assicurarti che l'app venga compilata ed eseguita come previsto. Premi Ctrl+C per arrestare l'app.
Aggiungere un nuovo progetto di installazione
Per aggiungere un nuovo progetto di installazione Wix, fai clic con il pulsante destro del mouse in Esplora soluzioni e scegli Aggiungi > Nuovo progetto:
Seleziona Pacchetto MSI (Wix v4) nei modelli disponibili e quindi seleziona Avanti. Specifica il Nome e il Percorsodesiderati, quindi seleziona Crea.
Configurare il progetto del programma di installazione
Per configurare il progetto di installazione, è prima necessario aggiungere un riferimento al progetto App.WindowsService
. Fai clic con il pulsante destro del mouse sul progetto di configurazione in Esplora soluzioni e quindi scegli Aggiungi > riferimento al progetto.
Il modello include file di componenti di esempio e di localizzazione. Elimina questi file, lasciando solo il file Package.wxs. Il progetto dovrebbe ora includere un elemento ProjectReference
, 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, configura il file Package.wxs. Apri il file nell'editor e quindi sostituisci 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, pubblica il progetto App.WindowsService. Fai clic con il pulsante destro del mouse sul progetto in Esplora soluzioni e scegli Pubblica. Dopo la pubblicazione con il profilo creato nell'esercitazione precedente, l'eseguibile si troverà nella directory di pubblicazione. Successivamente, compila il progetto di installazione ed esegui il programma di installazione.
È necessario eseguire l'installazione come amministratore. A tale scopo, fai clic con il pulsante destro del mouse sul file MSI e scegli 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.