ebpf-for-windows/installer/Product.wxs

300 строки
21 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (c) eBPF for Windows contributors
SPDX-License-Identifier: MIT
-->
<?define ProductVersion="022C44B5-8969-4B75-8DB0-73F98B1BD7DC"?>
<?define UpgradeCode="B6BCACB1-C872-4159-ABCB-43A50668056C"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:ui="http://schemas.microsoft.com/wix/UIExtension" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Product Id="$(var.ProductVersion)" Name="eBPF for Windows" Language="1033" Version="$(var.EbpfVersion)" Manufacturer="Microsoft" UpgradeCode="$(var.UpgradeCode)">
<!-- Platform should be $(var.Platform) but the current installer doesn't support ARM64. Fortunately ARM64 can emulate x64, so setting it to x64 works. -->
<Package Description="eBPF for Windows" InstallerVersion="301" Compressed="yes" InstallScope="perMachine" Manufacturer="Microsoft" Platform="x64"/>
<MajorUpgrade AllowSameVersionUpgrades="yes"
Disallow="yes" DisallowUpgradeErrorMessage="An older version of [ProductName] is already installed. Please remove it first."
AllowDowngrades="no" DowngradeErrorMessage="A newer version of [ProductName] is already installed. Please remove it first." Schedule="afterInstallFinalize" />
<MediaTemplate EmbedCab="yes" />
<!-- Define global properties -->
<PropertyRef Id="WIX_ACCOUNT_LOCALSERVICE" />
<Property Id="ARPCONTACT" Value="opencode@microsoft.com" />
<Property Id="INSTALLFOLDER" Secure="yes">
<RegistrySearch Id="FindInstallLocation" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[WIX_UPGRADE_DETECTED]" Name="InstallLocation" Type="raw" Win64="yes" />
</Property>
<!-- Define the Product features and installation steps -->
<Feature Id="ProductFeature" Title="eBPF for Windows Installer" ConfigurableDirectory="INSTALLFOLDER" Display="expand" Level="1" Absent="disallow" AllowAdvertise="no" InstallDefault="local" TypicalDefault="install" >
<Feature Id="eBPF_Runtime_Components" Level="1" Title="Runtime Components" Absent="disallow" Display="expand" AllowAdvertise="no" >
<ComponentGroupRef Id="eBPF_Runtime_Components" />
<ComponentGroupRef Id="eBPFCore_Driver" />
<ComponentGroupRef Id="NetEbpfExt_Driver" />
<?if $(var.IncludeJIT) = True ?>
<?if $(var.Configuration) = Debug ?>
<Feature Id="eBPF_Runtime_Components_JIT" Level="11" Title="JIT" Absent="allow" AllowAdvertise="no" >
<ComponentGroupRef Id="eBPF_Service" />
</Feature>
<?endif?>
<?if $(var.Configuration) = Release ?>
<Feature Id="eBPF_Runtime_Components_JIT" Level="11" Title="JIT" Absent="allow" AllowAdvertise="no" >
<ComponentGroupRef Id="eBPF_Service" />
</Feature>
<?endif?>
<?endif?>
<?if $(var.IncludeVCRedist) = True ?>
<Feature Id="VCRedist" Title="VC++ Redistributable" Level="11" Absent="disallow" AllowAdvertise="no" >
<ComponentGroupRef Id="VCRedist" />
</Feature>
<?endif?>
</Feature>
</Feature>
<InstallExecuteSequence>
<!--Rollback sequence-->
<Custom Action="eBPF_netsh_helper_uninstall_rollback" Before="eBPF_netsh_helper_install">NOT Installed</Custom>
<Custom Action="eBPFCore_Driver_stop_rollback" Before="eBPFCore_Driver_install">NOT Installed</Custom>
<Custom Action="eBPFCore_Driver_uninstall_rollback" Before="eBPFCore_Driver_install">NOT Installed</Custom>
<Custom Action="NetEbpfExt_Driver_stop_rollback" Before="NetEbpfExt_Driver_install">NOT Installed</Custom>
<Custom Action="NetEbpfExt_Driver_uninstall_rollback" Before="NetEbpfExt_Driver_install">NOT Installed</Custom>
<!--Install sequence-->
<Custom Action="Clear_eBPF_store_HKLM" After="InstallFiles">NOT Installed</Custom>
<Custom Action="Setup_eBPF_store_HKLM" After="Clear_eBPF_store_HKLM">NOT Installed</Custom>
<Custom Action="Clear_eBPF_store_HKCU" After="Setup_eBPF_store_HKLM">NOT Installed</Custom>
<Custom Action="Setup_eBPF_store_HKCU" After="Clear_eBPF_store_HKCU">NOT Installed</Custom>
<Custom Action="eBPF_netsh_helper_install" After="Setup_eBPF_store_HKCU">NOT Installed</Custom>
<Custom Action="eBPFCore_Driver_install" After="Setup_eBPF_store_HKCU">NOT Installed</Custom>
<Custom Action="eBPFCore_Driver_start" After="eBPFCore_Driver_install">NOT Installed</Custom>
<Custom Action="NetEbpfExt_Driver_install" After="Setup_eBPF_store_HKCU">NOT Installed</Custom>
<Custom Action="NetEbpfExt_Driver_start" After="NetEbpfExt_Driver_install">NOT Installed</Custom>
<!--Uninstall sequence-->
<Custom Action="eBPF_netsh_helper_uninstall" After="InstallInitialize">REMOVE="ALL"</Custom>
<Custom Action="eBPFCore_Driver_stop" After="InstallInitialize">REMOVE="ALL"</Custom>
<Custom Action="eBPFCore_Driver_uninstall" After="eBPFCore_Driver_stop">REMOVE="ALL"</Custom>
<Custom Action="NetEbpfExt_Driver_stop" After="InstallInitialize">REMOVE="ALL"</Custom>
<Custom Action="NetEbpfExt_Driver_uninstall" After="NetEbpfExt_Driver_stop">REMOVE="ALL"</Custom>
<Custom Action="Clear_eBPF_store_uninstall_HKLM" After="NetEbpfExt_Driver_uninstall">REMOVE="ALL"</Custom>
<Custom Action="Clear_eBPF_store_uninstall_HKCU" After="Clear_eBPF_store_uninstall_HKLM">REMOVE="ALL"</Custom>
<Custom Action="eBPFCore_Driver_uninstall_flush" After="InstallFinalize">REMOVE="ALL"</Custom>
</InstallExecuteSequence>
<!-- Define the UI style & behavior -->
<UIRef Id="WixUI_FeatureTree" />
<WixVariable Id="WixUILicenseRtf" Value="$(var.SolutionDir)installer\LICENSE.rtf" />
<WixVariable Id="WixUIBannerBmp" Value="res\eBPFBanner_493x58.bmp"/>
<WixVariable Id="WixUIDialogBmp" Value="res\eBPFDialog_493x312.bmp"/>
<CustomAction Id="SetWixInstallLocation" Property="ARPINSTALLLOCATION" Value="[INSTALLFOLDER]" />
<InstallUISequence>
<Custom Action="SetWixInstallLocation" After="CostFinalize" />
</InstallUISequence>
<UI />
</Product>
<!-- Define installation directories -->
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFiles64Folder">
<Directory Id="INSTALLFOLDER" Name="ebpf-for-windows">
<?if $(var.IncludeJIT) = True ?>
<?if $(var.Configuration) = Debug OR $(var.Configuration) = Release?>
<Directory Id="dir_JIT" Name="JIT" />
<?endif?>
<?endif?>
<Directory Id="dir_drivers" Name="drivers"/>
</Directory>
</Directory>
</Directory>
</Fragment>
<!-- Define the product's <Runtime> components -->
<Fragment>
<?if $(var.IncludeVCRedist) = True ?>
<ComponentGroup Id="VCRedist" Directory="INSTALLFOLDER">
<Component Id="concrt140" Guid="{BA96F793-1D16-4277-B12B-7588BC2E647A}">
<File Id="concrt140.dll" Name="concrt140.dll" DiskId="1" KeyPath="yes" Source="$(var.SolutionDir)$(var.Platform)\$(var.Configuration)\concrt140.dll" />
</Component>
<Component Id="msvcp140" Guid="{225C690D-C9B9-4F6C-B422-6579380E3A41}">
<File Id="msvcp140.dll" Name="msvcp140.dll" DiskId="1" KeyPath="yes" Source="$(var.SolutionDir)$(var.Platform)\$(var.Configuration)\msvcp140.dll" />
</Component>
<Component Id="msvcp140_1" Guid="{32C5D7C0-43CA-469E-A712-5A7ED0C18F68}">
<File Id="msvcp140_1.dll" Name="msvcp140_1.dll" DiskId="1" KeyPath="yes" Source="$(var.SolutionDir)$(var.Platform)\$(var.Configuration)\msvcp140_1.dll" />
</Component>
<Component Id="msvcp140_2" Guid="{CD0CB411-69A8-427F-B775-B1C0BB269D2A}">
<File Id="msvcp140_2.dll" Name="msvcp140_2.dll" DiskId="1" KeyPath="yes" Source="$(var.SolutionDir)$(var.Platform)\$(var.Configuration)\msvcp140_2.dll" />
</Component>
<Component Id="msvcp140_atomic_wait" Guid="{EDD2FCE1-0A0C-4DF0-A935-6A917BEC8FD2}">
<File Id="msvcp140_atomic_wait.dll" Name="msvcp140_atomic_wait.dll" DiskId="1" KeyPath="yes" Source="$(var.SolutionDir)$(var.Platform)\$(var.Configuration)\msvcp140_atomic_wait.dll" />
</Component>
<Component Id="msvcp140_codecvt_ids" Guid="{ED0E8435-4D52-4801-81A5-E4EF0DFA9CA7}">
<File Id="msvcp140_codecvt_ids.dll" Name="msvcp140_codecvt_ids.dll" DiskId="1" KeyPath="yes" Source="$(var.SolutionDir)$(var.Platform)\$(var.Configuration)\msvcp140_codecvt_ids.dll" />
</Component>
<Component Id="vccorlib140" Guid="{D1B5ADB1-10BB-491C-B10E-8B5445D71484}">
<File Id="vccorlib140.dll" Name="vccorlib140.dll" DiskId="1" KeyPath="yes" Source="$(var.SolutionDir)$(var.Platform)\$(var.Configuration)\vccorlib140.dll" />
</Component>
<Component Id="vcruntime140" Guid="{96C01CAE-A895-463D-B090-7E15DD03724E}">
<File Id="vcruntime140.dll" Name="vcruntime140.dll" DiskId="1" KeyPath="yes" Source="$(var.SolutionDir)$(var.Platform)\$(var.Configuration)\vcruntime140.dll" />
</Component>
<Component Id="vcruntime140_1" Guid="{2EC40012-1B68-4DAB-91B9-6B4190B4EB6D}">
<File Id="vcruntime140_1.dll" Name="vcruntime140_1.dll" DiskId="1" KeyPath="yes" Source="$(var.SolutionDir)$(var.Platform)\$(var.Configuration)\vcruntime140_1.dll" />
</Component>
</ComponentGroup>
<?endif?>
<ComponentGroup Id="eBPF_Runtime_Components" Directory="INSTALLFOLDER">
<Component Id ="eBpfPATH" Guid="{C062B980-4B93-4FC7-A4F9-A751C2B419FD}" KeyPath="yes">
<Environment Id="eBpfPATH" Name="PATH" Value="[INSTALLFOLDER]" Permanent="no" Part="last" Action="set" System="yes" Separator=";" />
</Component>
<Component Id="LICENSE" Guid="{AF22EAE5-7D8D-4F22-BB64-6B6A079A2947}">
<File Id="LICENSE.txt" Name="LICENSE.txt" DiskId="1" KeyPath="yes" Source="$(var.SolutionDir)LICENSE.txt" />
</Component>
<Component Id="BPF2C.EXE" DiskId="1" Guid="{BD23322B-91C3-4848-96E0-04E3745411E1}">
<File Id="BPF2C.EXE" Name="bpf2c.exe" KeyPath="yes" Source="$(var.bpf2c.TargetDir)bpf2c.exe" />
</Component>
<Component Id="BPF2C.PDB" DiskId="1" Guid="{6DEC471C-F27D-431C-A0E0-6F46CA472BAC}">
<File Id="BPF2C.PDB" Name="bpf2c.pdb" KeyPath="yes" Source="$(var.bpf2c.TargetDir)bpf2c.pdb" />
</Component>
<Component Id="EBPF_ALL.GUID" DiskId="1" Guid="{F3C808AC-A63B-4A29-B110-00B5A903F3C9}">
<File Id="EBPF_ALL.GUID" Name="ebpf-all.guid" KeyPath="yes" Source="$(var.SolutionDir)\scripts\ebpf-all.guid" />
</Component>
<Component Id="BPFTOOL.EXE" DiskId="1" Guid="{E168EB1A-35F6-47E3-B977-B16DF7DFBDB0}">
<File Id="BPFTOOL.EXE" Name="bpftool.exe" KeyPath="yes" Source="$(var.bpftool.TargetDir)bpftool.exe" />
</Component>
<Component Id="BPFTOOL.PDB" DiskId="1" Guid="{D2A6D747-A52C-43B9-A684-FF05A0DCE166}">
<File Id="BPFTOOL.PDB" Name="bpftool.pdb" KeyPath="yes" Source="$(var.bpftool.TargetDir)bpftool.pdb" />
</Component>
<Component Id="EBPFAPI.DLL" DiskId="1" Guid="{C44E4B08-901E-4B71-8FD1-F0B3D11D063F}">
<File Id="EBPFAPI.DLL" Name="EbpfApi.dll" KeyPath="yes" Source="$(var.EbpfApi.TargetDir)EbpfApi.dll" />
</Component>
<Component Id="EBPFAPI.PDB" DiskId="1" Guid="{6912E957-E682-41CB-9C53-1D0B886528F7}">
<File Id="EBPFAPI.PDB" Name="EbpfApi.pdb" KeyPath="yes" Source="$(var.EbpfApi.TargetDir)EbpfApi.pdb" />
</Component>
<Component Id="EBPF_PRINTK.GUID" DiskId="1" Guid="{77EB156D-046E-4BD6-8F57-CCA1DB031B0B}">
<File Id="EBPF_PRINTK.GUID" Name="ebpf-printk.guid" KeyPath="yes" Source="$(var.SolutionDir)\scripts\ebpf-printk.guid" />
</Component>
<Component Id="EBPFFORWINDOWS.WPRP" DiskId="1" Guid="{4E4838D3-0C49-4FA2-B8EE-E484CC0E7FA9}">
<File Id="EBPFFORWINDOWS.WPRP" Name="ebpfforwindows.wprp" KeyPath="yes" Source="$(var.SolutionDir)\scripts\ebpfforwindows.wprp" />
</Component>
<Component Id="EBPFNETSH.DLL" DiskId="1" Guid="{95928460-8560-448F-83C3-E9040BECCF5D}">
<File Id="EBPFNETSH.DLL" Name="ebpfnetsh.dll" KeyPath="yes" Source="$(var.ebpfnetsh.TargetDir)ebpfnetsh.dll" />
</Component>
<Component Id="EBPFNETSH.PDB" DiskId="1" Guid="{D0FB50BF-8822-4197-B3CF-0476C357DBDD}">
<File Id="EBPFNETSH.PDB" Name="ebpfnetsh.pdb" KeyPath="yes" Source="$(var.ebpfnetsh.TargetDir)ebpfnetsh.pdb" />
</Component>
<Component Id="EXPORT_PROGRAM_INFO.EXE" DiskId="1" Guid="{7AF9A30B-D7BF-4FD2-88C0-C2947ED55DCD}">
<File Id="EXPORT_PROGRAM_INFO.EXE" Name="export_program_info.exe" KeyPath="yes" Source="$(var.export_program_info.TargetDir)export_program_info.exe" />
</Component>
<Component Id="EXPORT_PROGRAM_INFO.PDB" DiskId="1" Guid="{88356FE4-6247-4876-BA14-42EDA88CC5C7}">
<File Id="EXPORT_PROGRAM_INFO.PDB" Name="export_program_info.pdb" KeyPath="yes" Source="$(var.export_program_info.TargetDir)export_program_info.pdb" />
</Component>
</ComponentGroup>
<!--Clear/Setup the eBPF store-->
<CustomAction Id="Clear_eBPF_store_HKLM" ExeCommand='"[#EXPORT_PROGRAM_INFO.EXE]" --clear' Directory="INSTALLFOLDER" Execute="deferred" Return="check" Impersonate="no"/>
<CustomAction Id="Clear_eBPF_store_HKCU" ExeCommand='"[#EXPORT_PROGRAM_INFO.EXE]" --clear' Directory="INSTALLFOLDER" Execute="deferred" Return="check" Impersonate="yes"/>
<CustomAction Id="Clear_eBPF_store_uninstall_HKLM" ExeCommand='"[#EXPORT_PROGRAM_INFO.EXE]" --clear' Directory="INSTALLFOLDER" Execute="deferred" Return="ignore" Impersonate="no"/>
<CustomAction Id="Clear_eBPF_store_uninstall_HKCU" ExeCommand='"[#EXPORT_PROGRAM_INFO.EXE]" --clear' Directory="INSTALLFOLDER" Execute="deferred" Return="ignore" Impersonate="yes"/>
<SetProperty Id="Setup_eBPF_store_HKLM" Value='"[#EXPORT_PROGRAM_INFO.EXE]"' Before="Setup_eBPF_store_HKLM" Sequence="execute"/>
<CustomAction Id="Setup_eBPF_store_HKLM" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="check" Impersonate="no"/>
<SetProperty Id="Setup_eBPF_store_HKCU" Value='"[#EXPORT_PROGRAM_INFO.EXE]"' Before="Setup_eBPF_store_HKCU" Sequence="execute"/>
<CustomAction Id="Setup_eBPF_store_HKCU" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="check" Impersonate="yes"/>
<!--Install/Uninstall the netsh helper-->
<!--qtexec does not currently support a working directory (ref. https://github.com/wixtoolset/issues/issues/1265)-->
<!--This workaround uses PowerShell to batch two commands, one to change the working directory, the other to execute the actual command from that directory.-->
<SetProperty Id="eBPF_netsh_helper_install" Value="&quot;[WindowsFolder]System32\WindowsPowerShell\v1.0\powershell.exe&quot; -ExecutionPolicy Bypass &quot;cd '[INSTALLFOLDER]';netsh add helper ebpfnetsh.dll&quot;" Before="eBPF_netsh_helper_install" Sequence="execute"/>
<CustomAction Id="eBPF_netsh_helper_install" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="check" Impersonate="no"/>
<SetProperty Id="eBPF_netsh_helper_uninstall" Value="&quot;[WindowsFolder]System32\WindowsPowerShell\v1.0\powershell.exe&quot; -ExecutionPolicy Bypass &quot;cd '[INSTALLFOLDER]';netsh delete helper ebpfnetsh.dll&quot;" Before="eBPF_netsh_helper_uninstall" Sequence="execute"/>
<CustomAction Id="eBPF_netsh_helper_uninstall" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="ignore" Impersonate="no"/>
<SetProperty Id="eBPF_netsh_helper_uninstall_rollback" Value="&quot;[WindowsFolder]System32\WindowsPowerShell\v1.0\powershell.exe&quot; -ExecutionPolicy Bypass &quot;cd '[INSTALLFOLDER]';netsh delete helper ebpfnetsh.dll&quot;" Before="eBPF_netsh_helper_uninstall_rollback" Sequence="execute"/>
<CustomAction Id="eBPF_netsh_helper_uninstall_rollback" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="ignore" Impersonate="no"/>
<!--Install/Uninstall the eBPF Service -->
<?if $(var.IncludeJIT) = True ?>
<ComponentGroup Id="eBPF_Service" Directory="dir_JIT">
<Component Id="EBPFSVC.PDB" DiskId="1" Guid="{D1935DF0-2FC7-42F5-81E5-19AF88D6244B}">
<File Id="EBPFSVC.PDB" Name="EbpfSvc.pdb" Source="$(var.ebpfsvc.TargetDir)ebpfsvc.pdb" />
</Component>
<Component Id="eBPF_Service" Guid="{25F4F9A3-78EB-4598-9982-98FB65377A51}">
<File Source="$(var.ebpfsvc.TargetPath)" KeyPath="yes" />
<ServiceInstall Id="eBPFSvcInstaller" Name="eBPFSvc" DisplayName="eBPF Service" Description="eBPF Service"
Start="auto"
Type="ownProcess"
ErrorControl="normal"
Account="[WIX_ACCOUNT_LOCALSERVICE]"
Vital="yes"
Interactive="no">
<ServiceConfig ServiceSid="restricted" OnInstall="yes" OnReinstall="yes" />
</ServiceInstall>
<ServiceControl Id="eBPFSvc_Start" Name="eBPFSvc"
Start="install"
Wait="no" />
<ServiceControl Id="eBPFSvc_Stop" Name="eBPFSvc"
Remove="uninstall"
Stop="both"
Wait="yes" />
</Component>
</ComponentGroup>
<?endif?>
<!--Install/Uninstall the eBPFCore Driver-->
<!--A kernel driver service is not currently supported by the Windows Installer (Wix v3 - https://wixtoolset.org/docs/v3/xsd/wix/serviceinstall/).-->
<ComponentGroup Id="eBPFCore_Driver" Directory="dir_drivers">
<Component Id="eBPFCore.inf" Guid="{3D31A9C8-8BB0-48A2-94BD-CBA734438E0C}">
<File Id="eBPFCore.inf" Name="eBPFCore.inf" Source="$(var.EbpfCore.TargetDir)eBPFCore.inf" KeyPath="yes"/>
</Component>
<Component Id="eBPFCore.sys" Guid="{5A6F4BA2-7FCB-48F7-BC6A-52C204E4A91A}">
<File Id="eBPFCore.sys" Name="eBPFCore.sys" Source="$(var.EbpfCore.TargetPath)" KeyPath="yes" />
</Component>
<Component Id="eBPFCore.pdb" Guid="{DDE1BBD0-F440-4D54-97D0-D10DB511BACB}">
<File Id="eBPFCore.pdb" Name="eBPFCore.pdb" Source="$(var.EbpfCore.TargetDir)eBPFCore.pdb" KeyPath="yes" />
</Component>
</ComponentGroup>
<SetProperty Id="eBPFCore_Driver_install" Value='"sc.exe" create eBPFCore type=kernel start=auto binpath="[#eBPFCore.sys]"' Before="eBPFCore_Driver_install" Sequence="execute"/>
<CustomAction Id="eBPFCore_Driver_install" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="check" Impersonate="no"/>
<Property Id="eBPFCore_Driver_start" Value='"net.exe" start eBPFCore' />
<CustomAction Id="eBPFCore_Driver_start" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="check" Impersonate="no"/>
<Property Id="eBPFCore_Driver_stop" Value='"net.exe" stop eBPFCore' />
<CustomAction Id="eBPFCore_Driver_stop" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="ignore" Impersonate="no"/>
<Property Id="eBPFCore_Driver_uninstall" Value='"sc.exe" delete eBPFCore' />
<CustomAction Id="eBPFCore_Driver_uninstall" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="ignore" Impersonate="no"/>
<CustomAction Id="eBPFCore_Driver_uninstall_flush" Directory="ProgramFiles64Folder" ExeCommand ='"sc.exe" query eBPFCore' Execute ="immediate" Return ="asyncNoWait"/>
<Property Id="eBPFCore_Driver_stop_rollback" Value='"net.exe" stop eBPFCore' />
<CustomAction Id="eBPFCore_Driver_stop_rollback" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="rollback" Return="ignore" Impersonate="no"/>
<Property Id="eBPFCore_Driver_uninstall_rollback" Value='"sc.exe" delete eBPFCore' />
<CustomAction Id="eBPFCore_Driver_uninstall_rollback" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="rollback" Return="ignore" Impersonate="no"/>
<!--Install/Uninstall the NetEbpfExt Driver-->
<!--A kernel driver service is not currently supported by the Windows Installer (Wix v3 - https://wixtoolset.org/docs/v3/xsd/wix/serviceinstall/).-->
<ComponentGroup Id="NetEbpfExt_Driver" Directory="dir_drivers">
<Component Id="NetEbpfExt.inf" Guid="{F1E813EE-665E-488C-84AA-0F47011C12F0}">
<File Id="NetEbpfExt.inf" Name="NetEbpfExt.inf" Source="$(var.netebpfext.TargetDir)NetEbpfExt.inf" KeyPath="yes" />
</Component>
<Component Id="NetEbpfExt.sys" Guid="{3ADAA711-7F62-472A-A60D-589D543ED507}">
<File Id="NetEbpfExt.sys" Name="NetEbpfExt.sys" Source="$(var.netebpfext.TargetPath)" KeyPath="yes" />
</Component>
<Component Id="NetEbpfExt.pdb" Guid="{3B35751C-693A-47C0-A258-97741D8B72CC}">
<File Id="NetEbpfExt.pdb" Name="NetEbpfExt.pdb" Source="$(var.netebpfext.TargetDir)NetEbpfExt.pdb" KeyPath="yes" />
</Component>
</ComponentGroup>
<SetProperty Id="NetEbpfExt_Driver_install" Value='"sc.exe" create NetEbpfExt type=kernel start=auto binpath="[#NetEbpfExt.sys]"' Before="NetEbpfExt_Driver_install" Sequence="execute"/>
<CustomAction Id="NetEbpfExt_Driver_install" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="check" Impersonate="no"/>
<Property Id="NetEbpfExt_Driver_start" Value='"net.exe" start NetEbpfExt' />
<CustomAction Id="NetEbpfExt_Driver_start" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="check" Impersonate="no"/>
<Property Id="NetEbpfExt_Driver_stop" Value='"net.exe" stop NetEbpfExt' />
<CustomAction Id="NetEbpfExt_Driver_stop" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="ignore" Impersonate="no"/>
<Property Id="NetEbpfExt_Driver_uninstall" Value='"sc.exe" delete NetEbpfExt' />
<CustomAction Id="NetEbpfExt_Driver_uninstall" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="ignore" Impersonate="no"/>
<Property Id="NetEbpfExt_Driver_stop_rollback" Value='"net.exe" stop NetEbpfExt' />
<CustomAction Id="NetEbpfExt_Driver_stop_rollback" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="rollback" Return="ignore" Impersonate="no"/>
<Property Id="NetEbpfExt_Driver_uninstall_rollback" Value='"sc.exe" delete NetEbpfExt' />
<CustomAction Id="NetEbpfExt_Driver_uninstall_rollback" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="rollback" Return="ignore" Impersonate="no"/>
</Fragment>
</Wix>