Aracılığıyla paylaş


Windows Hizmeti yükleyicisi oluşturma

Bir .NET Windows Hizmeti oluşturduğunuzda (.NET Framework Windows Hizmeti ile karıştırılmamalıdır), hizmetiniz için bir yükleyici oluşturmak isteyebilirsiniz. Yükleyici olmadan, kullanıcıların hizmetinizi nasıl yükleyip yapılandıracaklarını bilmesi gerekir. Yükleyici, uygulamanızın yürütülebilir dosyaları paketler ve özelleştirilebilir bir yükleme kullanıcı deneyimi sunar. Bu öğretici, Windows Hizmeti Oluşturma öğreticisinin devamıdır. .NET Windows Hizmetiniz için nasıl bir yükleyici oluşturacağınızı gösterir.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Visual Studio Yükleyici Projeleri uzantısını yükleyin.
  • Bir kurulum projesi oluşturun.
  • Var olan bir .NET Worker projesini kurulum desteği vermesi için güncelleyin.
  • Windows Hizmet Kontrol Yöneticisi ile yükleme ve kaldırmayı otomatikleştirin.

Önkoşullar

Araç bağımlılıklarını yükle

Wix Araç Seti'ni kurarak başlayın. Wix Araç Takımı, XML kaynak kodundan Windows kurulum paketleri oluşturmak için bir dizi araçtır.

dotnet tool install --global wix

Ardından , VS2022 için HeatWave uzantısını yükleyin. Yüklemeyi tamamladıktan sonra, Visual Studio'yu yeniden başlatın ve yeni proje şablonlarının kullanılabildiğini göreceksiniz.

Mevcut projeyi alma

Bu öğretici, BackgroundService Kullanarak Bir Windows Hizmeti Oluşturma öğreticisinin bir parçası olarak oluşturulan uygulamaya dayanmaktadır. Örnek depoyu klonlayabilir veya önceki öğreticide oluşturduğunuz uygulamayı kullanabilirsiniz.

Tavsiye

".NET'te Çalışanlar" örnek kaynak kodunun tümü, indirilebilmeniz için Samples Browser'da bulunur. Daha fazla bilgi için bkz . Kod örneklerine göz atma: .NET'te çalışanlar.

Çözümü Visual Studio'da açın ve uygulamanın beklendiği gibi derlenip çalıştığını doğrulamak için F5 tuşuna basın. Uygulamayı durdurmak için Ctrl+C tuşlarına basın.

Yeni kurulum projesi ekle

Yeni bir Wix kurulum projesi eklemek için, Çözüm Gezgini'nde çözüm üzerine sağ tıklayın ve Yeni Proje Ekle >'yi seçin:

Yeni proje ekleme iletişim kutusu: Yeni MSI Paketi (Wix v4) Projesi.

Kullanılabilir şablonlardan MSI Paketi (Wix v4) öğesini ve ardından İleri'yi seçin. İstenen Ad ve Konum bilgilerini girin, ardından Oluştur'u seçin.

Kurulum projesini yapılandır

Kurulum projesini yapılandırmak için önce App.WindowsService projesine bir referans eklemeniz gerekir. Kurulum projesine Çözüm Gezgini üzerinde sağ tıklayın ve ardından >'yi seçin.

Şablon, örnek bileşen ve yerelleştirme dosyalarını içerir. Bu dosyaları silip yalnızca Package.wxs dosyasını bırakın. Artık projenizin, aşağıdakine benzer bir ProjectReference öğesi içermesi gerekiyor.

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

Proje referansı eklendikten sonra, Package.wxs dosyasını yapılandırın. Dosyayı editörde açın, ardından içeriği aşağıdakilerle değiştirin:

<?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 -->
        <StandardDirectory Id="ProgramFiles6432Folder">

            <!-- 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>
        </StandardDirectory>

        <!-- 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"
                                Account="LocalService"
                                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>

öğesinin ServiceInstallAccount özniteliği, hizmetin altında çalıştığı hesabı belirtir. Hesap LocalService , çoğu hizmet için uygun olan azaltılmış ayrıcalıklara sahip yerleşik bir hesaptır. Ortak değerler şunlardır:

  • LocalService: Azaltılmış ayrıcalıklara ve ağ kimlik bilgilerine sahip olmayan yerleşik bir hesap.
  • NetworkService: LocalService'e benzer ancak ağ kimlik bilgilerine sahiptir.
  • LocalSystem: En yüksek ayrıcalık düzeyi (dikkatli kullanın).

Projeyi oluşturduğunuzda çıkış, hizmeti yüklemek ve kaldırmak için kullanılabilecek bir MSI dosyasıdır.

Test kurulum

Yükleyiciyi test etmek için, App.WindowsService projesini yayınlayın. Çözüm Gezgini'nde projeye sağ tıklayın ve yayımla'yı seçin. Önceki öğreticide oluşturduğunuz profil ile yayınlandığında, çalıştırılabilir dosya yayın dizininde bulunacaktır. Ardından, kurulum projesini inşa edin ve yükleyiciyi çalıştırın.

Kurulumu yönetici olarak çalıştırmanız gerekiyor. Bu işlemi yapmak için, MSI dosyasına sağ tıklayın ve ardından Yönetici olarak çalıştır seçeneğini seçin.

Hizmet yüklendikten sonra, hizmetin çalıştığını görmek için Hizmetleri açabilirsiniz. Servisi kaldırmak için yükleyiciyi çalıştırmak amacıyla Windows Program Ekle veya Kaldır özelliğini kullanın.

Ayrıca bkz.