특징
- 업그레이드 및 설치 시, 기존 서비스는 중지한 후 설치함
- 언인스톨러는 설정 > 앱 > 설치된 앱에서 확인 가능
- 언인스톨 시, 기존 서비스를 중지하고 제거함
- GUID가 같으면 설치되지 않음
테스트 서비스 프로그램 만들기
1. Visual Studio 2022 → 새 프로젝트 만들기 → 작업자 서비스 선택하여 프로젝트 생성
2. NuGet 패키지 관리자로 아래 두 개 설치
3. Program.cs 를 아래와 같이 코딩 후 빌드
using WorkerService1;
using Microsoft.Extensions.Hosting.WindowsServices;
var builder = Host.CreateApplicationBuilder(args);
// Windows 서비스로 동작하도록
builder.Services.AddWindowsService(o =>
{
o.ServiceName = "My Worker Service";
});
builder.Services.AddHostedService<Worker>();
var host = builder.Build();
host.Run();
4. 단일 배포 파일 생성
dotnet publish -c Release -r win-x64 -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:SelfContained=true
WiX v4 설치 후 구성
다운로드 및 설치 : https://marketplace.visualstudio.com/items?itemName=FireGiant.FireGiantHeatWaveDev17
1. Visual Studio 2022 → 새 프로젝트 만들기 → MSI Package 선택하여 프로젝트 생성
2. 코드 수정 및 빌드
// ExampleComponents.wxs
<!-- ExampleComponents.wxs -->
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
<Fragment>
<ComponentGroup Id="ExampleComponents" Directory="INSTALLFOLDER">
<Component>
<File Id="Service1"
Source="C:\Users\codetronik\source\repos\WorkerService1\WorkerService1\bin\Release\net8.0\win-x64\publish\WorkerService1.exe"
KeyPath="yes" />
<!-- 서비스 등록 -->
<ServiceInstall
Name="MyService1"
DisplayName="My Service"
Description="Service example"
Type="ownProcess"
Start="auto"
Account="LocalSystem"
ErrorControl="normal"/>
<!-- 설치/업그레이드/제거 시 제어 -->
<ServiceControl
Name="MyService1"
Stop="both"
Start="install"
Remove="uninstall"
Wait="yes"/>
</Component>
</ComponentGroup>
</Fragment>
</Wix>
// Folder.wxs
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
<Fragment>
<StandardDirectory Id="ProgramFiles64Folder">
<Directory Id="INSTALLFOLDER"
Name="!(bind.Property.Manufacturer) !(bind.Property.ProductName)" />
</StandardDirectory>
</Fragment>
</Wix>
// Package.en-us.wxl
<!--
This file contains the declaration of all the localizable strings.
-->
<WixLocalization xmlns="http://wixtoolset.org/schemas/v4/wxl" Culture="en-US">
<String Id="DowngradeError" Value="A newer version of [ProductName] is already installed." />
</WixLocalization>
// Package.wxs
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
<Package Id="MyServicePkg"
Name="ServiceExample"
Manufacturer="Codetronik"
Version="1.0.0.0"
UpgradeCode="{1B29FC40-CA47-1067-131D-00DD010662DA}">
<MajorUpgrade Schedule="afterInstallValidate"
DowngradeErrorMessage="!(loc.DowngradeError)" />
<Feature Id="Main">
<ComponentGroupRef Id="ExampleComponents" />
</Feature>
</Package>
</Wix>
'Windows > Dev' 카테고리의 다른 글
[poco] 로그 예제 (0) | 2025.07.22 |
---|---|
[C++20] std::span (0) | 2025.05.25 |
[Visual Studio] NDK 툴체인 업그레이드 하는 방법 (0) | 2024.11.09 |
windows + mac 동시 개발 시 주의 사항 (0) | 2024.10.15 |
[C++] 함수 const 선언 정리 (0) | 2024.09.12 |