This commit is contained in:
alexY 2015-04-28 10:53:23 +03:00
commit ea0d9a0cbd
228 changed files with 67465 additions and 2202 deletions

View file

@ -3,7 +3,7 @@
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform> <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>3.7</ProductVersion> <ProductVersion>3.9</ProductVersion>
<ProjectGuid>{ead7c528-ea3d-40e8-9688-9f1d8dc8d758}</ProjectGuid> <ProjectGuid>{ead7c528-ea3d-40e8-9688-9f1d8dc8d758}</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion> <SchemaVersion>2.0</SchemaVersion>
<OutputName>Websitepanel-SchedulerService</OutputName> <OutputName>Websitepanel-SchedulerService</OutputName>
@ -49,4 +49,4 @@
<Target Name="AfterBuild"> <Target Name="AfterBuild">
</Target> </Target>
--> -->
</Project> </Project>

View file

@ -3,7 +3,7 @@
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform> <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>3.7</ProductVersion> <ProductVersion>3.9</ProductVersion>
<ProjectGuid>f963a4af-cc72-4512-b636-829345c35318</ProjectGuid> <ProjectGuid>f963a4af-cc72-4512-b636-829345c35318</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion> <SchemaVersion>2.0</SchemaVersion>
<OutputName>WebsitePanelInstaller</OutputName> <OutputName>WebsitePanelInstaller</OutputName>
@ -91,4 +91,4 @@
<Target Name="AfterBuild"> <Target Name="AfterBuild">
</Target> </Target>
--> -->
</Project> </Project>

View file

@ -1,6 +1,8 @@
"%WIX%\bin\heat.exe" dir ..\..\WebsitePanel\Build\Release\EnterpriseServer -o Setup.WIXInstaller\EnterpriseServerFiles.wxs -gg -sreg -srd -var wix.BUILDESPATH -cg EnterpriseServerFiles -dr INSTALLENTERPRISESERVERFOLDER "%WIX%\bin\heat.exe" dir ..\..\WebsitePanel\Build\debug\EnterpriseServer -o Setup.WIXInstaller\EnterpriseServerFiles.wxs -gg -sreg -srd -var wix.BUILDESPATH -cg EnterpriseServerFiles -dr INSTALLENTERPRISESERVERFOLDER
"%WIX%\bin\heat.exe" dir ..\..\WebsitePanel\Build\Release\Server -o Setup.WIXInstaller\ServerFiles.wxs -gg -sreg -srd -var wix.BUILDSPATH -cg ServerFiles -dr INSTALLSERVERFOLDER "%WIX%\bin\heat.exe" dir ..\..\WebsitePanel\Build\debug\Server -o Setup.WIXInstaller\ServerFiles.wxs -gg -sreg -srd -var wix.BUILDSPATH -cg ServerFiles -dr INSTALLSERVERFOLDER
"%WIX%\bin\heat.exe" dir ..\..\WebsitePanel\Build\Release\Portal -o Setup.WIXInstaller\PortalFiles.wxs -gg -sreg -srd -var wix.BUILDPPATH -cg PortalFiles -dr INSTALLPORTALFOLDER "%WIX%\bin\heat.exe" dir ..\..\WebsitePanel\Build\debug\Portal -o Setup.WIXInstaller\PortalFiles.wxs -gg -sreg -srd -var wix.BUILDPPATH -cg PortalFiles -dr INSTALLPORTALFOLDER
"%WIX%\bin\heat.exe" dir ..\..\WebsitePanel\Build\debug\WebDavPortal -o Setup.WIXInstaller\WebDavPortalFiles.wxs -gg -sreg -srd -var wix.BUILDWDPPATH -cg WebDavPortalFiles -dr INSTALLWEBDAVPORTALFOLDER

View file

@ -1,5 +1,14 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Include> <Include>
<?define PROJECTPATH = "..\..\..\WebsitePanel"?> <?define PROJECTPATH = "..\..\..\WebsitePanel"?>
<?define VERSION="2.1"?> <?define NAME="WebsitePanel"?>
<?define ServerTitle="Server"?>
<?define ServerDescription="WebsitePanel Server is a set of services running on the remote server to be controlled. Server application should be reachable from Enterprise Server one."?>
<?define EServerTitle="Enterprise Server"?>
<?define EServerDescription="Enterprise Server is the heart of WebsitePanel system. It includes all business logic of the application. Enterprise Server should have access to Server and be accessible from Portal applications."?>
<?define PortalTitle="Portal"?>
<?define PortalDescription="WebsitePanel Portal is a control panel itself with user interface which allows managing user accounts, hosting spaces, web sites, FTP accounts, files, etc."?>
<?define VERSION="$(var.Version)"?>
<?define sql_release_version = "$(var.Version)"?> <!--N'${release.version}'-->
<?define sql_build_date = "$(var.BuildDate)"?> <!-- '${release.date}T00:00:00' - ISO 8601 Format (YYYY-MM-DDTHH:MM:SS) -->
</Include> </Include>

View file

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
<copyright file="VerifyReadyDlg.wxs" company="Outercurve Foundation">
Copyright (c) 2004, Outercurve Foundation.
This software is released under Microsoft Reciprocal License (MS-RL).
The license and further copyright text can be found in the file
LICENSE.TXT at the root directory of the distribution.
</copyright>
-->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<UI>
<Dialog Id="CustomVerifyReadyDlg" Width="370" Height="270" Title="!(loc.VerifyReadyDlg_Title)" TrackDiskSpace="yes">
<Control Id="Install" Type="PushButton" ElevationShield="yes" X="212" Y="243" Width="80" Height="17" Default="yes" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgInstall)">
<Condition Action="show">NOT Installed AND ALLUSERS</Condition>
<Condition Action="enable">NOT Installed</Condition>
<Condition Action="default">NOT Installed</Condition>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control>
<Control Id="InstallNoShield" Type="PushButton" ElevationShield="no" X="212" Y="243" Width="80" Height="17" Default="yes" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgInstall)">
<Condition Action="show">NOT Installed AND NOT ALLUSERS</Condition>
<Condition Action="enable">NOT Installed</Condition>
<Condition Action="default">NOT Installed</Condition>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control>
<Control Id="Change" Type="PushButton" ElevationShield="yes" X="212" Y="243" Width="80" Height="17" Default="yes" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgChange)">
<Condition Action="show">WixUI_InstallMode = "Change" AND ALLUSERS AND (ADDLOCAL OR REMOVE)</Condition>
<Condition Action="enable">WixUI_InstallMode = "Change"</Condition>
<Condition Action="default">WixUI_InstallMode = "Change"</Condition>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control>
<Control Id="ChangeNoShield" Type="PushButton" ElevationShield="no" X="212" Y="243" Width="80" Height="17" Default="yes" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgChange)">
<Condition Action="show">WixUI_InstallMode = "Change" AND (NOT ALLUSERS OR (NOT ADDLOCAL AND NOT REMOVE))</Condition>
<Condition Action="enable">WixUI_InstallMode = "Change"</Condition>
<Condition Action="default">WixUI_InstallMode = "Change"</Condition>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control>
<Control Id="Repair" Type="PushButton" X="212" Y="243" Width="80" Height="17" Default="yes" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgRepair)">
<Condition Action="show">WixUI_InstallMode = "Repair"</Condition>
<Condition Action="enable">WixUI_InstallMode = "Repair"</Condition>
<Condition Action="default">WixUI_InstallMode = "Repair"</Condition>
<Publish Event="ReinstallMode" Value="ecmus"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="Reinstall" Value="All"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control>
<Control Id="Remove" Type="PushButton" ElevationShield="yes" X="212" Y="243" Width="80" Height="17" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgRemove)">
<Condition Action="show">WixUI_InstallMode = "Remove" AND ALLUSERS</Condition>
<Condition Action="enable">WixUI_InstallMode = "Remove"</Condition>
<Publish Event="Remove" Value="All"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control>
<Control Id="RemoveNoShield" Type="PushButton" ElevationShield="no" X="212" Y="243" Width="80" Height="17" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgRemove)">
<Condition Action="show">WixUI_InstallMode = "Remove" AND NOT ALLUSERS</Condition>
<Condition Action="enable">WixUI_InstallMode = "Remove"</Condition>
<Publish Event="Remove" Value="All"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control>
<Control Id="Update" Type="PushButton" ElevationShield="yes" X="212" Y="243" Width="80" Height="17" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgUpdate)">
<Condition Action="show">WixUI_InstallMode = "Update" AND ALLUSERS</Condition>
<Condition Action="enable">WixUI_InstallMode = "Update"</Condition>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control>
<Control Id="UpdateNoShield" Type="PushButton" ElevationShield="no" X="212" Y="243" Width="80" Height="17" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgUpdate)">
<Condition Action="show">WixUI_InstallMode = "Update" AND NOT ALLUSERS</Condition>
<Condition Action="enable">WixUI_InstallMode = "Update"</Condition>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control>
<Control Id="InstallTitle" Type="Text" X="15" Y="15" Width="300" Height="15" Transparent="yes" NoPrefix="yes" Hidden="yes" Text="!(loc.VerifyReadyDlgInstallTitle)">
<Condition Action="show">NOT Installed</Condition>
</Control>
<Control Id="InstallText" Type="Text" X="25" Y="70" Width="320" Height="160" Hidden="yes" Text="!(loc.VerifyReadyDlgInstallText)&#13;&#10;&#13;&#10;[CUSTOM_INSTALL_TEXT]" Transparent="yes">
<Condition Action="show">NOT Installed</Condition>
</Control>
<Control Id="ChangeTitle" Type="Text" X="15" Y="15" Width="300" Height="15" Transparent="yes" NoPrefix="yes" Hidden="yes" Text="!(loc.VerifyReadyDlgChangeTitle)">
<Condition Action="show">WixUI_InstallMode = "Change"</Condition>
</Control>
<Control Id="ChangeText" Type="Text" X="25" Y="70" Width="320" Height="80" Hidden="yes" Text="!(loc.VerifyReadyDlgChangeText)">
<Condition Action="show">WixUI_InstallMode = "Change"</Condition>
</Control>
<Control Id="RepairTitle" Type="Text" X="15" Y="15" Width="300" Height="15" Transparent="yes" NoPrefix="yes" Hidden="yes" Text="!(loc.VerifyReadyDlgRepairTitle)">
<Condition Action="show">WixUI_InstallMode = "Repair"</Condition>
</Control>
<Control Id="RepairText" Type="Text" X="25" Y="70" Width="320" Height="80" Hidden="yes" NoPrefix="yes" Text="!(loc.VerifyReadyDlgRepairText)">
<Condition Action="show">WixUI_InstallMode = "Repair"</Condition>
</Control>
<Control Id="RemoveTitle" Type="Text" X="15" Y="15" Width="300" Height="15" Transparent="yes" NoPrefix="yes" Hidden="yes" Text="!(loc.VerifyReadyDlgRemoveTitle)">
<Condition Action="show">WixUI_InstallMode = "Remove"</Condition>
</Control>
<Control Id="RemoveText" Type="Text" X="25" Y="70" Width="320" Height="80" Hidden="yes" NoPrefix="yes" Text="!(loc.VerifyReadyDlgRemoveText)">
<Condition Action="show">WixUI_InstallMode = "Remove"</Condition>
</Control>
<Control Id="UpdateTitle" Type="Text" X="15" Y="15" Width="300" Height="15" Transparent="yes" NoPrefix="yes" Hidden="yes" Text="!(loc.VerifyReadyDlgUpdateTitle)">
<Condition Action="show">WixUI_InstallMode = "Update"</Condition>
</Control>
<Control Id="UpdateText" Type="Text" X="25" Y="70" Width="320" Height="80" Hidden="yes" NoPrefix="yes" Text="!(loc.VerifyReadyDlgUpdateText)">
<Condition Action="show">WixUI_InstallMode = "Update"</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="Back" Type="PushButton" X="156" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)">
<Condition Action="default">WixUI_InstallMode = "Remove"</Condition>
</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" />
</Dialog>
</UI>
</Fragment>
</Wix>

File diff suppressed because it is too large Load diff

View file

@ -3,7 +3,7 @@
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform> <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>3.7</ProductVersion> <ProductVersion>3.9</ProductVersion>
<ProjectGuid>{978f0a18-7c81-4561-8f6d-5a165484ad0a}</ProjectGuid> <ProjectGuid>{978f0a18-7c81-4561-8f6d-5a165484ad0a}</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion> <SchemaVersion>2.0</SchemaVersion>
<OutputName>Websitepanel</OutputName> <OutputName>Websitepanel</OutputName>
@ -14,35 +14,50 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<OutputPath>bin\</OutputPath> <OutputPath>bin\</OutputPath>
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath> <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
<DefineConstants>Debug;BUILD=debug</DefineConstants> <DefineConstants>Debug;BUILD=debug;Version=$(Version);BuildDate=$(ReleaseDate)</DefineConstants>
<SuppressValidation>False</SuppressValidation> <SuppressValidation>False</SuppressValidation>
<SuppressIces> <SuppressIces>
</SuppressIces> </SuppressIces>
<CompilerAdditionalOptions> <CompilerAdditionalOptions>
</CompilerAdditionalOptions> </CompilerAdditionalOptions>
<LinkerAdditionalOptions> <LinkerAdditionalOptions>
</LinkerAdditionalOptions> </LinkerAdditionalOptions>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputPath>bin\$(Configuration)\</OutputPath> <OutputPath>bin\$(Configuration)\</OutputPath>
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath> <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
<DefineConstants>BUILD=release</DefineConstants> <DefineConstants>BUILD=release;Version=$(Version);BuildDate=$(ReleaseDate)</DefineConstants>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Compile Include="EnterpriseServerFiles.wxs" /> <Compile Include="CustomVerifyReadyDlg.wxs" />
<Compile Include="PortalFiles.wxs" />
<Compile Include="Product.wxs" /> <Compile Include="Product.wxs" />
<Compile Include="SchedulerServiceFiles.wxs" /> <Compile Include="SchedulerServiceFiles.wxs" />
<Compile Include="ServerFiles.wxs" /> <Compile Include="..\..\..\WebsitePanel\Build\$(Configuration)\WiXInstaller\ComponentsFiles\ServerFiles.wxs" />
<Compile Include="..\..\..\WebsitePanel\Build\$(Configuration)\WiXInstaller\ComponentsFiles\EnterpriseServerFiles.wxs" />
<Compile Include="..\..\..\WebsitePanel\Build\$(Configuration)\WiXInstaller\ComponentsFiles\PortalFiles.wxs" />
<Compile Include="..\..\..\WebsitePanel\Build\$(Configuration)\WiXInstaller\ComponentsFiles\WebDavPortalFiles.wxs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="Config.wxi" /> <Content Include="Config.wxi" />
<Content Include="WebsitePanel.config" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<WixExtension Include="WixUIExtension"> <WixExtension Include="WixUIExtension">
<HintPath>..\..\..\tools\WIX\WixUIExtension.dll</HintPath> <HintPath>..\..\..\tools\WIX\WixUIExtension.dll</HintPath>
<Name>WixUIExtension</Name> <Name>WixUIExtension</Name>
</WixExtension> </WixExtension>
<WixExtension Include="WixIIsExtension">
<HintPath>..\..\..\tools\WIX\WixIIsExtension.dll</HintPath>
<Name>WixIIsExtension</Name>
</WixExtension>
<WixExtension Include="WixSqlExtension">
<HintPath>..\..\..\tools\WIX\WixSqlExtension.dll</HintPath>
<Name>WixSqlExtension</Name>
</WixExtension>
<WixExtension Include="WixUtilExtension">
<HintPath>..\..\..\tools\WIX\WixUtilExtension.dll</HintPath>
<Name>WixUtilExtension</Name>
</WixExtension>
</ItemGroup> </ItemGroup>
<Import Project="$(WixTargetsPath)" /> <Import Project="$(WixTargetsPath)" />
<!-- <!--
@ -53,4 +68,4 @@
<Target Name="AfterBuild"> <Target Name="AfterBuild">
</Target> </Target>
--> -->
</Project> </Project>

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="installer" type="WebsitePanel.Installer.Configuration.InstallerSection, WebsitePanel.Installer.Core"/>
</configSections>
<installer>
<!-- Installed components -->
<components/>
<!-- Studio settings -->
<settings>
<add key="Log.FileName" value="WebsitePanel.Installer.log" />
<add key="Web.Service" value="" />
<add key="Web.AutoCheck" value="False" />
<add key="Web.Proxy.UseProxy" value="false" />
<add key="Web.Proxy.Address" value="" />
<add key="Web.Proxy.UserName" value="" />
<add key="Web.Proxy.Password" value="" />
</settings>
</installer>
</configuration>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:4.0.30319.18051 // Runtime Version:4.0.30319.34209
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.

View file

