Files
ModSecurity/iis/installer.wxs
A13501350 d75eea074d untest
2025-09-21 02:33:02 +08:00

426 lines
36 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!--
# This comment is generated by WixEdit, the specific commandline
# arguments for the WiX Toolset are stored here.
candleArgs: -nologo "<projectfile>" -out "<projectname>.wixobj" -ext WixUtilExtension -ext WixUIExtension -arch x64
lightArgs:
-->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Product Id="22B04FDB-9BAB-46B0-87B8-A39544ECECD3" Name="ModSecurity IIS" Language="1033" Version="2.9.12" Manufacturer="ModSecurity" UpgradeCode="82F09489-1678-4C38-ADCB-08C3757653DB">
<Package Description="ModSecurityISS" Comments="none" InstallerVersion="405" Compressed="yes" InstallPrivileges="elevated" InstallScope="perMachine" />
<?define ProductName = "ModSecurity IIS" ?>
<?if $(sys.BUILDARCH) = x64 ?>
<?define Win64 = "yes" ?>
<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
<?define ConfigFile = "[inetsrv64]Config\applicationHost.config" ?>
<Property Id="IIS_SETUP">
<RegistrySearch Id="ConfigureIISRegistrySearch" Type="raw" Root="HKLM" Key="SOFTWARE\ModSecurity\ModSecurity" Name="ModSecurityConfigureIIS" Win64="yes" />
</Property>
<?else?>
<?define Win64 = "no" ?>
<?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
<?define ConfigFile = "[inetsrv32]Config\applicationHost.config" ?>
<Property Id="IIS_SETUP">
<RegistrySearch Id="ConfigureIISRegistrySearch" Type="raw" Root="HKLM" Key="SOFTWARE\ModSecurity\ModSecurity" Name="ModSecurityConfigureIIS" Win64="no" />
</Property>
<?endif?>
<!-- 检测 IIS 的主要版本 -->
<Property Id="IIS">
<RegistrySearch Id="IISInstalledVersion" Root="HKLM" Key="SOFTWARE\Microsoft\InetStp" Type="raw" Name="MajorVersion" />
</Property>
<!-- 检测 ModSecurity IIS 模块及其依赖 DLL 文件是否存在 -->
<Property Id="FILEEXISTS" Secure="yes">
<DirectorySearch Id="CheckFileDir1" Path="C:\Windows\System32\inetsrv" Depth="0">
<FileSearch Id="CheckFile1" Name="ModSecurityIIS.dll" />
</DirectorySearch>
<DirectorySearch Id="CheckFileDir2" Path="C:\Windows\System32\inetsrv" Depth="0">
<FileSearch Id="CheckFile2" Name="libapr-1.dll" />
</DirectorySearch>
<DirectorySearch Id="CheckFileDir3" Path="C:\Windows\System32\inetsrv" Depth="0">
<FileSearch Id="CheckFile3" Name="libapriconv-1.dll" />
</DirectorySearch>
<DirectorySearch Id="CheckFileDir4" Path="C:\Windows\System32\inetsrv" Depth="0">
<FileSearch Id="CheckFile4" Name="libaprutil-1.dll" />
</DirectorySearch>
<DirectorySearch Id="CheckFileDir5" Path="C:\Windows\System32\inetsrv" Depth="0">
<FileSearch Id="CheckFile5" Name="libcurl.dll" />
</DirectorySearch>
<DirectorySearch Id="CheckFileDir6" Path="C:\Windows\System32\inetsrv" Depth="0">
<FileSearch Id="CheckFile6" Name="libxml2.dll" />
</DirectorySearch>
<DirectorySearch Id="CheckFileDir7" Path="C:\Windows\System32\inetsrv" Depth="0">
<FileSearch Id="CheckFile7" Name="lua5.1.dll" />
</DirectorySearch>
<DirectorySearch Id="CheckFileDir8" Path="C:\Windows\System32\inetsrv" Depth="0">
<FileSearch Id="CheckFile8" Name="pcre.dll" />
</DirectorySearch>
<DirectorySearch Id="CheckFileDir9" Path="C:\Windows\System32\inetsrv" Depth="0">
<FileSearch Id="CheckFile9" Name="zlib1.dll" />
</DirectorySearch>
<DirectorySearch Id="CheckFileDir10" Path="C:\Windows\SysWOW64\inetsrv" Depth="0">
<FileSearch Id="CheckFile10" Name="ModSecurityIIS.dll" />
</DirectorySearch>
<DirectorySearch Id="CheckFileDir11" Path="C:\Windows\System32\inetsrv" Depth="0">
<FileSearch Id="CheckFile11" Name="libapr-1.dll" />
</DirectorySearch>
<DirectorySearch Id="CheckFileDir12" Path="C:\Windows\System32\inetsrv" Depth="0">
<FileSearch Id="CheckFile12" Name="libapriconv-1.dll" />
</DirectorySearch>
<DirectorySearch Id="CheckFileDir13" Path="C:\Windows\System32\inetsrv" Depth="0">
<FileSearch Id="CheckFile13" Name="libaprutil-1.dll" />
</DirectorySearch>
<DirectorySearch Id="CheckFileDir14" Path="C:\Windows\System32\inetsrv" Depth="0">
<FileSearch Id="CheckFile14" Name="libcurl.dll" />
</DirectorySearch>
<DirectorySearch Id="CheckFileDir15" Path="C:\Windows\System32\inetsrv" Depth="0">
<FileSearch Id="CheckFile15" Name="libxml2.dll" />
</DirectorySearch>
<DirectorySearch Id="CheckFileDir16" Path="C:\Windows\System32\inetsrv" Depth="0">
<FileSearch Id="CheckFile16" Name="lua5.1.dll" />
</DirectorySearch>
<DirectorySearch Id="CheckFileDir17" Path="C:\Windows\System32\inetsrv" Depth="0">
<FileSearch Id="CheckFile17" Name="pcre.dll" />
</DirectorySearch>
<DirectorySearch Id="CheckFileDir18" Path="C:\Windows\System32\inetsrv" Depth="0">
<FileSearch Id="CheckFile18" Name="zlib1.dll" />
</DirectorySearch>
<DirectorySearch Id="CheckFileDir19" Path="C:\Windows\System32\inetsrv" Depth="0">
<FileSearch Id="CheckFile19" Name="fuzzy.dll" />
</DirectorySearch>
</Property>
<!-- 检测 IIS 的 WWW 根目录 -->
<Property Id="WWWROOT">
<RegistrySearch Id="FindInetPubFolder" Root="HKLM" Key="SOFTWARE\Microsoft\InetStp" Name="PathWWWRoot" Type="directory" />
</Property>
<!-- 定义 MSI 属性,启用 MSI 的真实管理员检测,在“程序和功能”中禁用修复、修改选项 -->
<Property Id="MSIUSEREALADMINDETECTION" Value="1" />
<!-- 定义安装条件 -->
<Condition Message="This setup requires IIS 7.0, 8.0 or 10.0. If that's the case, please ensure that the installer is running as administrator or try running it from the 'Apps and features' or 'Add/Remove Programs' menu"><![CDATA[(IIS="#7") OR (IIS="#8") OR (IIS="#10")]]></Condition>
<!-- Version 2.7.5 had an uninstall issue that leaves some files behind. Asking the user to manually hash this out. -->
<Condition Message="A older version of ModSecurityIIS was found in your computer. Please complete uninstall by removing the following file: [FILEEXISTS]. You may have to remove ModSecurity module from IIS, use the IIS Manager to do so."><![CDATA[(NOT FILEEXISTS) OR (Installed)]]></Condition>
<Condition Message="64-bit operating system was detected, please use the 64-bit installer.">
<!-- - 通过条件编译定义了 64/32位 ModSecurity IIS 模块及其依赖 DLL 文件组件及 IIS 配置 Schema 目录。 -->
<?if $(var.Win64) = "yes" ?>
VersionNT64
<?else?>
NOT VersionNT64
<?endif?></Condition>
<Property Id="ARPNOREPAIR" Value="yes" Secure="yes" />
<Property Id="ARPNOMODIFY" Value="yes" Secure="yes" />
<!-- 定义安装包的媒体信息 -->
<Media Id="1" Cabinet="simple.cab" EmbedCab="yes" />
<!-- 定义安装包的目录结构 -->
<Directory Id="TARGETDIR" Name="SourceDir">
<?if $(var.Win64) = "yes" ?>
<Directory Id="SystemFolder" Name="SystemFolder">
<Directory Id="inetsrv32" Name="inetsrv">
<Directory Id="SystemFolderConfig32" Name="config">
<Directory Id="SystemFolderConfigSchema32" Name="schema" />
</Directory>
</Directory>
</Directory>
<Directory Id="System64Folder" Name="SystemFolder">
<Directory Id="inetsrv64" Name="inetsrv">
<Directory Id="SystemFolderConfig64" Name="config">
<Directory Id="SystemFolderConfigSchema64" Name="schema" />
</Directory>
</Directory>
</Directory>
<?else?>
<Directory Id="SystemFolder" Name="SystemFolder">
<Directory Id="inetsrv32" Name="inetsrv">
<Directory Id="SystemFolderConfig32" Name="config">
<Directory Id="SystemFolderConfigSchema32" Name="schema" />
</Directory>
</Directory>
</Directory>
<?endif?>
<Directory Id="$(var.PlatformProgramFilesFolder)">
<Directory Id="INSTALLFOLDER" Name="ModSecurity IIS"></Directory>
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="ProgramMenuDir" Name="ModSecurity IIS">
<Component Id="StartMenuShortcuts" Guid="43C26B13-C4D8-42F8-8715-3AF78E66C902">
<util:InternetShortcut Id="WebsiteShortcut" Name="ModSecurity" Target="http://www.modsecurity.org/" />
<RemoveFolder Id="ProgramMenuDir" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" />
<Shortcut Id="UninstallProduct" Name="Uninstall" Description="Uninstalls the ModSecurity IIS" Target="[System64Folder]msiexec.exe" Arguments="/x [ProductCode]" />
<Shortcut Id="EULA" Name="EULA" Description="EULA" Target="[INSTALLFOLDER]EULA.rtf" WorkingDirectory="INSTALLFOLDER" />
<Shortcut Id="Readme" Name="EULA" Description="EULA" Target="[INSTALLFOLDER]README.TXT" WorkingDirectory="INSTALLFOLDER" />
</Component>
</Directory>
</Directory>
</Directory>
<!-- 12. 安装文件和 IIS 配置 -->
<DirectoryRef Id="INSTALLFOLDER">
<Component Id="ModSecCommon" DiskId="1" Guid="980270DF-81AB-469B-AB0E-64FA3BA160B6" Location="local">
<File Id="README.TXT" Name="README.TXT" Source="wix\README.TXT" />
<File Id="EULA.RTF" Name="EULA.rtf" Source="wix\EULA.rtf" />
<File Id="modsecurity.conf" Name="modsecurity.conf" Source="wix\modsecurity.conf" />
<File Id="modsecurity_iis.conf" Name="modsecurity_iis.conf" Source="wix\modsecurity_iis.conf" />
<File Id="unicode.mapping" Name="unicode.mapping" Source="wix\unicode.mapping" />
<File Id="LIST_DEPENDENCIES.BAT" Name="list_dependencies.bat" Source="wix\list_dependencies.bat" />
<File Id="ModSecurity.xml" Name="ModSecurity.xml" Source="ModSecurity.xml" />
<!-- Modify ApplicationHost.config -->
<util:XmlConfig Id="appHostEntry" File="$(var.ConfigFile)" Action="create" ElementPath="//configuration/configSections/sectionGroup[\[]@name='system.webServer'[\]]" VerifyPath="section[\[]@name='ModSecurity'[\]]" Name="section" Node="element" Sequence="1" On="install" />
<util:XmlConfig Id="appHostEntryName" File="$(var.ConfigFile)" ElementPath="appHostEntry" Name="name" Value="ModSecurity" Sequence="2" />
<util:XmlConfig Id="appHostEntryOverrideMode" File="$(var.ConfigFile)" ElementPath="appHostEntry" Name="overrideModeDefault" Value="Allow" Sequence="3" />
<util:XmlConfig Id="appHostEntryAllowDefinition" File="$(var.ConfigFile)" ElementPath="appHostEntry" Name="allowDefinition" Value="Everywhere" Sequence="4" />
<util:XmlConfig Id="removeAppHostEntry" File="$(var.ConfigFile)" Action="delete" ElementPath="/configuration/configSections/sectionGroup[\[]@name='system.webServer'[\]]" Node="element" VerifyPath="section[\[]@name='ModSecurity'[\]]" On="uninstall" Sequence="1" />
<util:XmlConfig Id="removeAppHostEntry2" File="$(var.ConfigFile)" Action="delete" ElementPath="/configuration/system.webServer" Node="element" VerifyPath="/configuration/system.webServer/ModSecurity" Name="section" On="uninstall" Sequence="2" />
<RegistryKey Root="HKLM" Key="SOFTWARE\ModSecurity\ModSecurity" Action="createAndRemoveOnUninstall">
<RegistryValue Type="string" Name="ModSecurityConfigureIIS" Value="[IIS_SETUP]" KeyPath="yes" />
</RegistryKey>
</Component>
</DirectoryRef>
<DirectoryRef Id="inetsrv64">
<Component Id="ModSec64" DiskId="1" Guid="514A81F0-2413-42EF-B19F-E2613125ECE0" Win64="yes" Location="local">
<util:EventSource Name="ModSecurity" Log="Application" EventMessageFile="[inetsrv64]ModSecurityIIS.dll" KeyPath="yes" />
</Component>
</DirectoryRef>
<DirectoryRef Id="inetsrv32">
<Component Id="ModSec32" DiskId="1" Guid="514A81F0-2413-42EF-B19F-E2613125ECE1" Win64="no" Location="local">
<util:EventSource Name="ModSecurity" Log="Application" EventMessageFile="[inetsrv32]ModSecurityIIS.dll" KeyPath="yes" />
</Component>
</DirectoryRef>
<DirectoryRef Id="SystemFolderConfigSchema32">
<Component Id="ConfigSchema32" Guid="514A81F0-2413-42EF-B19F-E2613125EC11" Location="local" Win64="no">
<File Id="_32_ConfigSchema" Name="ModSecurity.xml" Source="ModSecurity.xml" />
</Component>
</DirectoryRef>
<DirectoryRef Id="SystemFolderConfigSchema64">
<Component Id="ConfigSchema64" Guid="514A81F0-2413-42EF-B19F-E2613125EC22" Location="local" Win64="yes">
<File Id="_64_ConfigSchema" Name="ModSecurity.xml" Source="ModSecurity.xml" />
</Component>
</DirectoryRef>
<!-- 14. 功能组件 (Features) 定义了默认安装功能,包含 ModSecurity 的通用文件和配置 Schema。 -->
<Feature Id="DefaultFeature" Title="ModSecurity IIS Common files" Level="1" InstallDefault="local" Absent="disallow" Display="expand" AllowAdvertise="no" Description="Configuration
and common files">
<ComponentRef Id="ModSecCommon" />
<ComponentRef Id="ConfigSchema32" />
<?if $(var.Win64) = "yes"
?>
<ComponentRef Id="ConfigSchema64" />
<?endif?>
<ComponentRef Id="StartMenuShortcuts" />
</Feature>
<Feature Id="VCRedist" Title="Visual C++ 12.0 Runtime" AllowAdvertise="no" Display="hidden" Level="1">
<?if $(var.Win64) = "yes" ?>
<MergeRef Id="VCRedist110_64" />
<MergeRef Id="VCRedist120_64" />
<MergeRef Id="VCRedist110_32" />
<MergeRef Id="VCRedist120_32" />
<?else?>
<MergeRef Id="VCRedist110_32" />
<MergeRef Id="VCRedist120_32" />
<?endif?>
</Feature>
<?if $(var.Win64) = "yes" ?>
<Feature Id="ModSec64" Title="ModSecurity IIS (64 bits)" Level="1" InstallDefault="local" Display="expand" AllowAdvertise="no" Description="This option will install ModSecurityIIS 64bits with all the necessary dependencies.">
<ComponentRef Id="ModSec64" />
<ComponentGroupRef Id="ModSec64Components" />
</Feature>
<Feature Id="ModSec32" Title="ModSecurity IIS (32 bits)" Level="1" InstallDefault="local" Display="expand" AllowAdvertise="no" Description="ModSecurityIIS 32bits with all the necessary dependencies. Application pools can be configured to run into 32bits mode even in a 64bits Windows. It is safe to keep both versions of ModSecurity (32 and 64bits) installed.">
<ComponentRef Id="ModSec32" />
<ComponentGroupRef Id="ModSec32Components" />
</Feature>
<?else?>
<Feature Id="ModSec32" Title="ModSecurity IIS (32 bits)" Level="1" InstallDefault="local" Display="expand" AllowAdvertise="no" Description="This option will install ModSecurityIIS 32bits with all the necessary dependencies.">
<ComponentRef Id="ModSec32" />
<ComponentGroupRef Id="ModSec32Components" />
</Feature>
<?endif?>
<UI Id="WixUI_FeatureTreeCustom">
<Dialog Id="CustomizeDlgModSec" Width="370" Height="270" Title="!(loc.CustomizeDlg_Title)" TrackDiskSpace="yes">
<Control Id="Tree" Type="SelectionTree" X="25" Y="85" Width="175" Height="115" Property="_BrowseProperty" Sunken="yes" TabSkip="no" Text="!(loc.CustomizeDlgTree)">
<?if $(var.Win64) = "yes" ?>
<Publish Property="DisableButton" Value="1">(NOT &amp;ModSec64=3) AND (NOT &amp;ModSec32=3)</Publish>
<Publish Property="DisableButton" Value="0">&amp;ModSec64=3 OR &amp;ModSec32=3</Publish>
<?else?>
<Publish Property="DisableButton" Value="1">(NOT &amp;ModSec32=3)</Publish>
<Publish Property="DisableButton" Value="0">&amp;ModSec32=3</Publish>
<?endif?>
</Control>
<Control Id="Browse" Type="PushButton" X="294" Y="210" Width="66" Height="17" Text="!(loc.CustomizeDlgBrowse)">
<Publish Event="SelectionBrowse" Value="BrowseDlg">1</Publish>
<Condition Action="hide">Installed</Condition>
<Condition Action="disable">Installed</Condition>
</Control>
<Control Id="Reset" Type="PushButton" X="10" Y="243" Width="81" Height="17" Text="!(loc.CustomizeDlgReset)">
<Publish Event="Reset" Value="0">1</Publish>
<Subscribe Event="SelectionNoItems" Attribute="Enabled" />
</Control>
<Control Id="DiskCost" Type="PushButton" X="91" Y="243" Width="100" Height="17" Text="!(loc.CustomizeDlgDiskCost)">
<Publish Event="SpawnDialog" Value="DiskCostDlg">1</Publish>
<Subscribe Event="SelectionNoItems" Attribute="Enabled" />
</Control>
<Control Id="Back" Type="PushButton" X="192" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)" />
<Control Id="Next" Type="PushButton" X="248" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)">
<Subscribe Event="SelectionNoItems" Attribute="Enabled" />
<Condition Action="disable">DisableButton = 1</Condition>
<Condition Action="enable">DisableButton = 0</Condition>
</Control>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control>
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.CustomizeDlgBannerBitmap)" />
<Control Id="Text" Type="Text" X="25" Y="55" Width="320" Height="20" Text="!(loc.CustomizeDlgText)" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.CustomizeDlgDescription)" />
<Control Id="Title" Type="Text" X="15" Y="6" Width="210" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.CustomizeDlgTitle)" />
<Control Id="Box" Type="GroupBox" X="210" Y="81" Width="150" Height="118" />
<Control Id="ItemDescription" Type="Text" X="215" Y="90" Width="131" Height="50" Text="!(loc.CustomizeDlgItemDescription)">
<Subscribe Event="SelectionDescription" Attribute="Text" />
</Control>
<Control Id="ItemSize" Type="Text" X="215" Y="140" Width="131" Height="50" Text="!(loc.CustomizeDlgItemSize)">
<Subscribe Event="SelectionSize" Attribute="Text" />
</Control>
<Control Id="Location" Type="Text" X="90" Y="210" Width="200" Height="20" Text="!(loc.CustomizeDlgLocation)">
<Subscribe Event="SelectionPath" Attribute="Text" />
<Subscribe Event="SelectionPathOn" Attribute="Visible" />
<Condition Action="hide">Installed</Condition>
</Control>
<Control Id="LocationLabel" Type="Text" X="25" Y="210" Width="65" Height="10" Text="!(loc.CustomizeDlgLocationLabel)">
<Subscribe Event="SelectionPathOn" Attribute="Visible" />
<Condition Action="hide">Installed</Condition>
</Control>
</Dialog>
<Dialog Id="RegisterDlg" Width="370" Height="270" Title="!(loc.VerifyReadyDlg_Title)" TrackDiskSpace="yes">
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control>
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control>
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control>
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.VerifyReadyDlgBannerBitmap)" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Title" Type="Text" X="15" Y="6" Width="210" Height="15" Transparent="yes" NoPrefix="yes" Text="{\WixUI_Font_Title}IIS Setup" />
<Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes" Text="Choose to configure ModSecurity on IIS or not." />
<Control Id="Text" Type="Text" X="25" Y="55" Width="320" Height="50" Text="ModSecurityIIS needs to be configured under IIS as a module. It is recommended to perform this configuration during the installation. However, if you are facing problems in the installation, the recomendation is to disable this step. This will facilitate the debugging process since the files will be installed in place. Note that some scripts will be installed along with ModSecurity common files that can be later used to help this configuration/debugging process." />
<Control Type="CheckBox" Id="ConfigureIIS" Width="200" Height="14" X="25" Y="124" CheckBoxValue="1" Property="IIS_SETUP" Text="Perform ModSecurityIIS configuration." />
<Control Type="Text" Id="troubleshooting" Width="314" Height="67" X="26" Y="161" Text="For further information about problems during the installation, have a look at ModSecurityIIS Troubleshooting guide. Available at: https://github.com/owasp-modsecurity/ModSecurity/wiki/IIS-Troubleshooting. ATTENTION: This installation process no longer install OWASP CRS. Please refer to the OWASP CRS Project to understand how to install it. " />
</Dialog>
<Binary Id="bannrbmp" SourceFile="wix\banner.jpg" />
<TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
<TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
<TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />
<Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
<Property Id="WixUI_Mode" Value="FeatureTree" />
<DialogRef Id="ErrorDlg" />
<DialogRef Id="FatalError" />
<DialogRef Id="FilesInUse" />
<DialogRef Id="MsiRMFilesInUse" />
<DialogRef Id="PrepareDlg" />
<DialogRef Id="ProgressDlg" />
<DialogRef Id="ResumeDlg" />
<DialogRef Id="UserExit" />
<Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="LicenseAgreementDlg">NOT Installed</Publish>
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">Installed AND PATCH</Publish>
<Publish Dialog="LicenseAgreementDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
<Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="CustomizeDlgModSec">LicenseAccepted = "1"</Publish>
<Publish Dialog="CustomizeDlgModSec" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="1">Installed</Publish>
<Publish Dialog="CustomizeDlgModSec" Control="Back" Event="NewDialog" Value="LicenseAgreementDlg" Order="2">NOT Installed</Publish>
<?if $(var.Win64) = "yes" ?>
<Publish Dialog="CustomizeDlgModSec" Control="Next" Event="NewDialog" Value="RegisterDlg">&amp;ModSec64=3 OR &amp;ModSec32=3</Publish>
<Publish Dialog="CustomizeDlgModSec" Control="Next" Event="NewDialog" Value="CustomizeDlgModSec">(NOT &amp;ModSec64=3) AND (NOT &amp;ModSec32=3)</Publish>
<?else?>
<Publish Dialog="CustomizeDlgModSec" Control="Next" Event="NewDialog" Value="RegisterDlg">&amp;ModSec32=3</Publish>
<?endif?>
<Publish Dialog="RegisterDlg" Control="Back" Event="NewDialog" Value="CustomizeDlgModSec" Order="1">NOT Installed OR WixUI_InstallMode = "Change"</Publish>
<Publish Dialog="RegisterDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="2">NOT Installed OR WixUI_InstallMode = "Change"</Publish>
<Publish Dialog="RegisterDlg" Control="Next" Event="NewDialog" Value="WelcomeDlg" Order="3">Installed AND PATCH</Publish>
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="RegisterDlg" Order="1">NOT Installed OR WixUI_InstallMode = "Change"</Publish>
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">Installed AND NOT PATCH</Publish>
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="3">Installed AND PATCH</Publish>
<Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
<Publish Dialog="MaintenanceTypeDlg" Control="ChangeButton" Event="NewDialog" Value="CustomizeDlgModSec">1</Publish>
<Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
<Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
<Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>
</UI>
<UIRef Id="WixUI_Common" />
<WixVariable Id="WixUILicenseRtf" Value="wix\EULA.rtf" />
<WixVariable Id="WixUIBannerBmp" Value="wix\banner.jpg" />
<WixVariable Id="WixUIDialogBmp" Value="wix\dialog.jpg" />
<CustomAction Id="SetIISConfigure" Property="IIS_SETUP" Value="1" Execute="firstSequence" />
<InstallUISequence>
<Custom Action="SetIISConfigure" Before="AppSearch">NOT Installed</Custom>
</InstallUISequence>
<InstallExecuteSequence>
<Custom Action="SetIISConfigure" Before="AppSearch">NOT Installed</Custom>
<Custom Action="Cleanup1" After="InstallInitialize"><![CDATA[NOT Installed AND IIS_SETUP]]></Custom>
<Custom Action="Cleanup2" Before="Cleanup1"><![CDATA[NOT Installed AND IIS_SETUP]]></Custom>
<Custom Action="Cleanup3" Before="Cleanup2"><![CDATA[NOT Installed AND IIS_SETUP]]></Custom>
<Custom Action="Cleanup4" Before="Cleanup3"><![CDATA[NOT Installed AND IIS_SETUP]]></Custom>
<Custom Action="Cleanup5" Before="Cleanup4"><![CDATA[NOT Installed AND IIS_SETUP]]></Custom>
<?if $(var.Win64) = "yes" ?>
<Custom Action="InstallModule64" Before="InstallFinalize"><![CDATA[NOT Installed AND IIS_SETUP]]></Custom>
<Custom Action="InstallModule32" After="InstallModule64"><![CDATA[NOT Installed AND IIS_SETUP]]></Custom>
<Custom Action="InstallConf" After="InstallModule32"><![CDATA[NOT Installed AND IIS_SETUP]]></Custom>
<Custom Action="UninstallConf" Before="RemoveFiles"><![CDATA[Installed AND IIS_SETUP]]></Custom>
<Custom Action="UninstallModule32" Before="UninstallConf"><![CDATA[Installed AND IIS_SETUP]]></Custom>
<Custom Action="UninstallModule64" Before="UninstallModule32"><![CDATA[Installed AND IIS_SETUP]]></Custom>
<?else?>
<Custom Action="InstallModule32" Before="InstallFinalize"><![CDATA[NOT Installed AND IIS_SETUP]]></Custom>
<Custom Action="InstallConf" After="InstallModule32"><![CDATA[NOT Installed AND IIS_SETUP]]></Custom>
<Custom Action="UninstallConf" Before="RemoveFiles"><![CDATA[Installed AND IIS_SETUP]]></Custom>
<Custom Action="UninstallModule32" After="UninstallConf"><![CDATA[Installed AND IIS_SETUP]]></Custom>
<?endif?>
</InstallExecuteSequence>
<!-- Cleanup: older versions left some settings behind. This is needed to remove -->
<!-- that old stuff before install this brand new version of ModSecurity. -->
<?if $(var.Win64) = "yes" ?>
<CustomAction Id="Cleanup1" Execute="deferred" Impersonate="no" Return="ignore" Directory="INSTALLFOLDER" ExeCommand="&quot;[System64Folder]inetsrv\appcmd.exe&quot; clear config -section:&quot;system.webServer/ModSecurity&quot;" />
<CustomAction Id="Cleanup2" Execute="deferred" Impersonate="no" Return="ignore" Directory="INSTALLFOLDER" ExeCommand="&quot;[System64Folder]inetsrv\appcmd.exe&quot; uninstall module /module.name:&quot;ModSecurity IIS (32bits)&quot;" />
<CustomAction Id="Cleanup3" Execute="deferred" Impersonate="no" Return="ignore" Directory="INSTALLFOLDER" ExeCommand="&quot;[System64Folder]inetsrv\appcmd.exe&quot; uninstall module /module.name:&quot;ModSecurity IIS (64bits)&quot;" />
<CustomAction Id="Cleanup4" Execute="deferred" Impersonate="no" Return="ignore" Directory="INSTALLFOLDER" ExeCommand="&quot;[System64Folder]inetsrv\appcmd.exe&quot; uninstall module /module.name:&quot;ModSecurity IIS&quot;" />
<CustomAction Id="Cleanup5" Execute="deferred" Impersonate="no" Return="ignore" Directory="INSTALLFOLDER" ExeCommand="&quot;[System64Folder]inetsrv\appcmd.exe&quot; uninstall module /module.name:&quot;ModSecurityIIS&quot;" />
<?else?>
<CustomAction Id="Cleanup1" Execute="deferred" Impersonate="no" Return="ignore" Directory="INSTALLFOLDER" ExeCommand="&quot;[SystemFolder]inetsrv\appcmd.exe&quot; clear config -section:&quot;system.webServer/ModSecurity&quot;" />
<CustomAction Id="Cleanup2" Execute="deferred" Impersonate="no" Return="ignore" Directory="INSTALLFOLDER" ExeCommand="&quot;[SystemFolder]inetsrv\appcmd.exe&quot; uninstall module /module.name:&quot;ModSecurity IIS (32bits)&quot;" />
<CustomAction Id="Cleanup3" Execute="deferred" Impersonate="no" Return="ignore" Directory="INSTALLFOLDER" ExeCommand="&quot;[SystemFolder]inetsrv\appcmd.exe&quot; uninstall module /module.name:&quot;ModSecurity IIS (64bits)&quot;" />
<CustomAction Id="Cleanup4" Execute="deferred" Impersonate="no" Return="ignore" Directory="INSTALLFOLDER" ExeCommand="&quot;[SystemFolder]inetsrv\appcmd.exe&quot; uninstall module /module.name:&quot;ModSecurity IIS&quot;" />
<CustomAction Id="Cleanup5" Execute="deferred" Impersonate="no" Return="ignore" Directory="INSTALLFOLDER" ExeCommand="&quot;[SystemFolder]inetsrv\appcmd.exe&quot; uninstall module /module.name:&quot;ModSecurityIIS&quot;" />
<?endif?>
<?if $(var.Win64) = "yes" ?>
<CustomAction Id="InstallModule32" Execute="deferred" Impersonate="no" Return="check" Directory="INSTALLFOLDER" ExeCommand="&quot;[System64Folder]inetsrv\appcmd.exe&quot; install module /name:&quot;ModSecurity IIS (64bits)&quot; /image:&quot;%SystemRoot%\System32\inetsrv\ModSecurityIIS.dll&quot; /preCondition:&quot;bitness64&quot;" />
<CustomAction Id="InstallModule64" Execute="deferred" Impersonate="no" Return="check" Directory="INSTALLFOLDER" ExeCommand="&quot;[System64Folder]inetsrv\appcmd.exe&quot; install module /name:&quot;ModSecurity IIS (32bits)&quot; /image:&quot;%SystemRoot%\SysWOW64\inetsrv\ModSecurityIIS.dll&quot; /preCondition:&quot;bitness32&quot;" />
<?else?>
<CustomAction Id="InstallModule32" Execute="deferred" Impersonate="no" Return="check" Directory="INSTALLFOLDER" ExeCommand="&quot;[SystemFolder]inetsrv\appcmd.exe&quot; install module /name:&quot;ModSecurity IIS (32bits)&quot; /image:&quot;%SystemRoot%\System32\inetsrv\ModSecurityIIS.dll&quot;" />
<?endif?>
<?if $(var.Win64) = "yes" ?>
<CustomAction Id="UninstallModule32" Execute="deferred" Impersonate="no" Return="check" Directory="INSTALLFOLDER" ExeCommand="&quot;[System64Folder]inetsrv\appcmd.exe&quot; uninstall module /module.name:&quot;ModSecurity IIS (32bits)&quot;" />
<CustomAction Id="UninstallModule64" Execute="deferred" Impersonate="no" Return="check" Directory="INSTALLFOLDER" ExeCommand="&quot;[System64Folder]inetsrv\appcmd.exe&quot; uninstall module /module.name:&quot;ModSecurity IIS (64bits)&quot;" />
<?else?>
<CustomAction Id="UninstallModule32" Execute="deferred" Impersonate="no" Return="check" Directory="INSTALLFOLDER" ExeCommand="&quot;[SystemFolder]inetsrv\appcmd.exe&quot; uninstall module /module.name:&quot;ModSecurity IIS (32bits)&quot;" />
<?endif?>
<?if $(var.Win64) = "yes" ?>
<CustomAction Id="InstallConf" Execute="deferred" Impersonate="no" Return="check" Directory="INSTALLFOLDER" ExeCommand="&quot;[System64Folder]inetsrv\appcmd.exe&quot; set config /section:&quot;system.webServer/ModSecurity&quot; /&quot;enabled:true&quot; /&quot;configFile:[INSTALLFOLDER]modsecurity_iis.conf&quot;" />
<?else?>
<CustomAction Id="InstallConf" Execute="deferred" Impersonate="no" Return="check" Directory="INSTALLFOLDER" ExeCommand="&quot;[SystemFolder]inetsrv\appcmd.exe&quot; set config /section:&quot;system.webServer/ModSecurity&quot; /&quot;enabled:true&quot; /&quot;configFile:[INSTALLFOLDER]modsecurity_iis.conf&quot;" />
<?endif?>
<?if $(var.Win64) = "yes" ?>
<CustomAction Id="UninstallConf" Execute="deferred" Impersonate="no" Return="check" Directory="INSTALLFOLDER" ExeCommand="&quot;[System64Folder]inetsrv\appcmd.exe&quot; clear config -section:&quot;system.webServer/ModSecurity&quot;" />
<?else?>
<CustomAction Id="UninstallConf" Execute="deferred" Impersonate="no" Return="check" Directory="INSTALLFOLDER" ExeCommand="&quot;[SystemFolder]inetsrv\appcmd.exe&quot; clear config -section:&quot;system.webServer/ModSecurity&quot;" />
<?endif?>
<DirectoryRef Id="TARGETDIR">
<?if $(var.Win64) = "yes" ?>
<Merge Id="VCRedist120_64" SourceFile="wix\Microsoft_VC120_CRT_x64.msm" DiskId="1" Language="0" />
<Merge Id="VCRedist110_64" SourceFile="wix\Microsoft_VC110_CRT_x64.msm" DiskId="1" Language="0" />
<Merge Id="VCRedist120_32" SourceFile="wix\Microsoft_VC120_CRT_x86.msm" DiskId="1" Language="0" />
<Merge Id="VCRedist110_32" SourceFile="wix\Microsoft_VC110_CRT_x86.msm" DiskId="1" Language="0" />
<?else?>
<Merge Id="VCRedist120_32" SourceFile="wix\Microsoft_VC120_CRT_x86.msm" DiskId="1" Language="0" />
<Merge Id="VCRedist110_32" SourceFile="wix\Microsoft_VC110_CRT_x86.msm" DiskId="1" Language="0" />
<?endif?>
</DirectoryRef>
</Product>
</Wix>