aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/installer/wireguard.wxs
blob: 643a226db3a85c6921ed6ced803d961c6d2e09d3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<?xml version="1.0" encoding="UTF-8"?>
<!--
	SPDX-License-Identifier: GPL-2.0

	Copyright (C) 2019 WireGuard LLC. All Rights Reserved.
-->
<?if $(var.Platform) = x86?>
	<?define PlatformProgramFilesFolder = "ProgramFilesFolder"?>
<?else?>
	<?define PlatformProgramFilesFolder = "ProgramFiles64Folder"?>
<?endif?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
	<Product
		Id="*"
		Name="WireGuard"
		Language="1033"
		Version="$(var.WIREGUARD_VERSION)"
		Manufacturer="WireGuard LLC"
		UpgradeCode="5e5a1da5-ba36-404d-92ec-41050d1c799c">
		<Package
			InstallerVersion="200"
			Compressed="yes"
			InstallScope="perMachine"
			Description="WireGuard: Fast, Modern, Secure VPN Tunnel"
			ReadOnly="yes"/>

		<MediaTemplate EmbedCab="yes" CompressionLevel="high"/>

		<Icon Id="wireguard.ico" SourceFile="..\ui\icon\wireguard.ico"/>
		<Binary Id="serviceevaluation.js" SourceFile="serviceevaluation.js"/>

		<Property Id="ARPPRODUCTICON" Value="wireguard.ico"/>
		<Property Id="ARPURLINFOABOUT" Value="https://www.wireguard.com/"/>
		<Property Id="ARPNOMODIFY" Value="yes" />
		<Property Id="DISABLEADVTSHORTCUTS" Value="yes"/>
		<Property Id="MSIRESTARTMANAGERCONTROL" Value="Disable" />

		<!--
			Upgrading
		-->
		<MajorUpgrade
			AllowDowngrades="no"
			AllowSameVersionUpgrades="yes"
			DowngradeErrorMessage="A newer version of [ProductName] is already installed."
			Schedule="afterInstallExecute" />
		<Property Id="INSTALLFOLDERPREV">
			<ComponentSearch Id="WireGuardExecutable" Guid="c3508d23-3362-47ce-9220-321bdb1a1acc"/>
		</Property>
		<SetProperty
			After="AppSearch"
			Action="SetInstallFolderPrev"
			Id="INSTALLFOLDER"
			Value="[INSTALLFOLDERPREV]"
			Sequence="first"><![CDATA[INSTALLFOLDERPREV AND NOT Installed]]></SetProperty>
		<SetProperty
			After="SetInstallFolderPrev"
			Action="SetInstallFolderParam"
			Id="INSTALLFOLDER"
			Value="[INSTALLDIR]"
			Sequence="first"><![CDATA[INSTALLDIR AND NOT Installed]]></SetProperty>

		<!--
			Folders
		-->
		<Directory Id="TARGETDIR" Name="SourceDir">
			<Directory Id="$(var.PlatformProgramFilesFolder)">
				<Directory Id="INSTALLFOLDER" Name="WireGuard"/>
			</Directory>
			<Directory Id="ProgramMenuFolder"/>
		</Directory>

		<!--
			Components
		-->
		<ComponentGroup Id="WireGuardComponents">
			<Component Directory="INSTALLFOLDER" Id="WireGuardExecutable" Guid="c3508d23-3362-47ce-9220-321bdb1a1acc">
				<File Source="..\$(var.Platform)\wireguard.exe" KeyPath="yes">
					<Shortcut Id="WireGuardStartMenuShortcut" Directory="ProgramMenuFolder" Name="WireGuard" Description="WireGuard: Fast, Modern, Secure VPN Tunnel" WorkingDirectory="INSTALLFOLDER" Advertise="yes" />
				</File>
				<ServiceControl Id="DummyService.3AA0C492_29F4_4342_B608_DB95B2DECB13" Name="DummyService.3AA0C492_29F4_4342_B608_DB95B2DECB13"></ServiceControl><!-- A dummy to make WiX create ServiceControl table for us. -->
			</Component>
		</ComponentGroup>

		<!--
			Merge modules
		-->
		<DirectoryRef Id="INSTALLFOLDER">
			<Merge Id="WintunMergeModule" Language="0" DiskId="1" SourceFile=".deps\wintun-$(var.Platform).msm"/>
		</DirectoryRef>

		<!--
			Features
		-->
		<Feature Id="WireGuardFeature" Title="WireGuard" Level="1" ConfigurableDirectory="INSTALLFOLDER">
			<ComponentGroupRef Id="WireGuardComponents"/>
		</Feature>
		<Feature Id="WintunFeature" Title="Wintun" Level="1">
			<MergeRef Id="WintunMergeModule"/>
		</Feature>

		<!--
			Evaluate WireGuard services and populate ServiceControl table
		-->
		<CustomAction Id="EvaluateWireGuardServices" BinaryKey="serviceevaluation.js" JScriptCall="EvaluateWireGuardServices"/>
		<InstallExecuteSequence>
			<Custom Action="EvaluateWireGuardServices" After="FindRelatedProducts"/>
		</InstallExecuteSequence>

		<!--
			Launch wireguard.exe after setup complete
		-->
		<CustomAction Id="LaunchApplication" HideTarget="yes" Impersonate="no" Execute="deferred" FileKey="wireguard.exe" ExeCommand="" Return="asyncNoWait"/>
		<InstallExecuteSequence>
			<!-- TODO: this should not launch when msiexec is called with whatever flag means it shouldn't launch. -->
			<Custom Action="LaunchApplication" After="PublishProduct">NOT Installed</Custom>
		</InstallExecuteSequence>

		<!-- TODO: On uninstall remove system32\config\wireguard. -->
		<!-- TODO: On install and uninstall, kill services. -->
	</Product>
</Wix>