@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013 # Visual Studio 2013
VisualStudioVersion = 12.0.30723.0 VisualStudioVersion = 12.0.31101.0
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{129305D5-A9E6-4DCE-BFF6-41809E13EEEE}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{129305D5-A9E6-4DCE-BFF6-41809E13EEEE}"
ProjectSection(SolutionItems) = preProject ProjectSection(SolutionItems) = preProject
@ -33,6 +33,13 @@ Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Setup.SchedulerService", "S
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.SchedulerServiceInstaller", "WebsitePanel.SchedulerServiceInstaller\WebsitePanel.SchedulerServiceInstaller.csproj", "{24A4C231-73A9-4F03-ABAD-9A8FE5324495}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.SchedulerServiceInstaller", "WebsitePanel.SchedulerServiceInstaller\WebsitePanel.SchedulerServiceInstaller.csproj", "{24A4C231-73A9-4F03-ABAD-9A8FE5324495}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.WIXInstaller", "WebsitePanel.WIXInstaller\WebsitePanel.WIXInstaller.csproj", "{3343FFD8-7CCE-451B-95AE-3D97244313A2}"
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Setup.WIXInstaller", "Setup.WIXInstaller\Setup.WIXInstaller.wixproj", "{978F0A18-7C81-4561-8F6D-5A165484AD0A}"
ProjectSection(ProjectDependencies) = postProject
{3343FFD8-7CCE-451B-95AE-3D97244313A2} = {3343FFD8-7CCE-451B-95AE-3D97244313A2}
EndProjectSection
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -125,6 +132,26 @@ Global
{24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|Mixed Platforms.Build.0 = Release|x86 {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|Mixed Platforms.Build.0 = Release|x86
{24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|x86.ActiveCfg = Release|x86 {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|x86.ActiveCfg = Release|x86
{24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|x86.Build.0 = Release|x86 {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|x86.Build.0 = Release|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Debug|Any CPU.ActiveCfg = Debug|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Debug|Mixed Platforms.Build.0 = Debug|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Debug|x86.ActiveCfg = Debug|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Debug|x86.Build.0 = Debug|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Release|Any CPU.ActiveCfg = Release|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Release|Mixed Platforms.ActiveCfg = Release|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Release|Mixed Platforms.Build.0 = Release|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Release|x86.ActiveCfg = Release|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Release|x86.Build.0 = Release|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Debug|Any CPU.ActiveCfg = Debug|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Debug|Mixed Platforms.Build.0 = Debug|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Debug|x86.ActiveCfg = Debug|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Debug|x86.Build.0 = Debug|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Release|Any CPU.ActiveCfg = Release|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Release|Mixed Platforms.ActiveCfg = Release|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Release|Mixed Platforms.Build.0 = Release|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Release|x86.ActiveCfg = Release|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Release|x86.Build.0 = Release|x86
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View file

@ -67,37 +67,21 @@ namespace WebsitePanel.Setup.Actions
{ {
OnInstallProgressChanged(LogStartInstallMessage, 0); OnInstallProgressChanged(LogStartInstallMessage, 0);
Log.WriteStart(LogStartInstallMessage); Log.WriteStart(LogStartInstallMessage);
var file = Path.Combine(vars.InstallationFolder, vars.ConfigurationFile);
var file = Path.Combine(vars.InstallationFolder, vars.ConfigurationFile); vars.CryptoKey = Utils.GetRandomString(20);
vars.CryptoKey = Utils.GetRandomString(20); var Xml = new XmlDocument();
Xml.Load(file);
// load file var CryptoNode = Xml.SelectSingleNode("configuration/appSettings/add[@key='WebsitePanel.CryptoKey']") as XmlElement;
string content = string.Empty; if (CryptoNode != null)
using (StreamReader reader = new StreamReader(file)) CryptoNode.SetAttribute("value", vars.CryptoKey);
{ Xml.Save(file);
content = reader.ReadToEnd();
}
// expand variables
content = Utils.ReplaceScriptVariable(content, "installer.cryptokey", vars.CryptoKey);
//
Log.WriteInfo(String.Format("The following cryptographic key has been generated: '{0}'", vars.CryptoKey));
// save file
using (StreamWriter writer = new StreamWriter(file))
{
writer.Write(content);
}
//update log
Log.WriteEnd(LogEndInstallMessage); Log.WriteEnd(LogEndInstallMessage);
} }
catch (Exception ex) catch (Exception ex)
{ {
if (Utils.IsThreadAbortException(ex)) if (Utils.IsThreadAbortException(ex))
return; return;
//
Log.WriteError("Update web.config error", ex); Log.WriteError("Update web.config error", ex);
//
throw; throw;
} }
} }
@ -116,6 +100,10 @@ namespace WebsitePanel.Setup.Actions
Begin(LogStartInstallMessage); Begin(LogStartInstallMessage);
Log.WriteStart(LogStartInstallMessage); Log.WriteStart(LogStartInstallMessage);
var ServiceName = Global.Parameters.SchedulerServiceName;
var ServiceFile = Path.Combine(vars.InstallationFolder, "bin", Global.Parameters.SchedulerServiceFileName);
Log.WriteInfo(String.Format("Scheduler Service Name: \"{0}\"", Global.Parameters.SchedulerServiceName)); Log.WriteInfo(String.Format("Scheduler Service Name: \"{0}\"", Global.Parameters.SchedulerServiceName));
if (ServiceController.GetServices().Any(s => s.DisplayName.Equals(Global.Parameters.SchedulerServiceName, StringComparison.CurrentCultureIgnoreCase))) if (ServiceController.GetServices().Any(s => s.DisplayName.Equals(Global.Parameters.SchedulerServiceName, StringComparison.CurrentCultureIgnoreCase)))
@ -125,8 +113,13 @@ namespace WebsitePanel.Setup.Actions
return; return;
} }
ManagedInstallerClass.InstallHelper(new[] { "/i", Path.Combine(vars.InstallationFolder, "bin", Global.Parameters.SchedulerServiceFileName) }); ManagedInstallerClass.InstallHelper(new[] { "/i /LogFile=\"\" ", ServiceFile });
Utils.StartService(Global.Parameters.SchedulerServiceName); Utils.StartService(Global.Parameters.SchedulerServiceName);
AppConfig.EnsureComponentConfig(vars.ComponentId);
AppConfig.SetComponentSettingStringValue(vars.ComponentId, "ServiceName", ServiceName);
AppConfig.SetComponentSettingStringValue(vars.ComponentId, "ServiceFile", ServiceFile);
AppConfig.SaveConfiguration();
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -166,7 +159,7 @@ namespace WebsitePanel.Setup.Actions
{ {
if (ServiceController.GetServices().Any(s => s.ServiceName.Equals(Global.Parameters.SchedulerServiceName, StringComparison.CurrentCultureIgnoreCase))) if (ServiceController.GetServices().Any(s => s.ServiceName.Equals(Global.Parameters.SchedulerServiceName, StringComparison.CurrentCultureIgnoreCase)))
{ {
ManagedInstallerClass.InstallHelper(new[] { "/u", Path.Combine(vars.InstallationFolder, "bin", Global.Parameters.SchedulerServiceFileName) }); ManagedInstallerClass.InstallHelper(new[] { "/u /LogFile=\"\" ", Path.Combine(vars.InstallationFolder, "bin", Global.Parameters.SchedulerServiceFileName) });
} }
} }
} }
@ -397,25 +390,14 @@ namespace WebsitePanel.Setup.Actions
void IInstallAction.Run(SetupVariables vars) void IInstallAction.Run(SetupVariables vars)
{ {
Log.WriteStart("Updating web.config file (connection string)"); Log.WriteStart("Updating web.config file (connection string)");
//
var file = Path.Combine(vars.InstallationFolder, vars.ConfigurationFile); var file = Path.Combine(vars.InstallationFolder, vars.ConfigurationFile);
//
var content = String.Empty;
// load file
using (StreamReader reader = new StreamReader(file))
{
content = reader.ReadToEnd();
}
// Build connection string
vars.ConnectionString = String.Format(vars.ConnectionString, vars.DatabaseServer, vars.Database, vars.Database, vars.DatabaseUserPassword); vars.ConnectionString = String.Format(vars.ConnectionString, vars.DatabaseServer, vars.Database, vars.Database, vars.DatabaseUserPassword);
// Expand variables var Xml = new XmlDocument();
content = Utils.ReplaceScriptVariable(content, "installer.connectionstring", vars.ConnectionString); Xml.Load(file);
// Save file var ConnNode = Xml.SelectSingleNode("configuration/connectionStrings/add[@name='EnterpriseServer']") as XmlElement;
using (StreamWriter writer = new StreamWriter(file)) if(ConnNode != null)
{ ConnNode.SetAttribute("connectionString", vars.ConnectionString);
writer.Write(content); Xml.Save(file);
}
//
Log.WriteEnd(String.Format("Updated {0} file", vars.ConfigurationFile)); Log.WriteEnd(String.Format("Updated {0} file", vars.ConfigurationFile));
} }
} }
@ -509,10 +491,11 @@ namespace WebsitePanel.Setup.Actions
{ {
void IInstallAction.Run(SetupVariables vars) void IInstallAction.Run(SetupVariables vars)
{ {
Log.WriteStart("SaveEntServerConfigSettingsAction");
AppConfig.EnsureComponentConfig(vars.ComponentId); AppConfig.EnsureComponentConfig(vars.ComponentId);
// //
AppConfig.SetComponentSettingStringValue(vars.ComponentId, "Database", vars.Database); AppConfig.SetComponentSettingStringValue(vars.ComponentId, "Database", vars.Database);
AppConfig.SetComponentSettingBooleanValue(vars.ComponentId, "NewDatabase", true); AppConfig.SetComponentSettingBooleanValue(vars.ComponentId, "NewDatabase", vars.CreateDatabase);
// //
AppConfig.SetComponentSettingStringValue(vars.ComponentId, "DatabaseUser", vars.Database); AppConfig.SetComponentSettingStringValue(vars.ComponentId, "DatabaseUser", vars.Database);
AppConfig.SetComponentSettingBooleanValue(vars.ComponentId, "NewDatabaseUser", vars.NewDatabaseUser); AppConfig.SetComponentSettingBooleanValue(vars.ComponentId, "NewDatabaseUser", vars.NewDatabaseUser);
@ -523,6 +506,7 @@ namespace WebsitePanel.Setup.Actions
AppConfig.SetComponentSettingStringValue(vars.ComponentId, Global.Parameters.CryptoKey, vars.CryptoKey); AppConfig.SetComponentSettingStringValue(vars.ComponentId, Global.Parameters.CryptoKey, vars.CryptoKey);
// //
AppConfig.SaveConfiguration(); AppConfig.SaveConfiguration();
Log.WriteEnd("SaveEntServerConfigSettingsAction");
} }
} }

View file

@ -38,25 +38,27 @@ namespace WebsitePanel.Setup
public sealed class AppConfig public sealed class AppConfig
{ {
public const string AppConfigFileNameWithoutExtension = "WebsitePanel.Installer.exe"; public const string AppConfigFileNameWithoutExtension = "WebsitePanel.Installer.exe";
static AppConfig()
{
ConfigurationPath = DefaultConfigurationPath;
}
private AppConfig() private AppConfig()
{ {
} }
private static Configuration appConfig = null; private static Configuration appConfig = null;
private static XmlDocument xmlConfig = null; private static XmlDocument xmlConfig = null;
public static string ConfigurationPath { get; set; }
public static void LoadConfiguration() public static string DefaultConfigurationPath { get { return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, AppConfigFileNameWithoutExtension); } }
public static void LoadConfiguration(ExeConfigurationFileMap FnMap = null, ConfigurationUserLevel CuLevel = ConfigurationUserLevel.None)
{ {
// if (FnMap == null)
var exePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, AppConfigFileNameWithoutExtension); appConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationPath);
// else
appConfig = ConfigurationManager.OpenExeConfiguration(exePath); appConfig = ConfigurationManager.OpenMappedExeConfiguration(FnMap, CuLevel);
//
ConfigurationSection section = appConfig.Sections["installer"]; ConfigurationSection section = appConfig.Sections["installer"];
if (section == null) if (section == null)
throw new ConfigurationErrorsException("instalelr section not found"); throw new ConfigurationErrorsException("installer section not found in " + appConfig.FilePath);
string strXml = section.SectionInformation.GetRawXml(); string strXml = section.SectionInformation.GetRawXml();
xmlConfig = new XmlDocument(); xmlConfig = new XmlDocument();
xmlConfig.LoadXml(strXml); xmlConfig.LoadXml(strXml);

View file

@ -48,9 +48,9 @@ namespace WebsitePanel.Setup
/// <param name="bar">Progress bar.</param> /// <param name="bar">Progress bar.</param>
/// <param name="source">Source folder.</param> /// <param name="source">Source folder.</param>
/// <param name="destination">Destination folder.</param> /// <param name="destination">Destination folder.</param>
public CopyProcess(ProgressBar bar, string source, string destination) public CopyProcess(object bar, string source, string destination)
{ {
this.progressBar = bar; this.progressBar = bar as ProgressBar;
this.sourceFolder = new DirectoryInfo(source); this.sourceFolder = new DirectoryInfo(source);
this.destFolder = new DirectoryInfo(destination); this.destFolder = new DirectoryInfo(destination);
} }
@ -63,9 +63,13 @@ namespace WebsitePanel.Setup
// unzip // unzip
long totalSize = FileUtils.CalculateFolderSize(sourceFolder.FullName); long totalSize = FileUtils.CalculateFolderSize(sourceFolder.FullName);
long copied = 0; long copied = 0;
progressBar.Minimum = 0;
progressBar.Maximum = 100; if (progressBar != null)
progressBar.Value = 0; {
progressBar.Minimum = 0;
progressBar.Maximum = 100;
progressBar.Value = 0;
}
int i = 0; int i = 0;
List<DirectoryInfo> folders = new List<DirectoryInfo>(); List<DirectoryInfo> folders = new List<DirectoryInfo>();
@ -122,7 +126,10 @@ namespace WebsitePanel.Setup
copied += files[i].Length; copied += files[i].Length;
if (totalSize != 0) if (totalSize != 0)
{ {
progressBar.Value = Convert.ToInt32(copied * 100 / totalSize); if (progressBar != null)
{
progressBar.Value = Convert.ToInt32(copied * 100 / totalSize);
}
} }
} }
} }

View file

@ -170,5 +170,7 @@ namespace WebsitePanel.Setup
} }
catch { } catch { }
} }
public static TraceListenerCollection Listeners { get { return Trace.Listeners; } }
} }
} }

View file

@ -286,7 +286,8 @@ namespace WebsitePanel.Setup
Windows7, Windows7,
WindowsServer2008R2, WindowsServer2008R2,
Windows8, Windows8,
WindowsServer2012 WindowsServer2012,
WindowsServer2012R2
} }
public static string GetName(WindowsVersion version) public static string GetName(WindowsVersion version)
@ -428,6 +429,9 @@ namespace WebsitePanel.Setup
else else
ret = WindowsVersion.WindowsServer2012; ret = WindowsVersion.WindowsServer2012;
break; break;
case 3:
ret = WindowsVersion.WindowsServer2012R2;
break;
} }
break; break;
} }

View file

@ -338,8 +338,8 @@ namespace WebsitePanel.Setup
/// <param name="domain"></param> /// <param name="domain"></param>
/// <returns></returns> /// <returns></returns>
internal static string GetSid(string userAccount, string domain) internal static string GetSid(string userAccount, string domain)
{ {
if(domain == null) if(string.IsNullOrWhiteSpace(domain))
domain = Environment.MachineName; domain = Environment.MachineName;
// try to get user account // try to get user account

View file

@ -481,11 +481,11 @@ namespace WebsitePanel.Setup
public static void StopService(string serviceName) public static void StopService(string serviceName)
{ {
ServiceController sc = new ServiceController(serviceName); ServiceController sc = new ServiceController(serviceName);
// Start the service if the current status is stopped. // Stop the service if the current status is not stopped.
if (sc.Status != ServiceControllerStatus.Stopped && if (sc.Status != ServiceControllerStatus.Stopped &&
sc.Status != ServiceControllerStatus.StopPending) sc.Status != ServiceControllerStatus.StopPending)
{ {
// Start the service, and wait until its status is "Running". // Stop the service, and wait until its status is "Running".
sc.Stop(); sc.Stop();
sc.WaitForStatus(ServiceControllerStatus.Stopped); sc.WaitForStatus(ServiceControllerStatus.Stopped);
} }

View file

@ -150,7 +150,7 @@ namespace WebsitePanel.Setup
FileUtils.CreateDirectory(path); FileUtils.CreateDirectory(path);
SecurityUtils.GrantNtfsPermissions(path, userDomain, userAccount, NtfsPermission.Modify, true, true); SecurityUtils.GrantNtfsPermissions(path, userDomain, userAccount, NtfsPermission.Modify, true, true);
SecurityUtils.GrantNtfsPermissionsBySid(path, SystemSID.NETWORK_SERVICE, NtfsPermission.Modify, true, true); SecurityUtils.GrantNtfsPermissionsBySid(path, SystemSID.NETWORK_SERVICE, NtfsPermission.Modify, true, true);
} }
/// <summary> /// <summary>

View file

@ -46,9 +46,9 @@ namespace WebsitePanel.Setup.Common
int totalFiles = 0; int totalFiles = 0;
int files = 0; int files = 0;
public ZipIndicator(ProgressBar progressBar, string sourcePath, string zipFile) public ZipIndicator(object progressBar, string sourcePath, string zipFile)
{ {
this.progressBar = progressBar; this.progressBar = progressBar as ProgressBar;
this.sourcePath = sourcePath; this.sourcePath = sourcePath;
this.zipFile = zipFile; this.zipFile = zipFile;
} }
@ -71,8 +71,11 @@ namespace WebsitePanel.Setup.Common
{ {
string fileName = e.CurrentEntry.FileName; string fileName = e.CurrentEntry.FileName;
files++; files++;
this.progressBar.Value = Convert.ToInt32(files * 100 / totalFiles); if (this.progressBar != null)
this.progressBar.Update(); {
this.progressBar.Value = Convert.ToInt32(files * 100 / totalFiles);
this.progressBar.Update();
}
} }
} }
} }

File diff suppressed because it is too large Load diff

View file

@ -143,6 +143,7 @@
<Compile Include="Common\ZipIndicator.cs" /> <Compile Include="Common\ZipIndicator.cs" />
<Compile Include="EnterpriseServer10.cs" /> <Compile Include="EnterpriseServer10.cs" />
<Compile Include="EnterpriseServer20.cs" /> <Compile Include="EnterpriseServer20.cs" />
<Compile Include="Internal\Adapter.cs" />
<Compile Include="Portal10.cs" /> <Compile Include="Portal10.cs" />
<Compile Include="Portal20.cs" /> <Compile Include="Portal20.cs" />
<Compile Include="Server10.cs" /> <Compile Include="Server10.cs" />

View file

@ -127,13 +127,13 @@ namespace WebsitePanel.Setup
switch (check.CheckType) switch (check.CheckType)
{ {
case CheckTypes.OperationSystem: case CheckTypes.OperationSystem:
status = CheckOS(out details); status = CheckOS(check.SetupVariables, out details);
break; break;
case CheckTypes.IISVersion: case CheckTypes.IISVersion:
status = CheckIISVersion(out details); status = CheckIISVersion(check.SetupVariables, out details);
break; break;
case CheckTypes.ASPNET: case CheckTypes.ASPNET:
status = CheckASPNET(out details); status = CheckASPNET(check.SetupVariables, out details);
break; break;
case CheckTypes.WPServer: case CheckTypes.WPServer:
status = CheckWPServer(check.SetupVariables, out details); status = CheckWPServer(check.SetupVariables, out details);
@ -221,7 +221,7 @@ namespace WebsitePanel.Setup
} }
private CheckStatuses CheckOS(out string details) internal static CheckStatuses CheckOS(SetupVariables setupVariables, out string details)
{ {
details = string.Empty; details = string.Empty;
try try
@ -237,6 +237,7 @@ namespace WebsitePanel.Setup
version == OS.WindowsVersion.WindowsServer2008 || version == OS.WindowsVersion.WindowsServer2008 ||
version == OS.WindowsVersion.WindowsServer2008R2 || version == OS.WindowsVersion.WindowsServer2008R2 ||
version == OS.WindowsVersion.WindowsServer2012 || version == OS.WindowsVersion.WindowsServer2012 ||
version == OS.WindowsVersion.WindowsServer2012R2 ||
version == OS.WindowsVersion.WindowsVista || version == OS.WindowsVersion.WindowsVista ||
version == OS.WindowsVersion.Windows7 || version == OS.WindowsVersion.Windows7 ||
version == OS.WindowsVersion.Windows8 )) version == OS.WindowsVersion.Windows8 ))
@ -260,20 +261,20 @@ namespace WebsitePanel.Setup
return CheckStatuses.Error; return CheckStatuses.Error;
} }
} }
private CheckStatuses CheckIISVersion(out string details) internal static CheckStatuses CheckIISVersion(SetupVariables setupVariables, out string details)
{ {
details = string.Empty; details = string.Empty;
try try
{ {
details = string.Format("IIS {0}", SetupVariables.IISVersion.ToString(2)); details = string.Format("IIS {0}", setupVariables.IISVersion.ToString(2));
if (SetupVariables.IISVersion.Major == 6 && if (setupVariables.IISVersion.Major == 6 &&
Utils.IsWin64() && Utils.IIS32Enabled()) Utils.IsWin64() && Utils.IIS32Enabled())
{ {
details += " (32-bit mode)"; details += " (32-bit mode)";
} }
Log.WriteInfo(string.Format("IIS check: {0}", details)); Log.WriteInfo(string.Format("IIS check: {0}", details));
if (SetupVariables.IISVersion.Major < 6) if (setupVariables.IISVersion.Major < 6)
{ {
details = "IIS 6.0 or greater required."; details = "IIS 6.0 or greater required.";
Log.WriteError(string.Format("IIS check: {0}", details), null); Log.WriteError(string.Format("IIS check: {0}", details), null);
@ -291,26 +292,26 @@ namespace WebsitePanel.Setup
} }
} }
private CheckStatuses CheckASPNET(out string details) internal static CheckStatuses CheckASPNET(SetupVariables setupVariables, out string details)
{ {
details = "ASP.NET 4.0 is installed."; details = "ASP.NET 4.0 is installed.";
CheckStatuses ret = CheckStatuses.Success; CheckStatuses ret = CheckStatuses.Success;
try try
{ {
// IIS 6 // IIS 6
if (SetupVariables.IISVersion.Major == 6) if (setupVariables.IISVersion.Major == 6)
{ {
// //
if (Utils.CheckAspNet40Registered(SetupVariables) == false) if (Utils.CheckAspNet40Registered(setupVariables) == false)
{ {
// Register ASP.NET 4.0 // Register ASP.NET 4.0
Utils.RegisterAspNet40(SetupVariables); Utils.RegisterAspNet40(setupVariables);
// //
ret = CheckStatuses.Warning; ret = CheckStatuses.Warning;
details = AspNet40HasBeenInstalledMessage; details = AspNet40HasBeenInstalledMessage;
} }
// Enable ASP.NET 4.0 Web Server Extension if it is prohibited // Enable ASP.NET 4.0 Web Server Extension if it is prohibited
if (Utils.GetAspNetWebExtensionStatus_Iis6(SetupVariables) == WebExtensionStatus.Prohibited) if (Utils.GetAspNetWebExtensionStatus_Iis6(setupVariables) == WebExtensionStatus.Prohibited)
{ {
Utils.EnableAspNetWebExtension_Iis6(); Utils.EnableAspNetWebExtension_Iis6();
} }
@ -331,10 +332,10 @@ namespace WebsitePanel.Setup
return CheckStatuses.Error; return CheckStatuses.Error;
} }
// Register ASP.NET 4.0 // Register ASP.NET 4.0
if (Utils.CheckAspNet40Registered(SetupVariables) == false) if (Utils.CheckAspNet40Registered(setupVariables) == false)
{ {
// Register ASP.NET 4.0 // Register ASP.NET 4.0
Utils.RegisterAspNet40(SetupVariables); Utils.RegisterAspNet40(setupVariables);
// //
ret = CheckStatuses.Warning; ret = CheckStatuses.Warning;
details = AspNet40HasBeenInstalledMessage; details = AspNet40HasBeenInstalledMessage;
@ -359,17 +360,17 @@ namespace WebsitePanel.Setup
} }
} }
private CheckStatuses CheckIIS32Mode(out string details) internal static CheckStatuses CheckIIS32Mode(SetupVariables setupVariables, out string details)
{ {
details = string.Empty; details = string.Empty;
CheckStatuses ret = CheckIISVersion(out details); CheckStatuses ret = CheckIISVersion(setupVariables, out details);
if (ret == CheckStatuses.Error) if (ret == CheckStatuses.Error)
return ret; return ret;
try try
{ {
//IIS 6 //IIS 6
if (SetupVariables.IISVersion.Major == 6) if (setupVariables.IISVersion.Major == 6)
{ {
//x64 //x64
if (Utils.IsWin64()) if (Utils.IsWin64())

View file

@ -0,0 +1,35 @@
using System;
using System.Diagnostics;
using System.Text;
namespace WebsitePanel.WIXInstaller.Common
{
class InMemoryStringLogListener : TraceListener
{
private const string Format = "[{0}] Message: {1}";
static private StringBuilder m_Ctx;
string m_id;
static InMemoryStringLogListener()
{
m_Ctx = new StringBuilder();
}
public InMemoryStringLogListener(string InstanceID)
: base(InstanceID)
{
m_id = InstanceID;
}
public override void Write(string Value)
{
WriteLog(Value);
}
public override void WriteLine(string Value)
{
WriteLog(Value + Environment.NewLine);
}
[Conditional("DEBUG")]
private void WriteLog(string Value)
{
m_Ctx.Append(string.Format(Format, m_id, Value));
}
}
}

View file

@ -0,0 +1,19 @@
using System;
namespace WebsitePanel.WIXInstaller.Common
{
internal struct Prop
{
public const int REQ_IIS_MINIMUM = 6;
public const string REQ_LOG = "PI_PREREQ_LOG";
public const string REQ_OS = "PI_PREREQ_OS";
public const string REQ_IIS = "PI_PREREQ_IIS";
public const string REQ_IIS_MAJOR = "PI_PREREQ_IIS_MAJOR";
public const string REQ_IIS_MINOR = "PI_PREREQ_IIS_MINOR";
public const string REQ_ASPNET = "PI_PREREQ_ASPNET";
public const string REQ_SERVER = "PI_PREREQ_WP_SERVER";
public const string REQ_ESERVER = "PI_PREREQ_WP_ESERVER";
public const string REQ_PORTAL = "PI_PREREQ_WP_PORTAL";
public const string REQ_WDPORTAL = "PI_PREREQ_WP_WDPORTAL";
}
}

View file

@ -0,0 +1,36 @@
using Microsoft.Deployment.WindowsInstaller;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WebsitePanel.Setup;
namespace WebsitePanel.WIXInstaller.Common
{
internal static class Tool
{
public static SetupVariables GetSetupVars(Session Ctx)
{
return new SetupVariables
{
SetupAction = SetupActions.Install,
IISVersion = Global.IISVersion
};
}
public static void FillServerVariables(SetupVariables Vars)
{
}
public static void FillEServerVariables(SetupVariables Vars)
{
}
public static void FillPortalVariables(SetupVariables Vars)
{
}
}
}

View file

@ -0,0 +1,79 @@
using System;
using Microsoft.Deployment.WindowsInstaller;
namespace WebsitePanel.WIXInstaller.Common.Util
{
internal interface IListCtrl
{
ulong Count { get; }
string Id { get; }
void AddItem(Record Item);
}
internal abstract class ListCtrlBase : IListCtrl
{
private Session m_Ctx;
private string m_CtrlType;
private string m_CtrlId;
private View m_View;
private ulong m_Count;
public ListCtrlBase(Session session, string CtrlType, string CtrlId)
{
m_Ctx = session;
m_CtrlType = CtrlType;
m_CtrlId = CtrlId;
m_View = null;
m_Count = 0;
Initialize();
}
~ListCtrlBase()
{
if (m_View != null)
m_View.Close();
}
public virtual ulong Count { get { return m_Count; } }
public virtual string Id { get { return m_CtrlId; } }
public virtual void AddItem(Record Item)
{
m_View.Execute(Item);
++m_Count;
}
private void Initialize()
{
m_Ctx.Database.Execute(string.Format("DELETE FROM `{0}` WHERE `Property`='{1}'", m_CtrlType, m_CtrlId));
m_View = m_Ctx.Database.OpenView(m_Ctx.Database.Tables[m_CtrlType].SqlInsertString + " TEMPORARY");
}
}
class ListViewCtrl : ListCtrlBase
{
public ListViewCtrl(Session session, string WiXListID) : base(session, "ListView", WiXListID)
{
}
public void AddItem(bool Checked, string Value)
{
AddItem(new Record(new object[] { Id, Count, Value, Value, Checked ? "passmark" : "failmark" }));
}
}
class ComboBoxCtrl : ListCtrlBase
{
public ComboBoxCtrl(Session session, string WiXComboID): base(session, "ComboBox", WiXComboID)
{
}
public void AddItem(string Value)
{
AddItem(new Record(new object[] { Id, Count, Value, Value }));
}
}
}

View file

@ -0,0 +1,26 @@
using System;
using System.Diagnostics;
using Microsoft.Deployment.WindowsInstaller;
namespace WebsitePanel.WIXInstaller.Common
{
public class WiXLogListener : TraceListener
{
private Session m_Ctx;
public WiXLogListener(Session Ctx)
: base("WiXLogListener")
{
m_Ctx = Ctx;
}
public override void Write(string Value)
{
m_Ctx.Log(Value);
}
public override void WriteLine(string Value)
{
m_Ctx.Log(Value + Environment.NewLine);
}
}
}

View file

@ -0,0 +1,11 @@
using System;
namespace WebsitePanel.WIXInstaller.Common
{
internal struct YesNo
{
public static string Yes { get { return "1"; } }
public static string No { get { return "0"; } }
}
}

View file

@ -25,51 +25,244 @@
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Configuration.Install; using System.Configuration.Install;
using System.Data; using System.Data;
using System.Data.Sql;
using System.Data.SqlClient; using System.Data.SqlClient;
using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.ServiceProcess; using System.ServiceProcess;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
using System.Xml; using System.Xml;
using Microsoft.Deployment.WindowsInstaller; using Microsoft.Deployment.WindowsInstaller;
using WebsitePanel.Setup; using WebsitePanel.Setup;
using WebsitePanel.Setup.Internal;
using WebsitePanel.WIXInstaller.Common;
using WebsitePanel.WIXInstaller.Common.Util;
namespace WebsitePanel.WIXInstaller namespace WebsitePanel.WIXInstaller
{ {
public class CustomActions public class CustomActions
{ {
public static List<string> SysDb = new List<string> { "tempdb", "master", "model", "msdb" };
public const string CustomDataDelimiter = "-=del=-"; public const string CustomDataDelimiter = "-=del=-";
#region CustomActions
// Install.
[CustomAction] [CustomAction]
public static ActionResult CheckConnection(Session session) public static ActionResult OnServerInstall(Session session)
{ {
string testConnectionString = session["AUTHENTICATIONTYPE"].Equals("Windows Authentication") ? GetConnectionString(session["SERVERNAME"], "master") : GetConnectionString(session["SERVERNAME"], "master", session["LOGIN"], session["PASSWORD"]); PopUpDebugger();
return ProcessInstall(session, WiXInstallType.InstallServer);
if (CheckConnection(testConnectionString)) }
[CustomAction]
public static ActionResult OnEServerInstall(Session session)
{
PopUpDebugger();
return ProcessInstall(session, WiXInstallType.InstallEnterpriseServer);
}
[CustomAction]
public static ActionResult OnPortalInstall(Session session)
{
PopUpDebugger();
return ProcessInstall(session, WiXInstallType.InstallPortal);
}
// Remove.
[CustomAction]
public static ActionResult OnServerRemove(Session session)
{
PopUpDebugger();
return ProcessInstall(session, WiXInstallType.RemoveServer);
}
[CustomAction]
public static ActionResult OnEServerRemove(Session session)
{
PopUpDebugger();
return ProcessInstall(session, WiXInstallType.RemoveEnterpriseServer);
}
[CustomAction]
public static ActionResult OnPortalRemove(Session session)
{
PopUpDebugger();
return ProcessInstall(session, WiXInstallType.RemovePortal);
}
// Other.
[CustomAction]
public static ActionResult SetEServerUrlUI(Session session)
{
var Ctx = session;
Ctx["PI_ESERVER_URL"] = string.Format("http://{0}:{1}/", Ctx["PI_ESERVER_IP"], Ctx["PI_ESERVER_PORT"]);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult RecapListUI(Session session)
{
const string F_WSP = "WebsitePanel";
const string F_Server = "ServerFeature";
const string F_EServer = "EnterpriseServerFeature";
const string F_Portal = "PortalFeature";
const string F_Scheduler = "SchedulerServiceFeature";
const string F_WDPosrtal = "WDPortalFeature";
var S_Install = new List<string> { "Copy WebsitePanel Server files", "Add WebsitePanel Server website" };
var ES_Install = new List<string> { "Copy WebsitePanel Enterprise Server files", "Install WebsitePanel database and updates", "Add WebsitePanel Enterprise Server website" };
var P_Install = new List<string> { "Copy WebsitePanel Portal files", "Add WebsitePanel Enterprise Portal website" };
var SCH_Install = new List<string> { "Copy WebsitePanel Scheduler Service files", "Install Scheduler Service Windows Service" };
var WDP_Install = new List<string> { "Copy WebsitePanel WebDav Portal files" };
var S_Uninstall = new List<string> { "Delete WebsitePanel Server files", "Remove WebsitePanel Server website" };
var ES_Uninstall = new List<string> { "Delete WebsitePanel Enterprise Server files", "Keep WebsitePanel database and updates", "Remove WebsitePanel Enterprise Server website" };
var P_Uninstall = new List<string> { "Delete WebsitePanel Portal files", "Remove WebsitePanel Enterprise Portal website" };
var SCH_Uninstall = new List<string> { "Delete WebsitePanel Scheduler Service files", "Remove Scheduler Service Windows Service" };
var WDP_Uninstall = new List<string> { "Delete WebsitePanel WebDav Portal files" };
var RecapList = new List<string>();
var EmptyList = new List<string>();
var Ctx = session;
RecapListReset(Ctx);
foreach (var Feature in Ctx.Features)
{ {
session["CORRECTCONNECTION"] = "1"; switch (Feature.Name)
session["CONNECTIONSTRING"] = session["AUTHENTICATIONTYPE"].Equals("Windows Authentication") ? GetConnectionString(session["SERVERNAME"], session["DATABASENAME"]) : GetConnectionString(session["SERVERNAME"], session["DATABASENAME"], session["LOGIN"], session["PASSWORD"]); {
case F_WSP:
break;
case F_Server:
RecapList.AddRange(Feature.RequestState == InstallState.Local ? S_Install : /*S_Uninstall*/ EmptyList);
break;
case F_EServer:
RecapList.AddRange(Feature.RequestState == InstallState.Local ? ES_Install : /*ES_Uninstall*/ EmptyList);
break;
case F_Portal:
RecapList.AddRange(Feature.RequestState == InstallState.Local ? P_Install : /*P_Uninstall*/ EmptyList);
break;
case F_Scheduler:
RecapList.AddRange(Feature.RequestState == InstallState.Local ? SCH_Install : /*SCH_Uninstall*/ EmptyList);
break;
case F_WDPosrtal:
RecapList.AddRange(Feature.RequestState == InstallState.Local ? WDP_Install : /*WDP_Uninstall*/ EmptyList);
break;
default:
break;
}
} }
RecapListAdd(Ctx, RecapList.ToArray());
return ActionResult.Success;
}
[CustomAction]
public static ActionResult DatabaseConnectionValidateUI(Session session)
{
var Ctx = session;
bool Valid = true;
string Msg;
ValidationReset(Ctx);
Valid = ValidateDbNameUI(Ctx, out Msg);
ValidationMsg(Ctx, Msg);
ValidationStatus(Ctx, Valid);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult ServerAdminValidateUI(Session session)
{
var Ctx = session;
bool Valid = true;
string Msg;
ValidationReset(Ctx);
Valid = ValidatePasswordUI(Ctx, "SERVERADMIN", out Msg);
ValidationMsg(Ctx, Msg);
ValidationStatus(Ctx, Valid);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult ServerValidateADUI(Session session)
{
var Ctx = session;
bool Valid = true;
string Msg;
ValidationReset(Ctx);
Valid = ValidateADUI(Ctx, "PI_SERVER", out Msg);
ValidationMsg(Ctx, Msg);
ValidationStatus(Ctx, Valid);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult EServerValidateADUI(Session session)
{
var Ctx = session;
bool Valid = true;
string Msg;
ValidationReset(Ctx);
Valid = ValidateADUI(Ctx, "PI_ESERVER", out Msg);
ValidationMsg(Ctx, Msg);
ValidationStatus(Ctx, Valid);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult PortalValidateADUI(Session session)
{
var Ctx = session;
bool Valid = true;
string Msg;
ValidationReset(Ctx);
Valid = ValidateADUI(Ctx, "PI_PORTAL", out Msg);
ValidationMsg(Ctx, Msg);
ValidationStatus(Ctx, Valid);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult ServerAccessValidateUI(Session session)
{
var Ctx = session;
bool Valid = true;
string Msg;
ValidationReset(Ctx);
Valid = ValidatePasswordUI(Ctx, "SERVER_ACCESS", out Msg);
ValidationMsg(Ctx, Msg);
ValidationStatus(Ctx, Valid);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult SqlServerListUI(Session session)
{
var Ctx = session;
var SrvList = new ComboBoxCtrl(Ctx, "DB_SERVER");
foreach (var Srv in GetSqlInstances())
SrvList.AddItem(Srv);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult DbListUI(Session session)
{
string tmp;
var Ctrl = new ComboBoxCtrl(session, "DB_SELECT");
if (CheckConnection(session["DB_CONN"], out tmp))
foreach (var Db in GetDbList(ConnStr: session["DB_CONN"], ForbiddenNames: SysDb))
{
Ctrl.AddItem(Db);
session["DB_SELECT"] = Db; // Adds available DBs to installer log.
}
else else
{ session["DB_SELECT"] = "";
session["CORRECTCONNECTION"] = "0"; return ActionResult.Success;
} }
[CustomAction]
public static ActionResult CheckConnectionUI(Session session)
{
string ConnStr = session["DB_AUTH"].Equals("Windows Authentication") ? GetConnectionString(session["DB_SERVER"], "master") :
GetConnectionString(session["DB_SERVER"], "master", session["DB_LOGIN"], session["DB_PASSWORD"]);
string msg;
bool Result = CheckConnection(ConnStr, out msg);
session["DB_CONN_CORRECT"] = Result ? "1" : "0";
session["DB_CONN"] = Result ? ConnStr : "";
session["DB_CONN_MSG"] = msg;
return ActionResult.Success; return ActionResult.Success;
} }
[CustomAction] [CustomAction]
public static ActionResult FinalizeInstall(Session session) public static ActionResult FinalizeInstall(Session session)
{ {
var connectionString = GetCustomActionProperty(session, "ConnectionString").Replace(CustomDataDelimiter, ";"); /*var connectionString = GetCustomActionProperty(session, "ConnectionString").Replace(CustomDataDelimiter, ";");
var serviceFolder = GetCustomActionProperty(session, "ServiceFolder"); var serviceFolder = GetCustomActionProperty(session, "ServiceFolder");
var previousConnectionString = GetCustomActionProperty(session, "PreviousConnectionString").Replace(CustomDataDelimiter, ";"); var previousConnectionString = GetCustomActionProperty(session, "PreviousConnectionString").Replace(CustomDataDelimiter, ";");
var previousCryptoKey = GetCustomActionProperty(session, "PreviousCryptoKey"); var previousCryptoKey = GetCustomActionProperty(session, "PreviousCryptoKey");
@ -85,7 +278,7 @@ namespace WebsitePanel.WIXInstaller
ChangeConfigString("/configuration/connectionStrings/add[@name='EnterpriseServer']", "connectionString", connectionString, serviceFolder); ChangeConfigString("/configuration/connectionStrings/add[@name='EnterpriseServer']", "connectionString", connectionString, serviceFolder);
ChangeConfigString("/configuration/appSettings/add[@key='WebsitePanel.CryptoKey']", "value", previousCryptoKey, serviceFolder); ChangeConfigString("/configuration/appSettings/add[@key='WebsitePanel.CryptoKey']", "value", previousCryptoKey, serviceFolder);
InstallService(serviceFolder); InstallService(serviceFolder);*/
return ActionResult.Success; return ActionResult.Success;
} }
@ -93,7 +286,7 @@ namespace WebsitePanel.WIXInstaller
[CustomAction] [CustomAction]
public static ActionResult FinalizeUnInstall(Session session) public static ActionResult FinalizeUnInstall(Session session)
{ {
UnInstallService(); // UnInstallService();
return ActionResult.Success; return ActionResult.Success;
} }
@ -105,7 +298,7 @@ namespace WebsitePanel.WIXInstaller
session["SERVICEFOLDER"] = session["INSTALLFOLDER"]; session["SERVICEFOLDER"] = session["INSTALLFOLDER"];
var servicePath = SecurityUtils.GetServicePath("WebsitePanel Scheduler"); var servicePath = /*SecurityUtils.GetServicePath("WebsitePanel Scheduler")*/"";
if (!string.IsNullOrEmpty(servicePath)) if (!string.IsNullOrEmpty(servicePath))
{ {
@ -131,13 +324,59 @@ namespace WebsitePanel.WIXInstaller
{ {
session["SERVICEFOLDER"] = servicePath; session["SERVICEFOLDER"] = servicePath;
} }
} }
} }
return ActionResult.Success; return ActionResult.Success;
} }
[CustomAction]
public static ActionResult PrereqCheck(Session session)
{
string Msg;
var Ctx = Tool.GetSetupVars(session);
var ros = Adapter.CheckOS(Ctx, out Msg);
AddLog(session, Msg);
var riis = Adapter.CheckIIS(Ctx, out Msg);
AddLog(session, Msg);
var raspnet = Adapter.CheckASPNET(Ctx, out Msg);
AddLog(session, Msg);
session[Prop.REQ_OS] = ros == CheckStatuses.Success ? YesNo.Yes : YesNo.No;
session[Prop.REQ_IIS] = riis == CheckStatuses.Success ? YesNo.Yes : YesNo.No; ;
session[Prop.REQ_ASPNET] = raspnet == CheckStatuses.Success ? YesNo.Yes : YesNo.No; ;
session[Prop.REQ_SERVER] = YesNo.Yes;
session[Prop.REQ_ESERVER] = YesNo.Yes;
session[Prop.REQ_PORTAL] = YesNo.Yes;
session[Prop.REQ_WDPORTAL] = YesNo.Yes;
return ActionResult.Success;
}
[CustomAction]
public static ActionResult PrereqCheckUI(Session session)
{
var ListView = new ListViewCtrl(session, "REQCHECKLIST");
AddCheck(ListView, session, Prop.REQ_OS);
AddCheck(ListView, session, Prop.REQ_IIS);
AddCheck(ListView, session, Prop.REQ_ASPNET);
AddCheck(ListView, session, Prop.REQ_SERVER);
AddCheck(ListView, session, Prop.REQ_ESERVER);
AddCheck(ListView, session, Prop.REQ_PORTAL);
AddCheck(ListView, session, Prop.REQ_WDPORTAL);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult FillIpListUI(Session session)
{
var Ctrls = new[]{ new ComboBoxCtrl(session, "PI_SERVER_IP"),
new ComboBoxCtrl(session, "PI_ESERVER_IP"),
new ComboBoxCtrl(session, "PI_PORTAL_IP") };
foreach (var Ip in GetIpList())
foreach (var Ctrl in Ctrls)
Ctrl.AddItem(Ip);
return ActionResult.Success;
}
#endregion
private static void InstallService(string installFolder) private static void InstallService(string installFolder)
{ {
try try
@ -204,7 +443,6 @@ namespace WebsitePanel.WIXInstaller
} }
} }
private static void StopService(string serviceName) private static void StopService(string serviceName)
{ {
var sc = new ServiceController(serviceName); var sc = new ServiceController(serviceName);
@ -229,36 +467,30 @@ namespace WebsitePanel.WIXInstaller
private static string GetConnectionString(string serverName, string databaseName) private static string GetConnectionString(string serverName, string databaseName)
{ {
return string.Format("Server={0};database={1};Trusted_Connection=true;", serverName, databaseName).Replace(";", CustomDataDelimiter); return string.Format("Server={0};database={1};Trusted_Connection=true;", serverName, databaseName)/*.Replace(";", CustomDataDelimiter)*/;
} }
private static string GetConnectionString(string serverName, string databaseName, string login, string password) private static string GetConnectionString(string serverName, string databaseName, string login, string password)
{ {
return string.Format("Server={0};database={1};uid={2};password={3};", serverName, databaseName, login, password).Replace(";", CustomDataDelimiter); return string.Format("Server={0};database={1};uid={2};password={3};", serverName, databaseName, login, password)/*.Replace(";", CustomDataDelimiter)*/;
} }
static bool CheckConnection(string ConnStr, out string Info)
private static bool CheckConnection(string connectionString)
{ {
var connection = new SqlConnection(connectionString); Info = string.Empty;
bool result = true; bool Result = false;
using (var Conn = new SqlConnection(ConnStr))
try
{ {
connection.Open(); try
}
catch (Exception)
{
result = false;
}
finally
{
if (connection != null && connection.State == ConnectionState.Open)
{ {
connection.Close(); Conn.Open();
Result = true;
}
catch (Exception ex)
{
Info = ex.Message;
} }
} }
return Result;
return result;
} }
private static string GetCustomActionProperty(Session session, string key) private static string GetCustomActionProperty(Session session, string key)
@ -270,5 +502,235 @@ namespace WebsitePanel.WIXInstaller
return string.Empty; return string.Empty;
} }
private static void AddCheck(ListViewCtrl view, Session session, string PropertyID)
{
view.AddItem(session[PropertyID] == YesNo.Yes, session[PropertyID + "_TITLE"]);
}
static IList<string> GetSqlInstances()
{
var Result = new List<string>();
using (var Src = SqlDataSourceEnumerator.Instance.GetDataSources())
{
foreach (DataRow Row in Src.Rows)
{
var Instance = Row["InstanceName"].ToString();
Result.Add((string.IsNullOrWhiteSpace(Instance) ? "" : (Instance + "\\")) + Row["ServerName"].ToString());
}
}
return Result;
}
static IEnumerable<string> GetDbList(string ConnStr, IList<string> ForbiddenNames = null)
{
using (var Conn = new SqlConnection(ConnStr))
{
Conn.Open();
var Cmd = Conn.CreateCommand();
Cmd.CommandText = "SELECT name FROM master..sysdatabases";
if (ForbiddenNames != null && ForbiddenNames.Count > 0)
Cmd.CommandText += string.Format(" WHERE name NOT IN ({0})", string.Join(", ", ForbiddenNames.Select(x => string.Format("'{0}'", x))));
var Result = Cmd.ExecuteReader();
while (Result.Read())
yield return Result["name"].ToString();
}
}
static IEnumerable<string> GetIpList()
{
foreach (var Ni in NetworkInterface.GetAllNetworkInterfaces())
if (Ni.OperationalStatus == OperationalStatus.Up && (Ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet ||
Ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 ||
Ni.NetworkInterfaceType == NetworkInterfaceType.Loopback))
foreach (var IpInfo in Ni.GetIPProperties().UnicastAddresses)
if (IpInfo.Address.AddressFamily == AddressFamily.InterNetwork)
yield return IpInfo.Address.ToString();
}
internal static void AddLog(Session Ctx, string Msg)
{
AddTo(Ctx, "PI_PREREQ_LOG", Msg);
}
internal static void AddTo(Session Ctx, string TextProp, string Msg)
{
if (!string.IsNullOrWhiteSpace(Msg))
{
string tmp = Ctx[TextProp];
if (string.IsNullOrWhiteSpace(tmp))
Ctx[TextProp] = Msg;
else
Ctx[TextProp] = tmp + Environment.NewLine + Msg;
}
}
internal static void ValidationReset(Session Ctx)
{
Ctx["VALIDATE_OK"] = "0";
Ctx["VALIDATE_MSG"] = "Error occurred.";
}
internal static void ValidationStatus(Session Ctx, bool Value)
{
Ctx["VALIDATE_OK"] = Value ? YesNo.Yes : YesNo.No;
}
internal static void ValidationMsg(Session Ctx, string Msg)
{
AddTo(Ctx, "VALIDATE_MSG", Msg);
}
internal static bool PasswordValidate(string Password, string Confirm, out string Msg)
{
Msg = string.Empty;
bool Result = false;
if (string.IsNullOrWhiteSpace(Password))
Msg = "Empty password.";
else if (Password != Confirm)
Msg = "Password does not match the confirm password. Type both passwords again.";
else
Result = true;
return Result;
}
internal static bool ValidatePasswordUI(Session Ctx, string Ns, out string Msg)
{
string p1 = Ctx[Ns + "_PASSWORD"];
string p2 = Ctx[Ns + "_PASSWORD_CONFIRM"];
return PasswordValidate(p1, p2, out Msg);
}
internal static bool ValidateADDomainUI(Session Ctx, string Ns, out string Msg)
{
bool Result = default(bool);
bool check = Ctx[Ns + "_CREATE_AD"] == YesNo.Yes;
string name = Ctx[Ns + "_DOMAIN"];
if (check && string.IsNullOrWhiteSpace(name))
{
Result = false;
Msg = "The domain can't be empty.";
}
else
{
Result = true;
Msg = string.Empty;
}
return Result;
}
internal static bool ValidateADLoginUI(Session Ctx, string Ns, out string Msg)
{
bool Result = default(bool);
string name = Ctx[Ns + "_LOGIN"];
if (string.IsNullOrWhiteSpace(name))
{
Result = false;
Msg = "The login can't be empty.";
}
else
{
Result = true;
Msg = string.Empty;
}
return Result;
}
internal static bool ValidateADUI(Session Ctx, string Ns, out string Msg)
{
bool Result = true;
if (!ValidateADDomainUI(Ctx, Ns, out Msg))
Result = false;
else if (!ValidateADLoginUI(Ctx, Ns, out Msg))
Result = false;
else if (!ValidatePasswordUI(Ctx, Ns, out Msg))
Result = false;
return Result;
}
internal static bool ValidateDbNameUI(Session Ctx, out string Msg)
{
Msg = string.Empty;
var Result = true;
string DbName = Ctx["DB_DATABASE"];
if (string.IsNullOrWhiteSpace(DbName))
{
Result = false;
Msg = "The database name can't be empty.";
}
return Result;
}
internal static void RecapListReset(Session Ctx)
{
Ctx["CUSTOM_INSTALL_TEXT"] = string.Empty;
}
internal static void RecapListAdd(Session Ctx, params string[] Msgs)
{
foreach (var Msg in Msgs)
AddTo(Ctx, "CUSTOM_INSTALL_TEXT", Msg); ;
}
internal static string GetProperty(Session Ctx, string Property)
{
if (Ctx.CustomActionData.ContainsKey(Property))
return Ctx[Property];
else
return string.Empty;
}
private static ActionResult ProcessInstall(Session Ctx, WiXInstallType InstallType)
{
IWiXSetup Install = null;
try
{
Ctx.AttachToSetupLog();
switch (InstallType)
{
case WiXInstallType.InstallServer:
Install = ServerSetup.Create(Ctx.CustomActionData, SetupActions.Install);
break;
case WiXInstallType.RemoveServer:
Install = ServerSetup.Create(Ctx.CustomActionData, SetupActions.Uninstall);
break;
case WiXInstallType.InstallEnterpriseServer:
Install = EServerSetup.Create(Ctx.CustomActionData, SetupActions.Install);
break;
case WiXInstallType.RemoveEnterpriseServer:
Install = EServerSetup.Create(Ctx.CustomActionData, SetupActions.Uninstall);
break;
case WiXInstallType.InstallPortal:
Install = PortalSetup.Create(Ctx.CustomActionData, SetupActions.Install);
break;
case WiXInstallType.RemovePortal:
Install = PortalSetup.Create(Ctx.CustomActionData, SetupActions.Uninstall);
break;
default:
throw new NotImplementedException();
}
Install.Run();
}
catch (WiXSetupException we)
{
Ctx.Log("Expected exception: " + we.ToString());
return ActionResult.Failure;
}
catch (Exception ex)
{
Ctx.Log(ex.ToString());
return ActionResult.Failure;
}
return ActionResult.Success;
}
[Conditional("DEBUG")]
private static void PopUpDebugger()
{
Debugger.Launch();
}
} }
public static class SessionExtension
{
public static void AttachToSetupLog(this Session Ctx)
{
WiXSetup.InstallLogListener(new WiXLogListener(Ctx));
WiXSetup.InstallLogListener(new InMemoryStringLogListener("WIX CA IN MEMORY"));
}
}
internal enum WiXInstallType: byte
{
InstallServer,
InstallEnterpriseServer,
InstallPortal,
RemoveServer,
RemoveEnterpriseServer,
RemovePortal,
RemoveUpdate,
RestoreUpdate
}
} }

View file

@ -32,10 +32,25 @@
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<AddPdb Include="$(OutputPath)*.pdb" />
</ItemGroup>
<PropertyGroup>
<IntermediateOutputPath Condition=" '$(PlatformName)' == 'AnyCPU' ">$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
<IntermediateOutputPath Condition=" '$(PlatformName)' != 'AnyCPU' ">$(BaseIntermediateOutputPath)$(PlatformName)\$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<CustomActionContents>$(IntermediateOutputPath)$(AssemblyName).pdb;@(AddPdb)</CustomActionContents>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.Web.Administration, Version=7.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Lib\Microsoft.Web.Administration.dll</HintPath>
</Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Configuration.Install" /> <Reference Include="System.Configuration.Install" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.DirectoryServices" />
<Reference Include="System.ServiceProcess" /> <Reference Include="System.ServiceProcess" />
<Reference Include="System.Windows.Forms" /> <Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
@ -44,6 +59,12 @@
<Reference Include="Microsoft.Deployment.WindowsInstaller" /> <Reference Include="Microsoft.Deployment.WindowsInstaller" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Common\InMemoryStringLogListener.cs" />
<Compile Include="Common\Tool.cs" />
<Compile Include="Common\Prop.cs" />
<Compile Include="Common\Util\IListCtrl.cs" />
<Compile Include="Common\WiXLogListener.cs" />
<Compile Include="Common\YesNo.cs" />
<Compile Include="CustomAction.cs" /> <Compile Include="CustomAction.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Content Include="CustomAction.config" /> <Content Include="CustomAction.config" />
@ -53,6 +74,10 @@
<Project>{3951C0EC-BD98-450E-B228-CDBE5BD4AD49}</Project> <Project>{3951C0EC-BD98-450E-B228-CDBE5BD4AD49}</Project>
<Name>WebsitePanel.Setup</Name> <Name>WebsitePanel.Setup</Name>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\WebsitePanel.Installer.Core\WebsitePanel.Installer.Core.csproj">
<Project>{0E4A3F5B-0BB1-4F63-863D-7B0182B378CF}</Project>
<Name>WebsitePanel.Installer.Core</Name>
</ProjectReference>
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(WixCATargetsPath)" /> <Import Project="$(WixCATargetsPath)" />

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -3,7 +3,7 @@
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform> <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>3.7</ProductVersion> <ProductVersion>3.9</ProductVersion>
<ProjectGuid>3f3f1c39-6719-4862-bb45-4c227f13b821</ProjectGuid> <ProjectGuid>3f3f1c39-6719-4862-bb45-4c227f13b821</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion> <SchemaVersion>2.0</SchemaVersion>
<OutputName>WebsitePanel.LocalizationToolkit</OutputName> <OutputName>WebsitePanel.LocalizationToolkit</OutputName>
@ -63,4 +63,4 @@
<Target Name="AfterBuild"> <Target Name="AfterBuild">
</Target> </Target>
--> -->
</Project> </Project>

View file

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:4.0.30319.34014 // Runtime Version:4.0.30319.34209
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.

View file

@ -1,7 +1,7 @@
'------------------------------------------------------------------------------ '------------------------------------------------------------------------------
' <auto-generated> ' <auto-generated>
' This code was generated by a tool. ' This code was generated by a tool.
' Runtime Version:4.0.30319.34014 ' Runtime Version:4.0.30319.34209
' '
' Changes to this file may cause incorrect behavior and will be lost if ' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated. ' the code is regenerated.

View file

@ -1 +1 @@
%windir%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe build.xml /target:Build /p:BuildConfiguration=Release /p:Version="2.1.0" /p:FileVersion="2.1.0.1" /p:VersionLabel="2.1.0.1" /v:n /fileLogger /m %windir%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe build.xml /target:Build /p:BuildConfiguration=Release /p:Version="2.1.0" /p:FileVersion="2.1.0.1" /p:VersionLabel="2.1.0.1" /v:n /fileLogger /m

View file

@ -53,6 +53,7 @@
<LocalizationToolkitBuild>$(BuildFolder)\LocalizationToolkit</LocalizationToolkitBuild> <LocalizationToolkitBuild>$(BuildFolder)\LocalizationToolkit</LocalizationToolkitBuild>
<InstallerBuild>$(BuildFolder)\Installer</InstallerBuild> <InstallerBuild>$(BuildFolder)\Installer</InstallerBuild>
<FixDefaultPublicFolderMailboxBuild>$(BuildFolder)\FixDefaultPublicFolderMailbox</FixDefaultPublicFolderMailboxBuild> <FixDefaultPublicFolderMailboxBuild>$(BuildFolder)\FixDefaultPublicFolderMailbox</FixDefaultPublicFolderMailboxBuild>
<WiXInstallerBuild>$(BuildFolder)\WiXInstaller</WiXInstallerBuild>
<ftphost></ftphost> <ftphost></ftphost>
<ftpUsername></ftpUsername> <ftpUsername></ftpUsername>
@ -360,11 +361,20 @@
</ItemGroup> </ItemGroup>
<Copy SourceFiles="@(FixDefaultPublicFolderMailboxBuildFiles)" DestinationFolder="$(FixDefaultPublicFolderMailboxBuild)\%(RecursiveDir)" /> <Copy SourceFiles="@(FixDefaultPublicFolderMailboxBuildFiles)" DestinationFolder="$(FixDefaultPublicFolderMailboxBuild)\%(RecursiveDir)" />
</Target> </Target>
<Target Name="WiXCreateRedistFileListBuild" DependsOnTargets="CreateFixDefaultPublicFolderMailboxBuild" >
<RemoveDir Directories="$(WiXInstallerBuild)\ComponentsFiles" />
<MakeDir Directories="$(WiXInstallerBuild)\ComponentsFiles" />
<Exec Command='"$(WIX)bin\heat.exe" dir $(EnterpriseServerBuild) -o $(WiXInstallerBuild)\ComponentsFiles\EnterpriseServerFiles.wxs -gg -sreg -srd -var wix.BUILDESPATH -cg EnterpriseServerFiles -dr INSTALLENTERPRISESERVERFOLDER' />
<Exec Command='"$(WIX)bin\heat.exe" dir $(ServerBuild) -o $(WiXInstallerBuild)\ComponentsFiles\ServerFiles.wxs -gg -sreg -srd -var wix.BUILDSPATH -cg ServerFiles -dr INSTALLSERVERFOLDER' />
<Exec Command='"$(WIX)bin\heat.exe" dir $(PortalBuild) -o $(WiXInstallerBuild)\ComponentsFiles\PortalFiles.wxs -gg -sreg -srd -var wix.BUILDPPATH -cg PortalFiles -dr INSTALLPORTALFOLDER' />
<Exec Command='"$(WIX)bin\heat.exe" dir $(WebDavPortalBuild) -o $(WiXInstallerBuild)\ComponentsFiles\WebDavPortalFiles.wxs -gg -sreg -srd -var wix.BUILDWDPPATH -cg WebDavPortalFiles -dr INSTALLWEBDAVPORTALFOLDER' />
</Target>
<Target Name="Build" DependsOnTargets="CreateFixDefaultPublicFolderMailboxBuild"> <Target Name="Build" DependsOnTargets="WiXCreateRedistFileListBuild">
<!-- Do nothing --> <!-- Do nothing -->
</Target> </Target>
<!-- Create full distributives --> <!-- Create full distributives -->
<PropertyGroup> <PropertyGroup>
<InstallFolder>$(DeployFolder)\Install</InstallFolder> <InstallFolder>$(DeployFolder)\Install</InstallFolder>
@ -384,7 +394,6 @@
<AWStatsViewerInstall>$(ToolsFolder)\AWStats.Viewer</AWStatsViewerInstall> <AWStatsViewerInstall>$(ToolsFolder)\AWStats.Viewer</AWStatsViewerInstall>
<WSPTransportAgentInstall>$(ToolsFolder)\WSPTransportAgent</WSPTransportAgentInstall> <WSPTransportAgentInstall>$(ToolsFolder)\WSPTransportAgent</WSPTransportAgentInstall>
<FixDefaultPublicFolderMailboxInstall>$(ToolsFolder)\FixDefaultPublicFolderMailbox</FixDefaultPublicFolderMailboxInstall> <FixDefaultPublicFolderMailboxInstall>$(ToolsFolder)\FixDefaultPublicFolderMailbox</FixDefaultPublicFolderMailboxInstall>
</PropertyGroup> </PropertyGroup>
<Target Name="PrepareInstalls" DependsOnTargets="Build"> <Target Name="PrepareInstalls" DependsOnTargets="Build">
@ -640,8 +649,15 @@
<Copy SourceFiles="$(SetupBuildFolder)\setup.pdb" DestinationFolder="$(StandaloneInstall)\Setup" Condition="'$(BuildConfiguration)' == 'Debug'" /> <Copy SourceFiles="$(SetupBuildFolder)\setup.pdb" DestinationFolder="$(StandaloneInstall)\Setup" Condition="'$(BuildConfiguration)' == 'Debug'" />
</Target> </Target>
<Target Name="CreateStandaloneFullMsi" DependsOnTargets="CreateSetupDLL">
<MSBuild Projects='$(RootFolder)\WebsitePanel.Installer\Sources\Setup.WIXInstaller\Setup.WIXInstaller.wixproj' Properties='Configuration=$(BuildConfiguration)' Targets='Build'>
<Output TaskParameter="TargetOutputs" ItemName="StandaloneFullMsi" />
</MSBuild>
<Copy SourceFiles="@(StandaloneFullMsi)" DestinationFolder="$(DeployFolder)\%(RecursiveDir)" />
</Target>
<!-- Deploy --> <!-- Deploy -->
<Target Name="Deploy" DependsOnTargets="CreateSetupDLL" > <Target Name="Deploy" DependsOnTargets="CreateStandaloneFullMsi" >
<ItemGroup> <ItemGroup>
<PortalInstallFiles Include="$(PortalInstall)\**\*.*" /> <PortalInstallFiles Include="$(PortalInstall)\**\*.*" />
<WebDavPortalInstallFiles Include="$(WebDavPortalInstall)\**\*.*" /> <WebDavPortalInstallFiles Include="$(WebDavPortalInstall)\**\*.*" />
@ -814,10 +830,11 @@
<FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/WebsitePanel-WSPTransportAgent-$(Version).zip" LocalFile="$(ToolsFolder)\WebsitePanel-WSPTransportAgent-$(Version).zip" /> <FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/WebsitePanel-WSPTransportAgent-$(Version).zip" LocalFile="$(ToolsFolder)\WebsitePanel-WSPTransportAgent-$(Version).zip" />
<FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/WebsitePanel.LocalizationToolkit-$(Version).msi" LocalFile="$(ToolsFolder)\WebsitePanel.LocalizationToolkit.msi" /> <FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/WebsitePanel.LocalizationToolkit-$(Version).msi" LocalFile="$(ToolsFolder)\WebsitePanel.LocalizationToolkit.msi" />
<FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/WebsitePanelInstaller-$(Version).msi" LocalFile="$(DeployFolder)\WebsitePanelInstaller.msi" /> <FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/WebsitePanelInstaller-$(Version).msi" LocalFile="$(DeployFolder)\WebsitePanelInstaller.msi" />
<FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/WebsitePanelInstaller-$(Version)-webpi.msi" LocalFile="$(DeployFolder)\WebsitePanelInstaller.msi" /> <FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/WebsitePanelInstaller-$(Version)-webpi.msi" LocalFile="$(DeployFolder)\WebsitePanelInstaller.msi" />
<FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/WebsitePanel-HyperVUtils-$(Version).zip" LocalFile="$(ToolsFolder)\WebsitePanel-HyperVUtils-$(Version).zip" /> <FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/WebsitePanel-HyperVUtils-$(Version).zip" LocalFile="$(ToolsFolder)\WebsitePanel-HyperVUtils-$(Version).zip" />
<FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/WebsitePanel-VMConfig-$(Version).zip" LocalFile="$(ToolsFolder)\WebsitePanel-VMConfig-$(Version).zip" /> <FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/WebsitePanel-VMConfig-$(Version).zip" LocalFile="$(ToolsFolder)\WebsitePanel-VMConfig-$(Version).zip" />
<FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/Websitepanel-SchedulerService-$(Version).msi" LocalFile="$(DeployFolder)\Websitepanel-SchedulerService.msi" /> <FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/Websitepanel-SchedulerService-$(Version).msi" LocalFile="$(DeployFolder)\Websitepanel-SchedulerService.msi" />
<FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/WebsitePanel-Full-$(Version).msi" LocalFile="$(DeployFolder)\Websitepanel.msi" />
<FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/Manual-Update-$(Version).zip" LocalFile="$(DeployFolder)\Manual-Update.zip" /> <FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/Manual-Update-$(Version).zip" LocalFile="$(DeployFolder)\Manual-Update.zip" />
<FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/WebsitePanel-FixDefaultPublicFolderMailbox-$(Version).zip" LocalFile="$(ToolsFolder)\WebsitePanel-FixDefaultPublicFolderMailbox-$(Version).zip" /> <FtpUpload Username="$(ftpUsername)" password="$(ftpPassword)" RemoteUri="ftp://$(ftphost)/WebsitePanel-FixDefaultPublicFolderMailbox-$(Version).zip" LocalFile="$(ToolsFolder)\WebsitePanel-FixDefaultPublicFolderMailbox-$(Version).zip" />
</Target> </Target>

BIN
tools/WIX/LuxTasks.dll Normal file

Binary file not shown.

Binary file not shown.

BIN
tools/WIX/ThmViewer.exe Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -12,4 +12,7 @@
<supportedRuntime version="v4.0" /> <supportedRuntime version="v4.0" />
<supportedRuntime version="v2.0.50727" /> <supportedRuntime version="v2.0.50727" />
</startup> </startup>
<runtime>
<loadFromRemoteSources enabled="true"/>
</runtime>
</configuration> </configuration>

Binary file not shown.

View file

@ -15,4 +15,7 @@
<supportedRuntime version="v4.0" /> <supportedRuntime version="v4.0" />
<supportedRuntime version="v2.0.50727" /> <supportedRuntime version="v2.0.50727" />
</startup> </startup>
<runtime>
<loadFromRemoteSources enabled="true"/>
</runtime>
</configuration> </configuration>

Binary file not shown.

Binary file not shown.

BIN
tools/WIX/doc/DTF.chm Normal file

Binary file not shown.

BIN
tools/WIX/doc/DTFAPI.chm Normal file

Binary file not shown.

View file

@ -41,7 +41,7 @@
By default this uses the Product/@Id attribute value, which may be automatically generated. By default this uses the Product/@Id attribute value, which may be automatically generated.
</html:p> </html:p>
</xse:remarks> </xse:remarks>
<xse:howtoRef href="author_product_dependencies.htm">How To: Author product dependencies</xse:howtoRef> <xse:howtoRef href="author_product_dependencies.html">How To: Author product dependencies</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
@ -103,7 +103,7 @@
</html:p> </html:p>
</xse:remarks> </xse:remarks>
<xse:seeAlso ref="RequiresRef" /> <xse:seeAlso ref="RequiresRef" />
<xse:howtoRef href="author_product_dependencies.htm">How To: Author product dependencies</xse:howtoRef> <xse:howtoRef href="author_product_dependencies.html">How To: Author product dependencies</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
@ -166,7 +166,7 @@
</html:p> </html:p>
</xse:remarks> </xse:remarks>
<xse:seeAlso ref="Requires" /> <xse:seeAlso ref="Requires" />
<xse:howtoRef href="author_product_dependencies.htm">How To: Author product dependencies</xse:howtoRef> <xse:howtoRef href="author_product_dependencies.html">How To: Author product dependencies</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>

View file

@ -1,242 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
<copyright file="IsolatedApp.xsd" company="Outercurve Foundation">
Copyright (c) 2004, Outercurve Foundation.
This software is released under Microsoft Reciprocal License (MS-RL).
The license and further copyright text can be found in the file
LICENSE.TXT at the root directory of the distribution.
</copyright>
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:html="http://www.w3.org/1999/xhtml"
targetNamespace="http://wix.sourceforge.net/schemas/clickthrough/isolatedapp/2006"
xmlns="http://wix.sourceforge.net/schemas/clickthrough/isolatedapp/2006">
<xs:annotation>
<xs:documentation>
Schema for describing Isolated Applications.
</xs:documentation>
</xs:annotation>
<xs:element name="IsolatedApp">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element ref="Package"/>
<xs:element ref="Application"/>
<xs:element ref="PreviousFeed" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Package">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element ref="Description"/>
<xs:element ref="Feed"/>
<xs:element ref="Icon"/>
<xs:element ref="Id"/>
<xs:element ref="Manufacturer"/>
<xs:element ref="UpdateRate"/>
<xs:element ref="Version"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="Application">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element ref="Details"/>
<xs:element ref="EntryPoint"/>
<xs:element ref="Icon"/>
<xs:element ref="Id"/>
<xs:element ref="Name"/>
<xs:element ref="Source"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="PreviousFeed">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Description">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Details">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="EntryPoint">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:annotation><xs:documentation></xs:documentation></xs:annotation>
<xs:attribute name="PackageVersion" type="xs:boolean" use="optional">
<xs:annotation>
<xs:documentation></xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Feed">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Id">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="uuid"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Icon">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:annotation><xs:documentation></xs:documentation></xs:annotation>
<xs:attribute name="Index" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation></xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Manufacturer">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Name">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Source">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="UpdateRate">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Version">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="VersionType"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<!-- - - - - - - - - - - Simple Type Definitions - - - - - - - - - - - - -->
<xs:simpleType name="uuid">
<xs:annotation><xs:documentation>Values of this type will look like: "01234567-89AB-CDEF-0123-456789ABCDEF" or "{01234567-89AB-CDEF-0123-456789ABCDEF}".</xs:documentation></xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="[{(]?[0-9A-Fa-f]{8}\-?[0-9A-Fa-f]{4}\-?[0-9A-Fa-f]{4}\-?[0-9A-Fa-f]{4}\-?[0-9A-Fa-f]{12}[})]?"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="VersionType">
<xs:annotation><xs:documentation>Values of this type will look like: "x.x.x.x" where x is an integer from 0 to 65534.</xs:documentation></xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="(\d{1,5}\.){3}\d{1,5}"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View file

@ -1,262 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
<copyright file="OfficeAddin.xsd" company="Outercurve Foundation">
Copyright (c) 2004, Outercurve Foundation.
This software is released under Microsoft Reciprocal License (MS-RL).
The license and further copyright text can be found in the file
LICENSE.TXT at the root directory of the distribution.
</copyright>
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:html="http://www.w3.org/1999/xhtml"
targetNamespace="http://wix.sourceforge.net/schemas/clickthrough/officeaddin/2006"
xmlns="http://wix.sourceforge.net/schemas/clickthrough/officeaddin/2006">
<xs:annotation>
<xs:documentation>
Schema for describing Office Addins.
</xs:documentation>
</xs:annotation>
<xs:element name="OfficeAddin">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element ref="Package"/>
<xs:element ref="Application"/>
<xs:element ref="PreviousFeed" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Package">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element ref="Description"/>
<xs:element ref="Feed"/>
<xs:element ref="Icon"/>
<xs:element ref="Id"/>
<xs:element ref="Manufacturer"/>
<xs:element ref="UpdateRate"/>
<xs:element ref="Version"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="Application">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element ref="Details"/>
<xs:element ref="EntryPoint"/>
<xs:element ref="ExtendsApplication"/>
<xs:element ref="Icon"/>
<xs:element ref="Id"/>
<xs:element ref="Name"/>
<xs:element ref="Source"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="PreviousFeed">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Description">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Details">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="EntryPoint">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="ExtendsApplication">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="SupportedOfficeApplications"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Feed">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Id">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="uuid"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Icon">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:annotation><xs:documentation></xs:documentation></xs:annotation>
<xs:attribute name="Index" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation></xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Manufacturer">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Name">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Source">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="UpdateRate">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Version">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="VersionType"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<!-- - - - - - - - - - - Simple Type Definitions - - - - - - - - - - - - -->
<xs:simpleType name="SupportedOfficeApplications">
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="Excel2003" />
<xs:enumeration value="Outlook2003" />
<xs:enumeration value="PowerPoint2003" />
<xs:enumeration value="Word2003" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="uuid">
<xs:annotation><xs:documentation>Values of this type will look like: "01234567-89AB-CDEF-0123-456789ABCDEF" or "{01234567-89AB-CDEF-0123-456789ABCDEF}".</xs:documentation></xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="[{(]?[0-9A-Fa-f]{8}\-?[0-9A-Fa-f]{4}\-?[0-9A-Fa-f]{4}\-?[0-9A-Fa-f]{4}\-?[0-9A-Fa-f]{12}[})]?"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="VersionType">
<xs:annotation><xs:documentation>Values of this type will look like: "x.x.x.x" where x is an integer from 0 to 65534.</xs:documentation></xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="(\d{1,5}\.){3}\d{1,5}"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

BIN
tools/WIX/doc/WiX.chm Normal file

Binary file not shown.

View file

@ -60,6 +60,40 @@
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
<xs:attribute name="LaunchTarget" type="xs:string">
<xs:annotation>
<xs:documentation>
If set, the success page will show a Launch button the user can use to launch the application being installed.
The string value can be formatted using Burn variables enclosed in brackets,
to refer to installation directories and so forth.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="LaunchTargetElevatedId" type="xs:string">
<xs:annotation>
<xs:documentation>
Id of the target ApprovedExeForElevation element.
If set with LaunchTarget, WixStdBA will launch the application through the Engine's LaunchApprovedExe method instead of through ShellExecute.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="LaunchArguments" type="xs:string">
<xs:annotation>
<xs:documentation>
If set, WixStdBA will supply these arguments when launching the application specified by the LaunchTarget attribute.
The string value can be formatted using Burn variables enclosed in brackets,
to refer to installation directories and so forth.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="LaunchHidden" type="YesNoType">
<xs:annotation>
<xs:documentation>
If set to "yes", WixStdBA will launch the application specified by the LaunchTarget attribute with the SW_HIDE flag.
This attribute is ignored when the LaunchTargetElevatedId attribute is specified.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="LicenseFile" type="xs:string"> <xs:attribute name="LicenseFile" type="xs:string">
<xs:annotation> <xs:annotation>
<xs:documentation>Source file of the RTF license file. Cannot be used simultaneously with LicenseUrl.</xs:documentation> <xs:documentation>Source file of the RTF license file. Cannot be used simultaneously with LicenseUrl.</xs:documentation>
@ -75,6 +109,11 @@
<xs:documentation>Source file of the logo graphic.</xs:documentation> <xs:documentation>Source file of the logo graphic.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="LogoSideFile" type="xs:string">
<xs:annotation>
<xs:documentation>Source file of the side logo graphic.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="ThemeFile" type="xs:string"> <xs:attribute name="ThemeFile" type="xs:string">
<xs:annotation> <xs:annotation>
<xs:documentation>Source file of the theme XML.</xs:documentation> <xs:documentation>Source file of the theme XML.</xs:documentation>
@ -96,10 +135,34 @@
The default behavior (or when explicitly set to "no") is to treat downgrade attempts as failures. </xs:documentation> The default behavior (or when explicitly set to "no") is to treat downgrade attempts as failures. </xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="SuppressRepair" type="YesNoType">
<xs:annotation>
<xs:documentation>If set to "yes", the Repair button will not be shown in the maintenance-mode UI.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="ShowVersion" type="YesNoType">
<xs:annotation>
<xs:documentation>If set to "yes", the application version will be displayed on the UI.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:attribute name="PrereqSupportPackage" type="YesNoType">
<xs:annotation>
<xs:documentation>
When set to "yes", the Prereq BA will plan the package to be installed if its InstallCondition is "true" or empty.
</xs:documentation>
<xs:appinfo>
<xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="ExePackage" />
<xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="MsiPackage" />
<xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="MspPackage" />
<xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="MsuPackage" />
</xs:appinfo>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Overridable"> <xs:attribute name="Overridable" type="YesNoType">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
When set to "yes", lets the user override the variable's default value by specifying another value on the command line, When set to "yes", lets the user override the variable's default value by specifying another value on the command line,

View file

@ -28,7 +28,7 @@
</xs:appinfo> </xs:appinfo>
<xs:documentation> <xs:documentation>
Installs a driver. To use this element, you need to reference the WixDifxAppExtension extension and add the Installs a driver. To use this element, you need to reference the WixDifxAppExtension extension and add the
.wixlib appropriate for the target platform (difxapp_x86.wixlib, difxapp_x64.wixlib, or difxapp_ia64.wixlib) .wixlib appropriate for the target platform (difxapp_x86.wixlib or difxapp_x64.wixlib)
to your project. to your project.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>

View file

@ -25,7 +25,7 @@
<xs:documentation> <xs:documentation>
Registers an exception for a program or a specific port and protocol in the Windows Firewall Registers an exception for a program or a specific port and protocol in the Windows Firewall
on Windows XP SP2, Windows Server 2003 SP1, and later. For more information about the Windows on Windows XP SP2, Windows Server 2003 SP1, and later. For more information about the Windows
Firewall, see <html:a href="http://msdn2.microsoft.com/en-us/library/aa364679.aspx"> Firewall, see <html:a href="http://msdn.microsoft.com/en-us/library/aa364679.aspx">
About Windows Firewall API</html:a>. About Windows Firewall API</html:a>.
</xs:documentation> </xs:documentation>
<xs:appinfo> <xs:appinfo>
@ -184,10 +184,10 @@
A remote address to which the port or program can listen. Address formats vary A remote address to which the port or program can listen. Address formats vary
based on the version of Windows and Windows Firewall the program is being installed based on the version of Windows and Windows Firewall the program is being installed
on. For Windows XP SP2 and Windows Server 2003 SP1, see on. For Windows XP SP2 and Windows Server 2003 SP1, see
<html:a href="http://msdn2.microsoft.com/en-us/library/aa365270.aspx"> <html:a href="http://msdn.microsoft.com/en-us/library/aa365270.aspx">
RemoteAddresses Property</html:a>. RemoteAddresses Property</html:a>.
For Windows Vista and Windows Server 2008, see For Windows Vista and Windows Server 2008, see
<html:a href="http://msdn2.microsoft.com/en-us/library/aa365366.aspx"> <html:a href="http://msdn.microsoft.com/en-us/library/aa365366.aspx">
RemoteAddresses Property</html:a>. RemoteAddresses Property</html:a>.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>

View file

@ -198,7 +198,7 @@
</xs:attribute> </xs:attribute>
<xs:attribute name="Value" type="xs:string"> <xs:attribute name="Value" type="xs:string">
<xs:annotation> <xs:annotation>
<xs:documentation>Value for the custom HTTP Header. This attribute can contain a formatted string that is processed at install time to insert the values of properties using [PropertyName] syntax. Also supported are environment variables, file installation paths, and component installation directories; see <a href="http://msdn2.microsoft.com/library/aa368609.aspx" target="_blank">Formatted</a> for details.</xs:documentation> <xs:documentation>Value for the custom HTTP Header. This attribute can contain a formatted string that is processed at install time to insert the values of properties using [PropertyName] syntax. Also supported are environment variables, file installation paths, and component installation directories; see <a href="http://msdn.microsoft.com/library/aa368609.aspx" target="_blank">Formatted</a> for details.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
</xs:complexType> </xs:complexType>
@ -394,7 +394,7 @@
</xs:attribute> </xs:attribute>
<xs:attribute name="Identity"> <xs:attribute name="Identity">
<xs:annotation> <xs:annotation>
<xs:documentation>Identity you want the AppPool to run under. Use the 'other' value in conjunction with the User attribute to specify non-standard user.</xs:documentation> <xs:documentation>Identity you want the AppPool to run under (applicationPoolIdentity is only available on IIS7). Use the 'other' value in conjunction with the User attribute to specify non-standard user.</xs:documentation>
</xs:annotation> </xs:annotation>
<xs:simpleType> <xs:simpleType>
<xs:restriction base="xs:string"> <xs:restriction base="xs:string">
@ -402,6 +402,7 @@
<xs:enumeration value="localService"/> <xs:enumeration value="localService"/>
<xs:enumeration value="localSystem"/> <xs:enumeration value="localSystem"/>
<xs:enumeration value="other"/> <xs:enumeration value="other"/>
<xs:enumeration value="applicationPoolIdentity"/>
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
</xs:attribute> </xs:attribute>
@ -409,7 +410,7 @@
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
Specifies the request-processing mode that is used to process requests for managed content. Only available on IIS7, ignored on IIS6. Specifies the request-processing mode that is used to process requests for managed content. Only available on IIS7, ignored on IIS6.
See <a href="http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/applicationPoolDefaults" target="_blank">http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/applicationPoolDefaults</a> for valid values. See <a href="http://www.iis.net/configreference/system.applicationhost/applicationpools/applicationpooldefaults" target="_blank">http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/applicationPoolDefaults</a> for valid values.
This attribute may be set via a formatted Property (e.g. [MyProperty]). This attribute may be set via a formatted Property (e.g. [MyProperty]).
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
@ -418,7 +419,7 @@
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
Specifies the .NET Framework version to be used by the application pool. Only available on IIS7, ignored on IIS6. Specifies the .NET Framework version to be used by the application pool. Only available on IIS7, ignored on IIS6.
See <a href="http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/applicationPoolDefaults" target="_blank">http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/applicationPoolDefaults</a> for valid values. See <a href="http://www.iis.net/configreference/system.applicationhost/applicationpools/applicationpooldefaults" target="_blank">http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/applicationPoolDefaults</a> for valid values.
This attribute may be set via a formatted Property (e.g. [MyProperty]). This attribute may be set via a formatted Property (e.g. [MyProperty]).
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
@ -504,7 +505,7 @@
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
Contains the certificates of those that the user normally sends enveloped messages to or receives signed messages from. Contains the certificates of those that the user normally sends enveloped messages to or receives signed messages from.
See <a href="http://msdn2.microsoft.com/library/aa388160.aspx" target="_blank">MSDN documentation</a> for more information. See <a href="http://msdn.microsoft.com/library/aa388160.aspx" target="_blank">MSDN documentation</a> for more information.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
</xs:enumeration> </xs:enumeration>
@ -512,7 +513,7 @@
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
Contains the certificates of those directly trusted people and resources. Contains the certificates of those directly trusted people and resources.
See <a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.storename.aspxx" target="_blank">MSDN documentation</a> for more information. See <a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.storename.aspx" target="_blank">MSDN documentation</a> for more information.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
</xs:enumeration> </xs:enumeration>
@ -520,7 +521,7 @@
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
Contains the certificates of those publishers who are trusted. Contains the certificates of those publishers who are trusted.
See <a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.storename.aspxx" target="_blank">MSDN documentation</a> for more information. See <a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.storename.aspx" target="_blank">MSDN documentation</a> for more information.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
</xs:enumeration> </xs:enumeration>
@ -841,8 +842,9 @@
<xs:documentation>Defines a subdirectory within an IIS web site. When this element is a child of WebSite, the web directory is defined within that web site. Otherwise the web directory must reference a WebSite element via the WebSite attribute.</xs:documentation> <xs:documentation>Defines a subdirectory within an IIS web site. When this element is a child of WebSite, the web directory is defined within that web site. Otherwise the web directory must reference a WebSite element via the WebSite attribute.</xs:documentation>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
<xs:choice> <xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="WebDirProperties" minOccurs="0"/> <xs:element ref="WebApplication" minOccurs="0" maxOccurs="1" />
<xs:element ref="WebDirProperties" minOccurs="0" maxOccurs="1" />
</xs:choice> </xs:choice>
<xs:attribute name="Id" use="required" type="xs:string"/> <xs:attribute name="Id" use="required" type="xs:string"/>
<xs:attribute name="WebSite" type="xs:string"> <xs:attribute name="WebSite" type="xs:string">

View file

@ -23,7 +23,7 @@
<xs:documentation> <xs:documentation>
Improves the performance of managed applications by creating native images. Improves the performance of managed applications by creating native images.
Requires the .NET Framework 2.0 or newer to be installed on the target machine since Requires the .NET Framework 2.0 or newer to be installed on the target machine since
it runs <html:a href="http://msdn2.microsoft.com/en-us/library/6t9t5wcf.aspx">NGen</html:a>. it runs <html:a href="http://msdn.microsoft.com/en-us/library/6t9t5wcf.aspx">NGen</html:a>.
</xs:documentation> </xs:documentation>
<xs:appinfo> <xs:appinfo>
<xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="File" /> <xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="File" />

View file

@ -49,7 +49,7 @@
</html:dd> </html:dd>
</html:dl> </html:dl>
</xse:remarks> </xse:remarks>
<xse:seeAlso ref="User"/> <xse:seeAlso namespace="http://schemas.microsoft.com/wix/UtilExtension" ref="User"/>
</xs:appinfo> </xs:appinfo>
<xs:documentation>SQL Database</xs:documentation> <xs:documentation>SQL Database</xs:documentation>
</xs:annotation> </xs:annotation>

View file

@ -28,18 +28,18 @@
<xs:extension base="xs:string"> <xs:extension base="xs:string">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
Condition that determines if the application should be closed. Must be blank or evaluate to true Condition that determines if the application should be closed. Must be blank or evaluate to true
for the application to be scheduled for closing. for the application to be scheduled for closing.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
<xs:attribute name="Id" type="xs:string" use="required"> <xs:attribute name="Id" type="xs:string">
<xs:annotation> <xs:annotation>
<xs:documentation>Identifier for the close application (primary key).</xs:documentation> <xs:documentation>Identifier for the close application (primary key). If the Id is not specified, one will be generated.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="Target" type="xs:string" use="required"> <xs:attribute name="Target" type="xs:string" use="required">
<xs:annotation> <xs:annotation>
<xs:documentation>Name of the exectuable to be closed. This should only be file name.</xs:documentation> <xs:documentation>Name of the exectuable to be closed. This should only be the file name.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="Description" type="xs:string"> <xs:attribute name="Description" type="xs:string">
@ -57,14 +57,34 @@
<xs:documentation>Optionally sends a close message to the application. Default is no.</xs:documentation> <xs:documentation>Optionally sends a close message to the application. Default is no.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="EndSessionMessage" type="YesNoType">
<xs:annotation>
<xs:documentation>Sends WM_QUERYENDSESSION then WM_ENDSESSION messages to the application. Default is "no".</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="ElevatedCloseMessage" type="YesNoType"> <xs:attribute name="ElevatedCloseMessage" type="YesNoType">
<xs:annotation> <xs:annotation>
<xs:documentation>Optionally sends a close message to the application from deffered action without impersonation. Default is no.</xs:documentation> <xs:documentation>Optionally sends a close message to the application from deffered action without impersonation. Default is no.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="ElevatedEndSessionMessage" type="YesNoType">
<xs:annotation>
<xs:documentation>Sends WM_QUERYENDSESSION then WM_ENDSESSION messages to the application from a deffered action without impersonation. Default is "no".</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="RebootPrompt" type="YesNoType"> <xs:attribute name="RebootPrompt" type="YesNoType">
<xs:annotation> <xs:annotation>
<xs:documentation>Optionally prompts for reboot if application is still running. Default is yes.</xs:documentation> <xs:documentation>Optionally prompts for reboot if application is still running. The default is "yes". The TerminateProcess attribute must be "no" or not specified if this attribute is "yes".</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="PromptToContinue" type="YesNoType">
<xs:annotation>
<xs:documentation>
When this attribute is set to "yes", the user will be prompted when the application is still running. The Description attribute must contain the message to
display in the prompt. The prompt occurs before executing any of the other options and gives the options to "Abort", "Retry", or "Ignore". Abort will cancel
the install. Retry will attempt the check again and if the application is still running, prompt again. "Ignore" will continue and execute any other options
set on the CloseApplication element. The default is "no".
</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="Property" type="xs:string"> <xs:attribute name="Property" type="xs:string">
@ -72,6 +92,22 @@
<xs:documentation>Property to be set if application is still running. Useful for launch conditions or to conditionalize custom UI to ask user to shut down apps.</xs:documentation> <xs:documentation>Property to be set if application is still running. Useful for launch conditions or to conditionalize custom UI to ask user to shut down apps.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="TerminateProcess" type="xs:integer">
<xs:annotation>
<xs:documentation>
Attempts to terminates process and return the specified exit code if application is still running after sending any requested close and/or end session messages.
If this attribute is specified, the RebootPrompt attribute must be "no". The default is "no".
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Timeout" type="xs:integer">
<xs:annotation>
<xs:documentation>
Optional time in seconds to wait for the application to exit after the close and/or end session messages. If the application is still running after the timeout then
the RebootPrompt or TerminateProcess attributes will be considered. The default value is "5" seconds.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension> </xs:extension>
</xs:simpleContent> </xs:simpleContent>
</xs:complexType> </xs:complexType>
@ -463,7 +499,7 @@
<xs:annotation> <xs:annotation>
<xs:appinfo> <xs:appinfo>
<xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="Component" /> <xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="Component" />
<xse:howtoRef href="create_internet_shortcut.htm">How To: Create a shortcut to a webpage</xse:howtoRef> <xse:howtoRef href="files_and_registry/create_internet_shortcut.html">How To: Create a shortcut to a webpage</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
<xs:documentation>Creates a shortcut to a URL.</xs:documentation> <xs:documentation>Creates a shortcut to a URL.</xs:documentation>
</xs:annotation> </xs:annotation>
@ -620,7 +656,12 @@
<xs:appinfo> <xs:appinfo>
<xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="File" /> <xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="File" />
</xs:appinfo> </xs:appinfo>
<xs:documentation>Used to install Perfmon Counter Manifests.</xs:documentation> <xs:documentation>
Used to install Perfmon Counter Manifests.
Note that this functionality cannot be used with major upgrades that are scheduled after the InstallExecute,
InstallExecuteAgain, or InstallFinalize actions. For more information on major upgrade scheduling, see
<html:a href="http://msdn.microsoft.com/en-us/library/aa371197.aspx">RemoveExistingProducts Action</html:a>.
</xs:documentation>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
<xs:attribute name="ResourceFileDirectory" type="xs:string" use="optional"> <xs:attribute name="ResourceFileDirectory" type="xs:string" use="optional">
@ -658,12 +699,10 @@
<xs:element name="PermissionEx"> <xs:element name="PermissionEx">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
Sets ACLs on File, Registry, CreateFolder, or ServiceInstall. When under a Registry element, this cannot be used Sets ACLs on File, Registry, CreateFolder, or ServiceInstall. When under a Registry element, this cannot be used
if the Action attribute's value is remove or removeKeyOnInstall. This element has no Id attribute. if the Action attribute's value is remove or removeKeyOnInstall. This element has no Id attribute.
The table and key are taken from the parent element. To use PermissionEx with an IA-64 MSI, you must The table and key are taken from the parent element.
compile all of your source files with the "-arch ia64" switch, to ensure the IA-64 custom action is used, and not </xs:documentation>
the x64 custom action.
</xs:documentation>
<xs:appinfo> <xs:appinfo>
<xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="CreateFolder" /> <xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="CreateFolder" />
<xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="File" /> <xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="File" />
@ -785,9 +824,19 @@
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
<xs:attributeGroup ref="SearchCommonAttributes" /> <xs:attributeGroup ref="SearchCommonAttributes" />
<xs:attribute name="Guid" type="xs:string" use="required"> <xs:attribute name="Guid" type="xs:string">
<xs:annotation> <xs:annotation>
<xs:documentation>ProductCode to search for.</xs:documentation> <xs:documentation>The Guid attribute has been deprecated; use the ProductCode or UpgradeCode attribute instead. If this attribute is used, it is assumed to be a ProductCode.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="ProductCode" type="xs:string">
<xs:annotation>
<xs:documentation>The ProductCode to use for the search. This attribute must be omitted if UpgradeCode is specified.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="UpgradeCode" type="xs:string">
<xs:annotation>
<xs:documentation>The UpgradeCode to use for the search. This attribute must be omitted if ProductCode is specified. Note that if multiple products are found, the highest versioned product will be used for the result.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="Result"> <xs:attribute name="Result">
@ -810,7 +859,7 @@
</xs:enumeration> </xs:enumeration>
<xs:enumeration value="state"> <xs:enumeration value="state">
<xs:annotation> <xs:annotation>
<xs:documentation>Saves the state of the product: advertised (1), absent (2), or locally installed (3).</xs:documentation> <xs:documentation>Saves the state of the product: advertised (1), absent (2), or locally installed (5).</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:enumeration> </xs:enumeration>
<xs:enumeration value="assignment"> <xs:enumeration value="assignment">
@ -848,7 +897,7 @@
create properties for the Directory hierarchy in your package until later, in the CostFinalize action.</html:p> create properties for the Directory hierarchy in your package until later, in the CostFinalize action.</html:p>
<html:p>An easy workaround for a typical use case of removing a folder during uninstall is to write the directory <html:p>An easy workaround for a typical use case of removing a folder during uninstall is to write the directory
path to the registry and to load it during uninstall. See path to the registry and to load it during uninstall. See
<html:a href="http://robmensching.com/blog/posts/2010/5/2/The-WiX-toolsets-Remember-Property-pattern">The WiX toolset's "Remember Property" pattern</html:a> <html:a href="http://robmensching.com/blog/posts/2010/5/2/the-wix-toolsets-remember-property-pattern">The WiX toolset's "Remember Property" pattern</html:a>
for an example.</html:p> for an example.</html:p>
<html:p>If you use custom actions to set properties, ensure that they are scheduled before the WixRemoveFoldersEx custom action.</html:p> <html:p>If you use custom actions to set properties, ensure that they are scheduled before the WixRemoveFoldersEx custom action.</html:p>
</xse:remarks> </xse:remarks>
@ -1162,12 +1211,12 @@
<xs:attribute name="Id" type="xs:string" use="required" /> <xs:attribute name="Id" type="xs:string" use="required" />
<xs:attribute name="Name" use="required" type="xs:string"> <xs:attribute name="Name" use="required" type="xs:string">
<xs:annotation> <xs:annotation>
<xs:documentation>A <a href="http://msdn2.microsoft.com/library/aa368609.aspx" target="_blank">Formatted</a> string that contains the name of the user account.</xs:documentation> <xs:documentation>A <a href="http://msdn.microsoft.com/library/aa368609.aspx" target="_blank">Formatted</a> string that contains the name of the user account.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="Domain" type="xs:string"> <xs:attribute name="Domain" type="xs:string">
<xs:annotation> <xs:annotation>
<xs:documentation>A <a href="http://msdn2.microsoft.com/library/aa368609.aspx" target="_blank">Formatted</a> string that contains the local machine or Active Directory domain for the user.</xs:documentation> <xs:documentation>A <a href="http://msdn.microsoft.com/library/aa368609.aspx" target="_blank">Formatted</a> string that contains the local machine or Active Directory domain for the user.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="Password" type="xs:string"> <xs:attribute name="Password" type="xs:string">
@ -1200,6 +1249,11 @@
<xs:documentation>Indicates whether or not the user can logon as a serivce. User creation can be skipped if all that is desired is to set this access right on the user.</xs:documentation> <xs:documentation>Indicates whether or not the user can logon as a serivce. User creation can be skipped if all that is desired is to set this access right on the user.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="LogonAsBatchJob" type="YesNoType">
<xs:annotation>
<xs:documentation>Indicates whether or not the user can logon as a batch job. User creation can be skipped if all that is desired is to set this access right on the user.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="UpdateIfExists" type="YesNoType"> <xs:attribute name="UpdateIfExists" type="YesNoType">
<xs:annotation> <xs:annotation>
<xs:documentation>Indicates if the user account properties should be updated if the user already exists.</xs:documentation> <xs:documentation>Indicates if the user account properties should be updated if the user already exists.</xs:documentation>
@ -1220,6 +1274,11 @@
<xs:documentation>Indicates whether or not to create the user. User creation can be skipped if all that is desired is to join a user to groups.</xs:documentation> <xs:documentation>Indicates whether or not to create the user. User creation can be skipped if all that is desired is to join a user to groups.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="Vital" type="YesNoType" default="yes">
<xs:annotation>
<xs:documentation>Indicates whether failure to create the user or add the user to a group fails the installation. The default value is "yes".</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="XmlFile"> <xs:element name="XmlFile">
@ -1553,4 +1612,4 @@
<xs:enumeration value="numberOfItemsHEX32" /> <xs:enumeration value="numberOfItemsHEX32" />
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
</xs:schema> </xs:schema>

Binary file not shown.

View file

@ -11,7 +11,10 @@
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
Schema for describing Windows Installer database files (.msi/.msm/.pcp). Schema for describing Windows Installer database files (.msi/.msm/.pcp).
</xs:documentation> </xs:documentation>
<xs:appinfo>
<xse:main />
</xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:import namespace="http://www.w3.org/1999/xhtml" /> <xs:import namespace="http://www.w3.org/1999/xhtml" />
<xs:element name="Wix"> <xs:element name="Wix">
@ -70,6 +73,7 @@
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="ApprovedExeForElevation" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="Log" minOccurs="0" maxOccurs="1" /> <xs:element ref="Log" minOccurs="0" maxOccurs="1" />
<xs:element ref="Catalog" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="Catalog" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="BootstrapperApplication" minOccurs="0" maxOccurs="1" /> <xs:element ref="BootstrapperApplication" minOccurs="0" maxOccurs="1" />
@ -251,6 +255,46 @@
</xs:anyAttribute> </xs:anyAttribute>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="ApprovedExeForElevation">
<xs:annotation>
<xs:documentation>Provides information about an .exe so that the BA can request the engine to run it elevated from any secure location.</xs:documentation>
<xs:appinfo>
<xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="Bundle" />
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:attribute name="Id" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>The identifier of the ApprovedExeForElevation element.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Key" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>
The key path.
For security purposes, the root key will be HKLM and Variables are not supported.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Value" type="xs:string">
<xs:annotation>
<xs:documentation>
The value name.
For security purposes, Variables are not supported.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Win64" type="YesNoTypeUnion">
<xs:annotation>
<xs:documentation>
Instructs the search to look in the 64-bit registry when the value is 'yes'.
When the value is 'no', the search looks in the 32-bit registry.
The default value is 'no'.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Log"> <xs:element name="Log">
<xs:annotation> <xs:annotation>
<xs:documentation>Overrides the default log settings for a bundle.</xs:documentation> <xs:documentation>Overrides the default log settings for a bundle.</xs:documentation>
@ -542,7 +586,6 @@
<xs:element ref="SlipstreamMsp" /> <xs:element ref="SlipstreamMsp" />
<xs:element ref="Payload" /> <xs:element ref="Payload" />
<xs:element ref="PayloadGroupRef" /> <xs:element ref="PayloadGroupRef" />
<xs:element ref="RemotePayload" />
<xs:any namespace="##other" processContents="lax"> <xs:any namespace="##other" processContents="lax">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
@ -617,7 +660,6 @@
<xs:element ref="MsiProperty" /> <xs:element ref="MsiProperty" />
<xs:element ref="Payload" /> <xs:element ref="Payload" />
<xs:element ref="PayloadGroupRef" /> <xs:element ref="PayloadGroupRef" />
<xs:element ref="RemotePayload" />
<xs:any namespace="##other" processContents="lax"> <xs:any namespace="##other" processContents="lax">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
@ -874,9 +916,9 @@
<xs:documentation>A condition to evaluate before installing the package. The package will only be installed if the condition evaluates to true. If the condition evaluates to false and the bundle is being installed, repaired, or modified, the package will be uninstalled.</xs:documentation> <xs:documentation>A condition to evaluate before installing the package. The package will only be installed if the condition evaluates to true. If the condition evaluates to false and the bundle is being installed, repaired, or modified, the package will be uninstalled.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="Cache" type="YesNoTypeUnion"> <xs:attribute name="Cache" type="YesNoAlwaysTypeUnion">
<xs:annotation> <xs:annotation>
<xs:documentation>Whether to cache the package.</xs:documentation> <xs:documentation>Whether to cache the package. The default is "yes".</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="CacheId" type="xs:string"> <xs:attribute name="CacheId" type="xs:string">
@ -899,7 +941,7 @@
<xs:documentation> <xs:documentation>
Specifies the description to place in the bootstrapper application data manifest for the package. By default, ExePackages Specifies the description to place in the bootstrapper application data manifest for the package. By default, ExePackages
use the FileName field from the version information, MsiPackages use the ARPCOMMENTS property, and MspPackages use use the FileName field from the version information, MsiPackages use the ARPCOMMENTS property, and MspPackages use
the Description patch metadata property. Other package types must use this attribute to define a desciption in the the Description patch metadata property. Other package types must use this attribute to define a description in the
bootstrapper application data manifest. bootstrapper application data manifest.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
@ -932,7 +974,7 @@
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
Specifies whether the package must succeed for the chain to continue. The default "yes" Specifies whether the package must succeed for the chain to continue. The default "yes"
inidicates that if the package fails then the chain will fail and rollback or stop. If indicates that if the package fails then the chain will fail and rollback or stop. If
"no" is specified then the chain will continue even if the package reports failure. "no" is specified then the chain will continue even if the package reports failure.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
@ -945,10 +987,12 @@
<xs:attribute name="SuppressSignatureVerification" type="YesNoTypeUnion"> <xs:attribute name="SuppressSignatureVerification" type="YesNoTypeUnion">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
By default, a Bundle will use a package's Authenticode signature to verify the contents. If the package does not By default, a Bundle will use the hash of a package to verify its contents. If this attribute is explicitly set to "no"
have an Authenticode signature then the Bundle will use a hash of the package instead. Set this attribute to "yes" and the package is signed with an Authenticode signature the Bundle will verify the contents of the package using the
to suppress the default behavior and force the Bundle to always use the hash of the package even when the package signature instead. Therefore, the default for this attribute could be considered to be "yes". It is unusual for "yes" to
is signed. be the default of an attribute. In this case, the default was changed in WiX v3.9 after experiencing real world issues
with Windows verifying Authenticode signatures. Since the Authenticode signatures are no more secure than hashing the
packages directly, the default was changed.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
@ -1201,9 +1245,6 @@
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element ref="RemotePayload" />
</xs:choice>
<xs:attribute name="Id" type="xs:string"> <xs:attribute name="Id" type="xs:string">
<xs:annotation> <xs:annotation>
<xs:documentation>The identifier of Payload element.</xs:documentation> <xs:documentation>The identifier of Payload element.</xs:documentation>
@ -1289,16 +1330,11 @@
</xs:element> </xs:element>
<xs:element name="RemotePayload"> <xs:element name="RemotePayload">
<xs:annotation> <xs:annotation>
<xs:documentation>Describes a information about a remote file payload that is not available at the time of building the bundle. <xs:documentation>Describes information about a remote file payload that is not available at the time of building the bundle.
The parent must specify DownloadUrl and must not specify SourceFile when using this element.</xs:documentation> The parent must specify DownloadUrl and must not specify SourceFile when using this element.</xs:documentation>
<xs:appinfo> <xs:appinfo>
<xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="BootstrapperApplication" />
<xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="ExePackage" /> <xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="ExePackage" />
<xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="MsiPackage" />
<xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="MspPackage" />
<xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="MsuPackage" /> <xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="MsuPackage" />
<xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="UX" />
<xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="Payload" />
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
@ -1314,7 +1350,7 @@
</xs:attribute> </xs:attribute>
<xs:attribute name="Description" type="xs:string" use="required"> <xs:attribute name="Description" type="xs:string" use="required">
<xs:annotation> <xs:annotation>
<xs:documentation>Description of the file from version resouces.</xs:documentation> <xs:documentation>Description of the file from version resources.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="Hash" type="HexType" use="required"> <xs:attribute name="Hash" type="HexType" use="required">
@ -1397,7 +1433,7 @@
</xs:documentation> </xs:documentation>
<xs:appinfo> <xs:appinfo>
<xse:remarks> <xse:remarks>
<html:p>You can specify any valid Windows code page by integer like 1252, or by web name like Windows-1252. See <html:a href="codepage.htm">Code Pages</html:a> for more information.</html:p> <html:p>You can specify any valid Windows code page by integer like 1252, or by web name like Windows-1252. See <html:a href="~/overview/codepage.html">Code Pages</html:a> for more information.</html:p>
</xse:remarks> </xse:remarks>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
@ -1510,7 +1546,7 @@
</xs:documentation> </xs:documentation>
<xs:appinfo> <xs:appinfo>
<xse:remarks> <xse:remarks>
<html:p>You can specify any valid Windows code by by integer like 1252, or by web name like Windows-1252. See <html:a href="codepage.htm">Code Pages</html:a> for more information.</html:p> <html:p>You can specify any valid Windows code by by integer like 1252, or by web name like Windows-1252. See <html:a href="~/overview/codepage.html">Code Pages</html:a> for more information.</html:p>
</xse:remarks> </xse:remarks>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
@ -1850,7 +1886,7 @@
</xs:documentation> </xs:documentation>
<xs:appinfo> <xs:appinfo>
<xse:remarks> <xse:remarks>
<html:p>You can specify any valid Windows code by by integer like 1252, or by web name like Windows-1252. See <html:a href="codepage.htm">Code Pages</html:a> for more information.</html:p> <html:p>You can specify any valid Windows code by by integer like 1252, or by web name like Windows-1252. See <html:a href="~/overview/codepage.html">Code Pages</html:a> for more information.</html:p>
<html:p>The ClientPatchId attribute allows you to specify an easily referenced identity that you can use in product authoring. This identity prefixes properties added by WiX to a patch transform, such as <html:i>ClientPatchId</html:i>.PatchCode and <html:i>ClientPatchId</html:i>.AllowRemoval. If the patch code GUID is auto-generated you could not reference any properties using this auto-generated prefix.</html:p> <html:p>The ClientPatchId attribute allows you to specify an easily referenced identity that you can use in product authoring. This identity prefixes properties added by WiX to a patch transform, such as <html:i>ClientPatchId</html:i>.PatchCode and <html:i>ClientPatchId</html:i>.AllowRemoval. If the patch code GUID is auto-generated you could not reference any properties using this auto-generated prefix.</html:p>
<html:p>For example, if you were planning to ship a patch referred to as "QFE1" and needed to write your own registry values for Add/Remove Programs in product authoring such as the UninstallString for this patch, you could author a RegistryValue with the name UninstallString and the value <html:code><html:nobr>[SystemFolder]msiexec.exe</html:nobr> /package [ProductCode] /uninstall [QFE1.PatchCode]</html:code>. In your patch authoring you would then set ClientPatchId to "QFE1" and WiX will add the QFE1.PatchCode property to the patch transform when the patch is created. If the Id attribute specified the patch code to be generated automatically, you could not reference the <html:i>prefix</html:i>.PatchCode property as shown above.</html:p> <html:p>For example, if you were planning to ship a patch referred to as "QFE1" and needed to write your own registry values for Add/Remove Programs in product authoring such as the UninstallString for this patch, you could author a RegistryValue with the name UninstallString and the value <html:code><html:nobr>[SystemFolder]msiexec.exe</html:nobr> /package [ProductCode] /uninstall [QFE1.PatchCode]</html:code>. In your patch authoring you would then set ClientPatchId to "QFE1" and WiX will add the QFE1.PatchCode property to the patch transform when the patch is created. If the Id attribute specified the patch code to be generated automatically, you could not reference the <html:i>prefix</html:i>.PatchCode property as shown above.</html:p>
<html:p>The summary information is automatically populated from attribute values of the Patch element including the code page. If you want to override some of these summary information properties or use a different code page for the summary information itself, author the PatchInformation element.</html:p> <html:p>The summary information is automatically populated from attribute values of the Patch element including the code page. If you want to override some of these summary information properties or use a different code page for the summary information itself, author the PatchInformation element.</html:p>
@ -2153,6 +2189,7 @@
<xs:complexType> <xs:complexType>
<xs:sequence> <xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="All" minOccurs="0" />
<xs:element ref="BinaryRef" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="BinaryRef" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="ComponentRef" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="ComponentRef" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="CustomActionRef" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="CustomActionRef" minOccurs="0" maxOccurs="unbounded" />
@ -2268,7 +2305,7 @@
</xs:documentation> </xs:documentation>
<xs:appinfo> <xs:appinfo>
<xse:remarks> <xse:remarks>
<html:p>You can specify any valid Windows code by by integer like 1252, or by web name like Windows-1252. See <html:a href="codepage.htm">Code Pages</html:a> for more information.</html:p> <html:p>You can specify any valid Windows code by by integer like 1252, or by web name like Windows-1252. See <html:a href="~/overview/codepage.html">Code Pages</html:a> for more information.</html:p>
</xse:remarks> </xse:remarks>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
@ -2291,17 +2328,17 @@
</xs:attribute> </xs:attribute>
<xs:attribute name="AllowMajorVersionMismatches" type="YesNoTypeUnion"> <xs:attribute name="AllowMajorVersionMismatches" type="YesNoTypeUnion">
<xs:annotation> <xs:annotation>
<xs:documentation>Use this to set whether the major versions between the upgrade and target images match. See <html:a href="http://msdn2.microsoft.com/library/aa370890.aspx" target="_blank">AllowProductVersionMajorMismatches</html:a> for more information.</xs:documentation> <xs:documentation>Use this to set whether the major versions between the upgrade and target images match. See <html:a href="http://msdn.microsoft.com/library/aa370890.aspx" target="_blank">AllowProductVersionMajorMismatches</html:a> for more information.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="AllowProductCodeMismatches" type="YesNoTypeUnion"> <xs:attribute name="AllowProductCodeMismatches" type="YesNoTypeUnion">
<xs:annotation> <xs:annotation>
<xs:documentation>Use this to set whether the product code between the upgrade and target images match. See <html:a href="http://msdn2.microsoft.com/library/aa370890.aspx" target="_blank">AllowProductCodeMismatches</html:a> for more information.</xs:documentation> <xs:documentation>Use this to set whether the product code between the upgrade and target images match. See <html:a href="http://msdn.microsoft.com/library/aa370890.aspx" target="_blank">AllowProductCodeMismatches</html:a> for more information.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="CleanWorkingFolder" type="YesNoTypeUnion"> <xs:attribute name="CleanWorkingFolder" type="YesNoTypeUnion">
<xs:annotation> <xs:annotation>
<xs:documentation>Use this to set whether Patchwiz should clean the temp folder when finished. See <html:a href="http://msdn2.microsoft.com/library/aa370890.aspx" target="_blank">DontRemoveTempFolderWhenFinished</html:a> for more information. </xs:documentation> <xs:documentation>Use this to set whether Patchwiz should clean the temp folder when finished. See <html:a href="http://msdn.microsoft.com/library/aa370890.aspx" target="_blank">DontRemoveTempFolderWhenFinished</html:a> for more information. </xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="Codepage" type="xs:string"> <xs:attribute name="Codepage" type="xs:string">
@ -2311,22 +2348,22 @@
</xs:attribute> </xs:attribute>
<xs:attribute name="OutputPath" type="xs:string"> <xs:attribute name="OutputPath" type="xs:string">
<xs:annotation> <xs:annotation>
<xs:documentation>The full path, including file name, of the patch package file that is to be generated. See <html:a href="http://msdn2.microsoft.com/library/aa370890.aspx" target="_blank">PatchOutputPath</html:a> for more information.</xs:documentation> <xs:documentation>The full path, including file name, of the patch package file that is to be generated. See <html:a href="http://msdn.microsoft.com/library/aa370890.aspx" target="_blank">PatchOutputPath</html:a> for more information.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="SourceList" type="xs:string"> <xs:attribute name="SourceList" type="xs:string">
<xs:annotation> <xs:annotation>
<xs:documentation>Used to locate the .msp file for the patch if the cached copy is unavailable. See <html:a href="http://msdn2.microsoft.com/library/aa370890.aspx" target="_blank">PatchSourceList</html:a> for more information.</xs:documentation> <xs:documentation>Used to locate the .msp file for the patch if the cached copy is unavailable. See <html:a href="http://msdn.microsoft.com/library/aa370890.aspx" target="_blank">PatchSourceList</html:a> for more information.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="SymbolFlags" type="xs:int"> <xs:attribute name="SymbolFlags" type="xs:int">
<xs:annotation> <xs:annotation>
<xs:documentation>An 8-digit hex integer representing the combination of patch symbol usage flags to use when creating a binary file patch. See <html:a href="http://msdn2.microsoft.com/library/aa370890.aspx" target="_blank">ApiPatchingSymbolFlags</html:a> for more information.</xs:documentation> <xs:documentation>An 8-digit hex integer representing the combination of patch symbol usage flags to use when creating a binary file patch. See <html:a href="http://msdn.microsoft.com/library/aa370890.aspx" target="_blank">ApiPatchingSymbolFlags</html:a> for more information.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="WholeFilesOnly" type="YesNoTypeUnion"> <xs:attribute name="WholeFilesOnly" type="YesNoTypeUnion">
<xs:annotation> <xs:annotation>
<xs:documentation>Use this to set whether changing files should be included in their entirety. See <html:a href="http://msdn2.microsoft.com/library/aa370890.aspx" target="_blank">IncludeWholeFilesOnly</html:a> for more information.</xs:documentation> <xs:documentation>Use this to set whether changing files should be included in their entirety. See <html:a href="http://msdn.microsoft.com/library/aa370890.aspx" target="_blank">IncludeWholeFilesOnly</html:a> for more information.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
</xs:complexType> </xs:complexType>
@ -2336,7 +2373,7 @@
<xs:documentation>Properties about the patch to be placed in the Summary Information Stream. These are visible from COM through the IStream interface, and these properties can be seen on the package in Explorer.</xs:documentation> <xs:documentation>Properties about the patch to be placed in the Summary Information Stream. These are visible from COM through the IStream interface, and these properties can be seen on the package in Explorer.</xs:documentation>
<xs:appinfo> <xs:appinfo>
<xse:remarks> <xse:remarks>
<html:p>You can specify any valid Windows code by by integer like 1252, or by web name like Windows-1252. See <html:a href="codepage.htm">Code Pages</html:a> for more information.</html:p> <html:p>You can specify any valid Windows code by by integer like 1252, or by web name like Windows-1252. See <html:a href="~/overview/codepage.html">Code Pages</html:a> for more information.</html:p>
</xse:remarks> </xse:remarks>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
@ -2931,7 +2968,7 @@
</xs:documentation> </xs:documentation>
<xs:appinfo> <xs:appinfo>
<xse:remarks> <xse:remarks>
<html:p>You can specify any valid Windows code by by integer like 1252, or by web name like Windows-1252. See <html:a href="codepage.htm">Code Pages</html:a> for more information.</html:p> <html:p>You can specify any valid Windows code by by integer like 1252, or by web name like Windows-1252. See <html:a href="~/overview/codepage.html">Code Pages</html:a> for more information.</html:p>
</xse:remarks> </xse:remarks>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
@ -3065,38 +3102,46 @@
<xs:enumeration value="x86"> <xs:enumeration value="x86">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
Set this value to declare that the package is an x86 package. Set this value to declare that the package is an x86 package.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
</xs:enumeration> </xs:enumeration>
<xs:enumeration value="ia64"> <xs:enumeration value="ia64">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
Set this value to declare that the package is an ia64 package. Set this value to declare that the package is an ia64 package.
This value requires that the InstallerVersion property be set to 200 or greater. This value requires that the InstallerVersion property be set to 200 or greater.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
</xs:enumeration> </xs:enumeration>
<xs:enumeration value="x64"> <xs:enumeration value="x64">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
Set this value to declare that the package is an x64 package. Set this value to declare that the package is an x64 package.
This value requires that the InstallerVersion property be set to 200 or greater. This value requires that the InstallerVersion property be set to 200 or greater.
</xs:documentation> </xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="arm">
<xs:annotation>
<xs:documentation>
Set this value to declare that the package is an arm package.
This value requires that the InstallerVersion property be set to 500 or greater.
</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:enumeration> </xs:enumeration>
<xs:enumeration value="intel"> <xs:enumeration value="intel">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
This value has been deprecated. Use "x86" instead. This value has been deprecated. Use "x86" instead.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
</xs:enumeration> </xs:enumeration>
<xs:enumeration value="intel64"> <xs:enumeration value="intel64">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
This value has been deprecated. Use "ia64" instead. This value has been deprecated. Use "ia64" instead.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
</xs:enumeration> </xs:enumeration>
</xs:restriction> </xs:restriction>
@ -3105,10 +3150,10 @@
<xs:attribute name="ReadOnly" type="YesNoDefaultTypeUnion"> <xs:attribute name="ReadOnly" type="YesNoDefaultTypeUnion">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
The value of this attribute conveys whether the package should be opened as read-only. The value of this attribute conveys whether the package should be opened as read-only.
A database editing tool should not modify a read-only enforced database and should A database editing tool should not modify a read-only enforced database and should
issue a warning at attempts to modify a read-only recommended database. issue a warning at attempts to modify a read-only recommended database.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="ShortNames" type="YesNoTypeUnion"> <xs:attribute name="ShortNames" type="YesNoTypeUnion">
@ -3539,7 +3584,7 @@
<xse:seeAlso ref="RegistrySearch" /> <xse:seeAlso ref="RegistrySearch" />
<xse:msiRef table="DrLocator" href="http://msdn.microsoft.com/library/aa368331.aspx" /> <xse:msiRef table="DrLocator" href="http://msdn.microsoft.com/library/aa368331.aspx" />
<xse:msiRef table="Signature" href="http://msdn.microsoft.com/library/aa371853.aspx" /> <xse:msiRef table="Signature" href="http://msdn.microsoft.com/library/aa371853.aspx" />
<xse:howtoRef href="check_the_version_number.htm">How To: Check the version number of a file during installation</xse:howtoRef> <xse:howtoRef href="files_and_registry/check_the_version_number.html">How To: Check the version number of a file during installation</xse:howtoRef>
<xse:remarks> <xse:remarks>
<html:a>When the parent DirectorySearch/@Depth attribute is greater than 0, the FileSearch/@Id attribute must be absent or the same as the parent DirectorySearch/@Id attribute value, unless the parent DirectorySearch/@AssignToProperty attribute value is 'yes'.</html:a> <html:a>When the parent DirectorySearch/@Depth attribute is greater than 0, the FileSearch/@Id attribute must be absent or the same as the parent DirectorySearch/@Id attribute value, unless the parent DirectorySearch/@AssignToProperty attribute value is 'yes'.</html:a>
</xse:remarks> </xse:remarks>
@ -3645,9 +3690,9 @@
<xse:seeAlso ref="RegistrySearch" /> <xse:seeAlso ref="RegistrySearch" />
<xse:msiRef table="DrLocator" href="http://msdn.microsoft.com/library/aa368331.aspx" /> <xse:msiRef table="DrLocator" href="http://msdn.microsoft.com/library/aa368331.aspx" />
<xse:msiRef table="Signature" href="http://msdn.microsoft.com/library/aa371853.aspx" /> <xse:msiRef table="Signature" href="http://msdn.microsoft.com/library/aa371853.aspx" />
<xse:howtoRef href="check_the_version_number.htm">How To: Check the version number of a file during installation</xse:howtoRef> <xse:howtoRef href="files_and_registry/check_the_version_number.html">How To: Check the version number of a file during installation</xse:howtoRef>
<xse:howtoRef href="directorysearchref.htm">How To: Reference another DirectorySearch element</xse:howtoRef> <xse:howtoRef href="files_and_registry/directorysearchref.html">How To: Reference another DirectorySearch element</xse:howtoRef>
<xse:howtoRef href="parentdirectorysearch.htm">How To: Get the parent directory of a file search</xse:howtoRef> <xse:howtoRef href="files_and_registry/parentdirectorysearch.html">How To: Get the parent directory of a file search</xse:howtoRef>
<xse:remarks> <xse:remarks>
<html:p>Use the AssignToProperty attribute to search for a file but set the outer property to the directory containing the file. When this attribute is set to 'yes', you may only nest a FileSearch element with a unique Id or define no child element.</html:p> <html:p>Use the AssignToProperty attribute to search for a file but set the outer property to the directory containing the file. When this attribute is set to 'yes', you may only nest a FileSearch element with a unique Id or define no child element.</html:p>
<html:a>When the parent DirectorySearch/@Depth attribute is greater than 0, the FileSearch/@Id attribute must be absent or the same as the parent DirectorySearch/@Id attribute value, unless the parent DirectorySearch/@AssignToProperty attribute value is 'yes'.</html:a> <html:a>When the parent DirectorySearch/@Depth attribute is greater than 0, the FileSearch/@Id attribute must be absent or the same as the parent DirectorySearch/@Id attribute value, unless the parent DirectorySearch/@AssignToProperty attribute value is 'yes'.</html:a>
@ -3692,7 +3737,7 @@
<xse:seeAlso ref="ComponentSearch" /> <xse:seeAlso ref="ComponentSearch" />
<xse:seeAlso ref="IniFileSearch" /> <xse:seeAlso ref="IniFileSearch" />
<xse:seeAlso ref="RegistrySearch" /> <xse:seeAlso ref="RegistrySearch" />
<xse:howtoRef href="directorysearchref.htm">How To: Reference another DirectorySearch element</xse:howtoRef> <xse:howtoRef href="files_and_registry/directorysearchref.html">How To: Reference another DirectorySearch element</xse:howtoRef>
<xse:remarks> <xse:remarks>
<html:p>A reference to another DirectorySearch element must reference the same Id, the same Parent Id, and the same Path. If any of these attribute values are different you must instead use a DirectorySearch element.</html:p> <html:p>A reference to another DirectorySearch element must reference the same Id, the same Parent Id, and the same Path. If any of these attribute values are different you must instead use a DirectorySearch element.</html:p>
</xse:remarks> </xse:remarks>
@ -3870,7 +3915,7 @@
<xse:seeAlso ref="IniFileSearch" /> <xse:seeAlso ref="IniFileSearch" />
<xse:msiRef table="RegLocator" href="http://msdn.microsoft.com/library/aa371171.aspx" /> <xse:msiRef table="RegLocator" href="http://msdn.microsoft.com/library/aa371171.aspx" />
<xse:msiRef table="Signature" href="http://msdn.microsoft.com/library/aa371853.aspx" /> <xse:msiRef table="Signature" href="http://msdn.microsoft.com/library/aa371853.aspx" />
<xse:howtoRef href="read_a_registry_entry.htm">How To: Read a registry entry during installation</xse:howtoRef> <xse:howtoRef href="files_and_registry/read_a_registry_entry.html">How To: Read a registry entry during installation</xse:howtoRef>
<xse:remarks> <xse:remarks>
<html:p> <html:p>
When the Type attribute value is 'directory' the registry value must specify the path to a directory excluding the file name. When the Type attribute value is 'directory' the registry value must specify the path to a directory excluding the file name.
@ -3975,7 +4020,12 @@
</xs:attribute> </xs:attribute>
<xs:attribute name="Win64" type="YesNoTypeUnion"> <xs:attribute name="Win64" type="YesNoTypeUnion">
<xs:annotation> <xs:annotation>
<xs:documentation>Instructs the search to look in the 64-bit registry when the value is 'yes'. When the value is 'no', the search looks in the 32-bit registry. The default value depends on the value of the Package/@Platform attribute: if the @Platform attribute value is 'x86', the default @Win64 attribute value is 'no'; otherwise, the default value is 'yes'.</xs:documentation> <xs:documentation>Instructs the search to look in the 64-bit registry when the value is 'yes'. When the value is 'no', the search looks in the 32-bit registry.
The default value is based on the platform set by the -arch switch to candle.exe
or the InstallerPlatform property in a .wixproj MSBuild project:
For x86 and ARM, the default value is 'no'.
For x64 and IA64, the default value is 'yes'.
</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
</xs:complexType> </xs:complexType>
@ -4052,7 +4102,7 @@
<xs:appinfo> <xs:appinfo>
<xse:seeAlso ref="PropertyRef" /> <xse:seeAlso ref="PropertyRef" />
<xse:msiRef table="Property" href="http://msdn.microsoft.com/library/aa370908.aspx" /> <xse:msiRef table="Property" href="http://msdn.microsoft.com/library/aa370908.aspx" />
<xse:howtoRef href="check_the_version_number.htm">How To: Check the version number of a file during installation</xse:howtoRef> <xse:howtoRef href="files_and_registry/check_the_version_number.html">How To: Check the version number of a file during installation</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
<xs:documentation>Property value for a Product or Module.</xs:documentation> <xs:documentation>Property value for a Product or Module.</xs:documentation>
</xs:annotation> </xs:annotation>
@ -4134,7 +4184,7 @@
<xs:annotation> <xs:annotation>
<xs:appinfo> <xs:appinfo>
<xse:seeAlso ref="Property" /> <xse:seeAlso ref="Property" />
<xse:howtoRef href="check_for_dotnet.htm">How To: Check for .NET Framework versions</xse:howtoRef> <xse:howtoRef href="redistributables_and_install_checks/check_for_dotnet.html">How To: Check for .NET Framework versions</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
<xs:documentation>Reference to a Property value.</xs:documentation> <xs:documentation>Reference to a Property value.</xs:documentation>
</xs:annotation> </xs:annotation>
@ -4161,7 +4211,7 @@
</xs:documentation> </xs:documentation>
<xs:appinfo> <xs:appinfo>
<xse:msiRef table="Shortcut" href="http://msdn.microsoft.com/library/aa371847.aspx" /> <xse:msiRef table="Shortcut" href="http://msdn.microsoft.com/library/aa371847.aspx" />
<xse:howtoRef href="create_start_menu_shortcut.htm">How To: Create a shortcut on the Start Menu</xse:howtoRef> <xse:howtoRef href="files_and_registry/create_start_menu_shortcut.html">How To: Create a shortcut on the Start Menu</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
@ -4625,7 +4675,7 @@
</xs:documentation> </xs:documentation>
<xs:appinfo> <xs:appinfo>
<xse:msiRef table="File" href="http://msdn.microsoft.com/library/aa368596.aspx" /> <xse:msiRef table="File" href="http://msdn.microsoft.com/library/aa368596.aspx" />
<xse:howtoRef href="add_a_file.htm">How To: Add a file to your installer</xse:howtoRef> <xse:howtoRef href="files_and_registry/add_a_file.html">How To: Add a file to your installer</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
@ -4892,7 +4942,7 @@
</xs:attribute> </xs:attribute>
<xs:attribute name="Source" type="xs:string"> <xs:attribute name="Source" type="xs:string">
<xs:annotation> <xs:annotation>
<xs:documentation>Specifies the path to the File in the build process. Overrides default source path set by parent directories and Name attribute. This attribute must be set if no source information can be gathered from parent directories. For more information, see <html:a href="specifying_source_files.htm">Specifying source files</html:a>.</xs:documentation> <xs:documentation>Specifies the path to the File in the build process. Overrides default source path set by parent directories and Name attribute. This attribute must be set if no source information can be gathered from parent directories. For more information, see <html:a href="~/howtos/general/specifying_source_files.html">Specifying source files</html:a>.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="src" type="xs:string"> <xs:attribute name="src" type="xs:string">
@ -4956,8 +5006,8 @@
</xs:documentation> </xs:documentation>
<xs:appinfo> <xs:appinfo>
<xse:msiRef table="Registry" href="http://msdn.microsoft.com/library/aa371168.aspx" /> <xse:msiRef table="Registry" href="http://msdn.microsoft.com/library/aa371168.aspx" />
<xse:howtoRef href="read_a_registry_entry.htm">How To: Read a registry entry during installation</xse:howtoRef> <xse:howtoRef href="files_and_registry/read_a_registry_entry.html">How To: Read a registry entry during installation</xse:howtoRef>
<xse:howtoRef href="write_a_registry_entry.htm">How To: Write a registry entry during installation</xse:howtoRef> <xse:howtoRef href="files_and_registry/write_a_registry_entry.html">How To: Write a registry entry during installation</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
@ -5075,7 +5125,7 @@
</xs:documentation> </xs:documentation>
<xs:appinfo> <xs:appinfo>
<xse:msiRef table="Registry" href="http://msdn.microsoft.com/library/aa371168.aspx" /> <xse:msiRef table="Registry" href="http://msdn.microsoft.com/library/aa371168.aspx" />
<xse:howtoRef href="write_a_registry_entry.htm">How To: Write a registry entry during installation</xse:howtoRef> <xse:howtoRef href="files_and_registry/write_a_registry_entry.html">How To: Write a registry entry during installation</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType mixed="true"> <xs:complexType mixed="true">
@ -6594,7 +6644,7 @@
<xs:element name="ServiceInstall"> <xs:element name="ServiceInstall">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
Adds and removes services for parent Component. Adds services for parent Component. Use the ServiceControl element to remove services.
</xs:documentation> </xs:documentation>
<xs:appinfo> <xs:appinfo>
<xse:msiRef table="ServiceInstall" href="http://msdn.microsoft.com/library/aa371637.aspx" /> <xse:msiRef table="ServiceInstall" href="http://msdn.microsoft.com/library/aa371637.aspx" />
@ -6615,7 +6665,7 @@
</xs:element> </xs:element>
<xs:element ref="ServiceDependency"> <xs:element ref="ServiceDependency">
<xs:annotation> <xs:annotation>
<xs:documentation>ordered list of dependencies when installing services</xs:documentation> <xs:documentation>Ordered list of dependencies when installing services.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:element> </xs:element>
<xs:element ref="ServiceConfig" /> <xs:element ref="ServiceConfig" />
@ -6649,7 +6699,7 @@
</xs:attribute> </xs:attribute>
<xs:attribute name="Type" use="required"> <xs:attribute name="Type" use="required">
<xs:annotation> <xs:annotation>
<xs:documentation>The Windows Installer does not currently support kernelDriver or systemDriver</xs:documentation> <xs:documentation>The Windows Installer does not currently support kernelDriver or systemDriver.</xs:documentation>
</xs:annotation> </xs:annotation>
<xs:simpleType> <xs:simpleType>
<xs:restriction base="xs:NMTOKEN"> <xs:restriction base="xs:NMTOKEN">
@ -7196,8 +7246,8 @@
<xse:msiRef table="ControlCondition" href="http://msdn.microsoft.com/library/aa368035.aspx" /> <xse:msiRef table="ControlCondition" href="http://msdn.microsoft.com/library/aa368035.aspx" />
<xse:msiRef table="Condition" href="http://msdn.microsoft.com/library/aa368014.aspx" /> <xse:msiRef table="Condition" href="http://msdn.microsoft.com/library/aa368014.aspx" />
<xse:msiRef table="LaunchCondition" href="http://msdn.microsoft.com/library/aa369752.aspx" /> <xse:msiRef table="LaunchCondition" href="http://msdn.microsoft.com/library/aa369752.aspx" />
<xse:howtoRef href="block_install_on_os.htm">How To: Block installation based on OS version</xse:howtoRef> <xse:howtoRef href="redistributables_and_install_checks/block_install_on_os.html">How To: Block installation based on OS version</xse:howtoRef>
<xse:howtoRef href="check_the_version_number.htm">How To: Check the version number of a file during installation</xse:howtoRef> <xse:howtoRef href="files_and_registry/check_the_version_number.html">How To: Check the version number of a file during installation</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
@ -7338,7 +7388,7 @@
<xse:msiRef table="Component" href="http://msdn.microsoft.com/library/aa368007.aspx" /> <xse:msiRef table="Component" href="http://msdn.microsoft.com/library/aa368007.aspx" />
<xse:msiRef table="Condition" href="http://msdn.microsoft.com/library/aa368014.aspx" /> <xse:msiRef table="Condition" href="http://msdn.microsoft.com/library/aa368014.aspx" />
<xse:msiRef table="Directory" href="http://msdn.microsoft.com/library/aa368295.aspx" /> <xse:msiRef table="Directory" href="http://msdn.microsoft.com/library/aa368295.aspx" />
<xse:howtoRef href="add_a_file.htm">How To: Add a file to your installer</xse:howtoRef> <xse:howtoRef href="files_and_registry/add_a_file.html">How To: Add a file to your installer</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
@ -7579,10 +7629,13 @@
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
Set this attribute to 'yes' to mark this as a 64-bit component. This attribute facilitates Set this attribute to 'yes' to mark this as a 64-bit component. This attribute facilitates
the installation of packages that include both 32-bit and 64-bit components. If this bit the installation of packages that include both 32-bit and 64-bit components. If this is a 64-bit
is not set, the component is registered as a 32-bit component. If this is a 64-bit component replacing a 32-bit component, set this attribute to 'yes' and assign a new GUID in the Guid attribute.
component replacing a 32-bit component, set this bit and assign a new GUID in the Guid attribute. The default value is based on the platform set by the -arch switch to candle.exe
</xs:documentation> or the InstallerPlatform property in a .wixproj MSBuild project:
For x86 and ARM, the default value is 'no'.
For x64 and IA64, the default value is 'yes'.
</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:anyAttribute namespace="##other" processContents="lax"> <xs:anyAttribute namespace="##other" processContents="lax">
@ -7634,7 +7687,7 @@
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
Used to set the default file system source for child Component elements. For more information, see Used to set the default file system source for child Component elements. For more information, see
<html:a href="specifying_source_files.htm">Specifying source files</html:a>. <html:a href="~/howtos/general/specifying_source_files.html">Specifying source files</html:a>.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
@ -7685,6 +7738,17 @@
</xs:anyAttribute> </xs:anyAttribute>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="All">
<xs:annotation>
<xs:documentation>Used only for PatchFamilies to include all changes between the baseline and upgraded packages in a patch.</xs:documentation>
<xs:appinfo>
<xse:remarks>
<html:p>Warning: this is intended for testing purposes only. Shipping a patch with all changes negates the benefits of using patch families for including only specific changes.</html:p>
<html:p>Because changing the ProductCode is not supported in a patch, the ProductCode property is automatically removed from the transform.</html:p>
</xse:remarks>
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element name="BinaryRef"> <xs:element name="BinaryRef">
<xs:annotation> <xs:annotation>
<xs:documentation>Used only for PatchFamilies to include only a binary table entry in a patch.</xs:documentation> <xs:documentation>Used only for PatchFamilies to include only a binary table entry in a patch.</xs:documentation>
@ -7730,7 +7794,7 @@
<xs:documentation>Create a reference to a Feature element in another Fragment.</xs:documentation> <xs:documentation>Create a reference to a Feature element in another Fragment.</xs:documentation>
<xs:appinfo> <xs:appinfo>
<xse:seeAlso ref="Component" /> <xse:seeAlso ref="Component" />
<xse:howtoRef href="add_a_file.htm">How To: Add a file to your installer</xse:howtoRef> <xse:howtoRef href="files_and_registry/add_a_file.html">How To: Add a file to your installer</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
@ -7767,7 +7831,7 @@
<xs:annotation> <xs:annotation>
<xs:appinfo> <xs:appinfo>
<xse:seeAlso ref="MergeRef" /> <xse:seeAlso ref="MergeRef" />
<xse:howtoRef href="install_vcredist.htm">How To: Install the Visual C++ Redistributable with your installer</xse:howtoRef> <xse:howtoRef href="redistributables_and_install_checks/install_vcredist.html">How To: Install the Visual C++ Redistributable with your installer</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
<xs:documentation>Merge directive to bring in a merge module that will be redirected to the parent directory.</xs:documentation> <xs:documentation>Merge directive to bring in a merge module that will be redirected to the parent directory.</xs:documentation>
</xs:annotation> </xs:annotation>
@ -7820,7 +7884,7 @@
<xs:annotation> <xs:annotation>
<xs:appinfo> <xs:appinfo>
<xse:seeAlso ref="Merge" /> <xse:seeAlso ref="Merge" />
<xse:howtoRef href="install_vcredist.htm">How To: Install the Visual C++ Redistributable with your installer</xse:howtoRef> <xse:howtoRef href="redistributables_and_install_checks/install_vcredist.html">How To: Install the Visual C++ Redistributable with your installer</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
<xs:documentation>Merge reference to connect a Merge Module to parent Feature</xs:documentation> <xs:documentation>Merge reference to connect a Merge Module to parent Feature</xs:documentation>
</xs:annotation> </xs:annotation>
@ -7868,7 +7932,7 @@
<xs:appinfo> <xs:appinfo>
<xse:seeAlso ref="DirectoryRef" /> <xse:seeAlso ref="DirectoryRef" />
<xse:msiRef table="Directory" href="http://msdn.microsoft.com/library/aa368295.aspx" /> <xse:msiRef table="Directory" href="http://msdn.microsoft.com/library/aa368295.aspx" />
<xse:howtoRef href="add_a_file.htm">How To: Add a file to your installer</xse:howtoRef> <xse:howtoRef href="files_and_registry/add_a_file.html">How To: Add a file to your installer</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
@ -7895,11 +7959,11 @@
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
The Component Guid Generation Seed is a guid that must be used when a Component with the generate guid directive ("*") The Component Guid Generation Seed is a guid that must be used when a Component with the generate guid directive ("*")
is not rooted in a standard Windows Installer directory (for example, ProgramFilesFolder or CommonFilesFolder, etc). is not rooted in a standard Windows Installer directory (for example, ProgramFilesFolder or CommonFilesFolder).
It is recommended that this attribute be avoided and that developers install their Components under standard It is recommended that this attribute be avoided and that developers install their Components under standard
directories with unique names instead (for example, "ProgramFilesFolder\Company Name Product Name Version"). It is directories with unique names instead (for example, "ProgramFilesFolder\Company Name Product Name Version"). It is
important to note that once a directory is assigned a Component Guid Generation Seed the value must not change until important to note that once a directory is assigned a Component Guid Generation Seed the value must not change until
the directory name changes. (and must be changed when) the path to that directory, including itself and all parent directories, changes.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
@ -7915,7 +7979,7 @@
</xs:attribute> </xs:attribute>
<xs:attribute name="FileSource" type="xs:string"> <xs:attribute name="FileSource" type="xs:string">
<xs:annotation> <xs:annotation>
<xs:documentation>Used to set the file system source for this directory's child elements. For more information, see <html:a href="specifying_source_files.htm">Specifying source files</html:a>.</xs:documentation> <xs:documentation>Used to set the file system source for this directory's child elements. For more information, see <html:a href="~/howtos/general/specifying_source_files.html">Specifying source files</html:a>.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="LongName" type="LongFileNameType"> <xs:attribute name="LongName" type="LongFileNameType">
@ -7939,7 +8003,7 @@
Do not specify this attribute (or the LongName attribute) if this directory represents Do not specify this attribute (or the LongName attribute) if this directory represents
the same directory as the parent (see the Windows Installer SDK's the same directory as the parent (see the Windows Installer SDK's
<html:a href="http://msdn2.microsoft.com/library/Aa368295.aspx" target="_blank">Directory table</html:a> <html:a href="http://msdn.microsoft.com/library/Aa368295.aspx" target="_blank">Directory table</html:a>
topic for more information about the "." operator). topic for more information about the "." operator).
In prior versions of the WiX toolset, this attribute specified the short directory name. In prior versions of the WiX toolset, this attribute specified the short directory name.
@ -8010,7 +8074,7 @@
<xs:documentation>Create a reference to a Directory element in another Fragment.</xs:documentation> <xs:documentation>Create a reference to a Directory element in another Fragment.</xs:documentation>
<xs:appinfo> <xs:appinfo>
<xse:seeAlso ref="Directory" /> <xse:seeAlso ref="Directory" />
<xse:howtoRef href="add_a_file.htm">How To: Add a file to your installer</xse:howtoRef> <xse:howtoRef href="files_and_registry/add_a_file.html">How To: Add a file to your installer</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
@ -8044,7 +8108,7 @@
</xs:attribute> </xs:attribute>
<xs:attribute name="FileSource" type="xs:string"> <xs:attribute name="FileSource" type="xs:string">
<xs:annotation> <xs:annotation>
<xs:documentation>Used to set the file system source for this DirectoryRef's child elements. For more information, see <html:a href="specifying_source_files.htm">Specifying source files</html:a>.</xs:documentation> <xs:documentation>Used to set the file system source for this DirectoryRef's child elements. For more information, see <html:a href="~/howtos/general/specifying_source_files.html">Specifying source files</html:a>.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="src" type="xs:string"> <xs:attribute name="src" type="xs:string">
@ -8095,7 +8159,7 @@
</xs:attribute> </xs:attribute>
<xs:attribute name="Property" type="xs:string" use="required"> <xs:attribute name="Property" type="xs:string" use="required">
<xs:annotation> <xs:annotation>
<xs:documentation>When the FindRelatedProducts action detects a related product installed on the system, it appends the product code to the property specified in this field. Windows Installer documentation for the <html:a href="http://msdn2.microsoft.com/library/aa372379.aspx" target="_blank">Upgrade table</html:a> states that the property specified in this field must be a public property and must be added to the <html:a href="http://msdn2.microsoft.com/library/aa371571.aspx" target="_blank">SecureCustomProperties</html:a> property. WiX automatically appends the property specified in this field to the SecureCustomProperties property when creating an MSI. Each UpgradeVersion must have a unique Property value. After the FindRelatedProducts action is run, the value of this property is a list of product codes, separated by semicolons (;), detected on the system.</xs:documentation> <xs:documentation>When the FindRelatedProducts action detects a related product installed on the system, it appends the product code to the property specified in this field. Windows Installer documentation for the <html:a href="http://msdn.microsoft.com/library/aa372379.aspx" target="_blank">Upgrade table</html:a> states that the property specified in this field must be a public property and must be added to the <html:a href="http://msdn.microsoft.com/library/aa371571.aspx" target="_blank">SecureCustomProperties</html:a> property. WiX automatically appends the property specified in this field to the SecureCustomProperties property when creating an MSI. Each UpgradeVersion must have a unique Property value. After the FindRelatedProducts action is run, the value of this property is a list of product codes, separated by semicolons (;), detected on the system.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="MigrateFeatures" type="YesNoTypeUnion"> <xs:attribute name="MigrateFeatures" type="YesNoTypeUnion">
@ -8177,7 +8241,7 @@
<xs:appinfo> <xs:appinfo>
<xse:seeAlso ref="FeatureRef" /> <xse:seeAlso ref="FeatureRef" />
<xse:msiRef table="Feature" href="http://msdn.microsoft.com/library/aa368585.aspx" /> <xse:msiRef table="Feature" href="http://msdn.microsoft.com/library/aa368585.aspx" />
<xse:howtoRef href="add_a_file.htm">How To: Add a file to your installer</xse:howtoRef> <xse:howtoRef href="files_and_registry/add_a_file.html">How To: Add a file to your installer</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
@ -8679,6 +8743,20 @@
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="MaximumCabinetSizeForLargeFileSplitting" type="xs:int">
<xs:annotation>
<xs:documentation>
Maximum size of cabinet files in megabytes for large files. This attribute is used for packaging
files that are larger than MaximumUncompressedMediaSize into smaller cabinets. If cabinet size
exceed this value, then setting this attribute will cause the file to be split into multiple
cabinets of this maximum size. For simply controlling cabinet size without file splitting use
MaximumUncompressedMediaSize attribute. Setting this attribute will disable smart cabbing feature
for this Fragment / Product. Setting WIX_MCSLFS environment variable can be used to override this
value. Minimum allowed value of this attribute is 20 MB. Maximum allowed value and the Default
value of this attribute is 2048 MB (2 GB).
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="IgnoreModularization"> <xs:element name="IgnoreModularization">
@ -8998,7 +9076,11 @@
<xs:documentation> <xs:documentation>
Specifies that a script custom action targets a 64-bit platform. Valid only when used with Specifies that a script custom action targets a 64-bit platform. Valid only when used with
the Script, VBScriptCall, and JScriptCall attributes. the Script, VBScriptCall, and JScriptCall attributes.
</xs:documentation> The default value is based on the platform set by the -arch switch to candle.exe
or the InstallerPlatform property in a .wixproj MSBuild project:
For x86 and ARM, the default value is 'no'.
For x64 and IA64, the default value is 'yes'.
</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="TerminalServerAware" type="YesNoTypeUnion"> <xs:attribute name="TerminalServerAware" type="YesNoTypeUnion">
@ -10681,8 +10763,8 @@
</xs:documentation> </xs:documentation>
<xs:appinfo> <xs:appinfo>
<xse:msiRef table="Icon" href="http://msdn.microsoft.com/library/aa369210.aspx" /> <xse:msiRef table="Icon" href="http://msdn.microsoft.com/library/aa369210.aspx" />
<xse:howtoRef href="configure_arp_appearance.htm">How To: Set your installer's icon in Add/Remove Programs</xse:howtoRef> <xse:howtoRef href="ui_and_localization/configure_arp_appearance.html">How To: Set your installer's icon in Add/Remove Programs</xse:howtoRef>
<xse:howtoRef href="create_start_menu_shortcut.htm">How To: Create a shortcut on the Start Menu</xse:howtoRef> <xse:howtoRef href="files_and_registry/create_start_menu_shortcut.html">How To: Create a shortcut on the Start Menu</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
@ -11193,7 +11275,7 @@
</xs:attribute> </xs:attribute>
<xs:attribute name="Text" type="xs:string"> <xs:attribute name="Text" type="xs:string">
<xs:annotation> <xs:annotation>
<xs:documentation>A localizable string used to set the initial text contained in a control. This attribute can contain a formatted string that is processed at install time to insert the values of properties using [PropertyName] syntax. Also supported are environment variables, file installation paths, and component installation directories; see <html:a href="http://msdn2.microsoft.com/library/aa368609.aspx" target="_blank">Formatted</html:a> for details.</xs:documentation> <xs:documentation>A localizable string used to set the initial text contained in a control. This attribute can contain a formatted string that is processed at install time to insert the values of properties using [PropertyName] syntax. Also supported are environment variables, file installation paths, and component installation directories; see <html:a href="http://msdn.microsoft.com/library/aa368609.aspx" target="_blank">Formatted</html:a> for details.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="Help" type="xs:string"> <xs:attribute name="Help" type="xs:string">
@ -12306,7 +12388,7 @@
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="ProductCode" type="xs:string" use="required"> <xs:attribute name="ProductCode" type="AutogenGuid" use="required">
<xs:annotation> <xs:annotation>
<xs:documentation>The ProductCode for this instance.</xs:documentation> <xs:documentation>The ProductCode for this instance.</xs:documentation>
</xs:annotation> </xs:annotation>
@ -12316,6 +12398,11 @@
<xs:documentation>The ProductName for this instance.</xs:documentation> <xs:documentation>The ProductName for this instance.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="UpgradeCode" type="Guid">
<xs:annotation>
<xs:documentation>The UpgradeCode for this instance.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="MajorUpgrade"> <xs:element name="MajorUpgrade">
@ -12780,6 +12867,22 @@
<xs:enumeration value="yes" /> <xs:enumeration value="yes" />
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
<xs:simpleType name="YesNoAlwaysTypeUnion">
<xs:annotation>
<xs:documentation>Values of this type will either be "always", "yes", or "no".</xs:documentation>
</xs:annotation>
<xs:union memberTypes="YesNoAlwaysType PreprocessorVariables"/>
</xs:simpleType>
<xs:simpleType name="YesNoAlwaysType">
<xs:annotation>
<xs:documentation>Values of this type will either be "always", "yes", or "no".</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="always" />
<xs:enumeration value="no" />
<xs:enumeration value="yes" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="RegistryRootType"> <xs:simpleType name="RegistryRootType">
<xs:annotation> <xs:annotation>
<xs:documentation>Values of this type represent possible registry roots.</xs:documentation> <xs:documentation>Values of this type represent possible registry roots.</xs:documentation>

View file

@ -22,10 +22,10 @@
<xs:annotation> <xs:annotation>
<xs:appinfo> <xs:appinfo>
<xse:remarks> <xse:remarks>
<html:p>You can specify any valid Windows code page by integer like 1252, or by web name like Windows-1252 or iso-8859-1. See <a href="/html/codepage.htm">Code Pages</a> for more information.</html:p> <html:p>You can specify any valid Windows code page by integer like 1252, or by web name like Windows-1252 or iso-8859-1. See <a href="~/overview/codepage.html">Code Pages</a> for more information.</html:p>
</xse:remarks> </xse:remarks>
<xse:howtoRef href="build_a_localized_version.htm">How To: Build a localized version of your installer</xse:howtoRef> <xse:howtoRef href="ui_and_localization/build_a_localized_version.html">How To: Build a localized version of your installer</xse:howtoRef>
<xse:howtoRef href="make_installer_localizable.htm">How To: Make your installer localizable</xse:howtoRef> <xse:howtoRef href="ui_and_localization/make_installer_localizable.html">How To: Make your installer localizable</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
@ -54,8 +54,8 @@
<xs:element name="String"> <xs:element name="String">
<xs:annotation> <xs:annotation>
<xs:appinfo> <xs:appinfo>
<xse:howtoRef href="build_a_localized_version.htm">How To: Build a localized version of your installer</xse:howtoRef> <xse:howtoRef href="ui_and_localization/build_a_localized_version.html">How To: Build a localized version of your installer</xse:howtoRef>
<xse:howtoRef href="make_installer_localizable.htm">How To: Make your installer localizable</xse:howtoRef> <xse:howtoRef href="ui_and_localization/make_installer_localizable.html">How To: Make your installer localizable</xse:howtoRef>
</xs:appinfo> </xs:appinfo>
</xs:annotation> </xs:annotation>
<xs:complexType mixed="true"> <xs:complexType mixed="true">

Binary file not shown.

View file

@ -15,4 +15,7 @@
<supportedRuntime version="v4.0" /> <supportedRuntime version="v4.0" />
<supportedRuntime version="v2.0.50727" /> <supportedRuntime version="v2.0.50727" />
</startup> </startup>
<runtime>
<loadFromRemoteSources enabled="true"/>
</runtime>
</configuration> </configuration>

Binary file not shown.

Binary file not shown.

View file

@ -12,4 +12,7 @@
<supportedRuntime version="v4.0" /> <supportedRuntime version="v4.0" />
<supportedRuntime version="v2.0.50727" /> <supportedRuntime version="v2.0.50727" />
</startup> </startup>
<runtime>
<loadFromRemoteSources enabled="true"/>
</runtime>
</configuration> </configuration>

Binary file not shown.

View file

@ -12,4 +12,7 @@
<supportedRuntime version="v4.0" /> <supportedRuntime version="v4.0" />
<supportedRuntime version="v2.0.50727" /> <supportedRuntime version="v2.0.50727" />
</startup> </startup>
<runtime>
<loadFromRemoteSources enabled="true"/>
</runtime>
</configuration> </configuration>

BIN
tools/WIX/lux.exe Normal file

Binary file not shown.

17
tools/WIX/lux.exe.config Normal file
View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8" ?>
<!--
<copyright file="app.config" company="Outercurve Foundation">
Copyright (c) 2004, Outercurve Foundation.
This software is released under Microsoft Reciprocal License (MS-RL).
The license and further copyright text can be found in the file
LICENSE.TXT at the root directory of the distribution.
</copyright>
-->
<configuration>
<appSettings>
<add key="extensions" value="WixDifxAppExtension;WixDirectXExtension;WixFirewallExtension;WixGamingExtension;WixIIsExtension;WixLuxExtension;WixNetFxExtension;WixSqlExtension;WixUIExtension;WixUtilExtension;WixVSExtension" />
</appSettings>
<startup>
<supportedRuntime version="v4.0" />
</startup>
</configuration>

117
tools/WIX/lux.targets Normal file
View file

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
<copyright file="lux.targets" company="Outercurve Foundation">
Copyright (c) 2004, Outercurve Foundation.
This software is released under Microsoft Reciprocal License (MS-RL).
The license and further copyright text can be found in the file
LICENSE.TXT at the root directory of the distribution.
</copyright>
-->
<Project
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="3.5">
<UsingTask TaskName="GenerateTestConsumer" AssemblyFile="$(LuxTasksPath)" />
<UsingTask TaskName="Nit" AssemblyFile="$(LuxTasksPath)" />
<PropertyGroup>
<BuildTestPackageDependsOn>Compile;_ScanForUnitTests;_GenerateTestConsumer;Link</BuildTestPackageDependsOn>
<TestDependsOn>$(BuildTestPackageDependsOn)</TestDependsOn>
</PropertyGroup>
<ItemGroup>
<GeneratedTestConsumer Include="$(OutputName)_test.wxs" />
</ItemGroup>
<Target
Name="_ScanForUnitTests">
<!--
So the Link target can do proper up-to-date checking, we need to give it the right list of
.wixobj inputs, which we get by scanning for unit tests and not generating a test consumer.
-->
<GenerateTestConsumer
InputFiles="@(CompileObjOutput);@(WixObject);@(WixLibProjects);@(_ResolvedWixLibraryPaths)"
Extensions="@(_ResolvedWixExtensionPaths)">
<Output TaskParameter="InputFragments" ItemName="FilesThatAreFragments" />
</GenerateTestConsumer>
<ItemGroup>
<CompileObjOutput
Remove="@(CompileObjOutput)" />
<CompileObjOutput
Include="
@(GeneratedTestConsumer -> '$(IntermediateOutputPath)%(Filename)$(IntermediateExt)');
@(FilesThatAreFragments);
" />
</ItemGroup>
<PropertyGroup>
<TargetName>$(OutputName)_test</TargetName>
<SuppressIces>ICE71;$(SuppressIces)</SuppressIces>
<SuppressValidation>true</SuppressValidation>
</PropertyGroup>
</Target>
<Target
Name="_GenerateTestConsumer"
Inputs="@(Compile);
@(Content);
@(_ResolvedWixExtensionPaths);
@(_ResolvedProjectReferencePaths);
$(MSBuildAllProjects)"
Outputs="@(GeneratedTestConsumer -> '$(IntermediateOutputPath)%(Filename)$(IntermediateExt)')">
<GenerateTestConsumer
InputFiles="@(CompileObjOutput);@(WixObject);@(WixLibProjects);@(_ResolvedWixLibraryPaths)"
Extensions="@(_ResolvedWixExtensionPaths)"
OutputFile="@(GeneratedTestConsumer)">
<Output TaskParameter="InputFragments" ItemName="FilesThatAreFragments" />
</GenerateTestConsumer>
<Candle
SourceFiles="@(GeneratedTestConsumer)"
AdditionalOptions="$(CompilerAdditionalOptions)"
DefineConstants="$(DefineConstants);$(SolutionDefineConstants);$(ProjectDefineConstants);$(ProjectReferenceDefineConstants)"
ExtensionDirectory="$(WixExtDir)"
Extensions="@(_ResolvedWixExtensionPaths)"
FipsCompliant="$(FipsCompliant)"
IncludeSearchPaths="$(IncludeSearchPaths)"
InstallerPlatform="$(InstallerPlatform)"
NoLogo="$(CompilerNoLogo)"
OutputFile="$(IntermediateOutputPath)"
Pedantic="$(Pedantic)"
ReferencePaths="$(ReferencePaths)"
RunAsSeparateProcess="$(RunWixToolsOutOfProc)"
ShowSourceTrace="$(ShowSourceTrace)"
SuppressAllWarnings="$(CompilerSuppressAllWarnings)"
SuppressSchemaValidation="$(CompilerSuppressSchemaValidation)"
SuppressSpecificWarnings="$(CompilerSuppressSpecificWarnings)"
ToolPath="$(WixToolPath)"
TreatWarningsAsErrors="$(CompilerTreatWarningsAsErrors)"
TreatSpecificWarningsAsErrors="$(CompilerTreatSpecificWarningsAsErrors)"
VerboseOutput="$(CompilerVerboseOutput)" />
</Target>
<Target
Name="BuildTestPackage"
Inputs="@(CompileObjOutput);
@(WixObject);
@(_ResolvedProjectReferencePaths);
@(_ResolvedWixLibraryPaths);
@(_ResolvedWixExtensionPaths);
$(MSBuildAllProjects)"
Outputs="$(TargetPath)"
DependsOnTargets="$(BuildTestPackageDependsOn)" />
<Target
Name="Test"
DependsOnTargets="$(BuildTestPackageDependsOn)">
<Nit
TestPackages="$(TargetPath)"
ToolPath="$(WixToolPath)" />
</Target>
</Project>

Some files were not shown because too many files have changed in this diff Show more