Initial code commit
This commit is contained in:
Родитель
9c66865ab3
Коммит
60d7baefb4
|
@ -0,0 +1,59 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.27130.2010
|
||||
MinimumVisualStudioVersion = 15.0.26124.0
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netfxca", "src\ca\netfxca.vcxproj", "{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}"
|
||||
EndProject
|
||||
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "netfx", "src\wixlib\netfx.wixproj", "{45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.Netfx.wixext", "src\wixext\WixToolset.Netfx.wixext.csproj", "{F774E291-0563-4DDD-B873-F5C31683CF4B}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Debug|x86.Build.0 = Debug|Win32
|
||||
{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Release|x64.ActiveCfg = Release|Win32
|
||||
{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Release|x86.ActiveCfg = Release|Win32
|
||||
{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Release|x86.Build.0 = Release|Win32
|
||||
{45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||
{45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Debug|x64.Build.0 = Debug|x64
|
||||
{45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Debug|x86.Build.0 = Debug|x86
|
||||
{45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Release|Any CPU.ActiveCfg = Release|x86
|
||||
{45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Release|x64.ActiveCfg = Release|x64
|
||||
{45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Release|x64.Build.0 = Release|x64
|
||||
{45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Release|x86.ActiveCfg = Release|x86
|
||||
{45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Release|x86.Build.0 = Release|x86
|
||||
{F774E291-0563-4DDD-B873-F5C31683CF4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F774E291-0563-4DDD-B873-F5C31683CF4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F774E291-0563-4DDD-B873-F5C31683CF4B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{F774E291-0563-4DDD-B873-F5C31683CF4B}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{F774E291-0563-4DDD-B873-F5C31683CF4B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{F774E291-0563-4DDD-B873-F5C31683CF4B}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{F774E291-0563-4DDD-B873-F5C31683CF4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F774E291-0563-4DDD-B873-F5C31683CF4B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F774E291-0563-4DDD-B873-F5C31683CF4B}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{F774E291-0563-4DDD-B873-F5C31683CF4B}.Release|x64.Build.0 = Release|Any CPU
|
||||
{F774E291-0563-4DDD-B873-F5C31683CF4B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{F774E291-0563-4DDD-B873-F5C31683CF4B}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {E4566A6B-47D0-4EA0-989A-D763AC39105D}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,13 @@
|
|||
@setlocal
|
||||
@pushd %~dp0
|
||||
|
||||
nuget restore
|
||||
|
||||
msbuild -p:Configuration=Release -t:Restore
|
||||
|
||||
msbuild -p:Configuration=Release src\test\WixToolsetTest.NetFx\WixToolsetTest.NetFx.csproj
|
||||
|
||||
msbuild -p:Configuration=Release -t:Pack src\wixext\WixToolset.NetFx.wixext.csproj
|
||||
|
||||
@popd
|
||||
@endlocal
|
|
@ -0,0 +1,29 @@
|
|||
image: Visual Studio 2017
|
||||
|
||||
version: 0.0.0.{build}
|
||||
configuration: Release
|
||||
|
||||
environment:
|
||||
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
|
||||
DOTNET_CLI_TELEMETRY_OPTOUT: 1
|
||||
NUGET_XMLDOC_MODE: skip
|
||||
|
||||
build_script:
|
||||
- appveyor.cmd
|
||||
|
||||
pull_requests:
|
||||
do_not_increment_build_number: true
|
||||
|
||||
nuget:
|
||||
disable_publish_on_pr: true
|
||||
|
||||
skip_tags: true
|
||||
|
||||
artifacts:
|
||||
- path: build\Release\**\*.nupkg
|
||||
name: nuget
|
||||
|
||||
notifications:
|
||||
- provider: Slack
|
||||
incoming_webhook:
|
||||
secure: p5xuu+4x2JHfwGDMDe5KcG1k7gZxqYc4jWVwvyNZv5cvkubPD2waJs5yXMAXZNN7Z63/3PWHb7q4KoY/99AjauYa1nZ4c5qYqRPFRBKTHfA=
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<packageSources>
|
||||
<clear />
|
||||
<add key="wixtoolset-data" value="https://ci.appveyor.com/nuget/wixtoolset-data" />
|
||||
<add key="wixtoolset-extensibility" value="https://ci.appveyor.com/nuget/wixtoolset-extensibility" />
|
||||
<add key="wixtoolset-core" value="https://ci.appveyor.com/nuget/wixtoolset-core" />
|
||||
<add key="wixtoolset-core-native" value="https://ci.appveyor.com/nuget/wixtoolset-core-native" />
|
||||
<add key="wixtoolset-dtf" value="https://ci.appveyor.com/nuget/wixtoolset-dtf" />
|
||||
<add key="wixtoolset-dutil" value="https://ci.appveyor.com/nuget/wixtoolset-dutil" />
|
||||
<add key="wixtoolset-wcautil" value="https://ci.appveyor.com/nuget/wixtoolset-wcautil" />
|
||||
<add key="wixtoolset-util-wixext" value="https://ci.appveyor.com/nuget/wixtoolset-util-wixext" />
|
||||
<add key="wixbuildtools" value="https://ci.appveyor.com/nuget/wixbuildtools" />
|
||||
<add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
|
||||
</packageSources>
|
||||
</configuration>
|
|
@ -0,0 +1,101 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<Platform Condition=" '$(Platform)' == 'AnyCPU' ">Win32</Platform>
|
||||
<BaseOutputPath>$(OutputPath)</BaseOutputPath>
|
||||
<IntDir>$(BaseIntermediateOutputPath)$(Platform)\</IntDir>
|
||||
<OutDir>$(OutputPath)$(Platform)\</OutDir>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<DisableSpecificWarnings>$(DisableSpecificCompilerWarnings)</DisableSpecificWarnings>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)inc;$(MSBuildProjectDirectory);$(IntDir);$(SqlCESdkIncludePath);$(ProjectAdditionalIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_WINDOWS;_WIN32_MSI=500;_WIN32_WINNT=0x0501;$(ArmPreprocessorDefinitions);$(UnicodePreprocessorDefinitions);_CRT_STDIO_LEGACY_WIDE_SPECIFIERS;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>precomp.h</PrecompiledHeaderFile>
|
||||
<CallingConvention>StdCall</CallingConvention>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<ExceptionHandling>false</ExceptionHandling>
|
||||
<AdditionalOptions>-YlprecompDefine</AdditionalOptions>
|
||||
<AdditionalOptions Condition=" $(PlatformToolset.StartsWith('v14')) ">/Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
|
||||
<MultiProcessorCompilation Condition=" $(NUMBER_OF_PROCESSORS) > 4 ">true</MultiProcessorCompilation>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>$(ArmPreprocessorDefinitions);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>$(ProjectAdditionalResourceIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
<Lib>
|
||||
<AdditionalLibraryDirectories>$(OutDir);$(AdditionalMultiTargetLibraryPath);$(ProjectAdditionalLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
</Lib>
|
||||
<Link>
|
||||
<SubSystem>$(ProjectSubSystem)</SubSystem>
|
||||
<ModuleDefinitionFile>$(ProjectModuleDefinitionFile)</ModuleDefinitionFile>
|
||||
<NoEntryPoint>$(ResourceOnlyDll)</NoEntryPoint>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>$(ProjectAdditionalLinkLibraries);advapi32.lib;comdlg32.lib;user32.lib;oleaut32.lib;gdi32.lib;shell32.lib;ole32.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(OutDir);$(AdditionalMultiTargetLibraryPath);$(ArmLibraryDirectories);$(ProjectAdditionalLinkLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalOptions Condition=" $(PlatformToolset.StartsWith('v14')) ">/IGNORE:4099 %(AdditionalOptions)</AdditionalOptions>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
|
||||
<ItemDefinitionGroup Condition=" '$(Platform)'=='Win32' and '$(PlatformToolset)'!='v100'">
|
||||
<ClCompile>
|
||||
<EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition=" '$(Platform)'=='arm' ">
|
||||
<ClCompile>
|
||||
<CallingConvention>CDecl</CallingConvention>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition=" '$(ConfigurationType)'=='StaticLibrary' ">
|
||||
<ClCompile>
|
||||
<DebugInformationFormat>OldStyle</DebugInformationFormat>
|
||||
<OmitDefaultLibName>true</OmitDefaultLibName>
|
||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition=" '$(Configuration)'=='Debug' ">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<PreprocessorDefinitions>_DEBUG;DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition=" '$(Configuration)'=='Debug' and '$(CLRSupport)'=='true' ">
|
||||
<ClCompile>
|
||||
<BasicRuntimeChecks></BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDll</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition=" '$(Configuration)'=='Release' ">
|
||||
<ClCompile>
|
||||
<Optimization>MinSpace</Optimization>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition=" '$(Configuration)'=='Release' and '$(CLRSupport)'=='true' ">
|
||||
<ClCompile>
|
||||
<BasicRuntimeChecks></BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDll</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition=" '$(CLRSupport)'=='true' ">
|
||||
<Link>
|
||||
<KeyFile>$(LinkKeyFile)</KeyFile>
|
||||
<DelaySign>$(LinkDelaySign)</DelaySign>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
</Project>
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<BaseIntermediateOutputPath>$(MSBuildThisFileDirectory)..\build\obj\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
|
||||
<OutputPath>$(MSBuildThisFileDirectory)..\build\$(Configuration)\</OutputPath>
|
||||
|
||||
<Authors>WiX Toolset Team</Authors>
|
||||
<Company>WiX Toolset</Company>
|
||||
<Copyright>Copyright (c) .NET Foundation and contributors. All rights reserved.</Copyright>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<WixToolsetRootFolder>$(MSBuildThisFileDirectory)..\..\</WixToolsetRootFolder>
|
||||
</PropertyGroup>
|
||||
|
||||
<Import Project="Cpp.Build.props" Condition=" '$(MSBuildProjectExtension)'=='.vcxproj' " />
|
||||
<Import Project="Custom.Build.props" Condition=" Exists('Custom.Build.props') " />
|
||||
</Project>
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<WixTargetsPath Condition=" '$(Configuration)' != 'Release' And Exists('$(MSBuildThisFileDirectory)..\..\Core\README.md') ">$(MSBuildThisFileDirectory)..\..\Core\build\Debug\net461\wix.targets</WixTargetsPath>
|
||||
|
||||
<WixToolsetUtilWixextPath Condition=" '$(Configuration)' != 'Release' And Exists('$(MSBuildThisFileDirectory)..\..\Util.wixext\README.md') ">$(MSBuildThisFileDirectory)..\..\Util.wixext\build\Debug\netstandard2.0\WixToolset.Util.wixext.dll</WixToolsetUtilWixextPath>
|
||||
</PropertyGroup>
|
||||
</Project>
|
|
@ -0,0 +1,7 @@
|
|||
#pragma once
|
||||
// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
|
||||
|
||||
|
||||
const UINT COST_NGEN_BLOCKING = 5000;
|
||||
const UINT COST_NGEN_NONBLOCKING = 500;
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
/********************************************************************
|
||||
DllMain - standard entry point for all WiX CustomActions
|
||||
|
||||
********************************************************************/
|
||||
extern "C" BOOL WINAPI DllMain(
|
||||
IN HINSTANCE hInst,
|
||||
IN ULONG ulReason,
|
||||
IN LPVOID)
|
||||
{
|
||||
switch(ulReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
WcaGlobalInitialize(hInst);
|
||||
break;
|
||||
|
||||
case DLL_PROCESS_DETACH:
|
||||
WcaGlobalFinalize();
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
|
@ -0,0 +1,823 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
#define NGEN_DEBUG 0x0001
|
||||
#define NGEN_NODEP 0x0002
|
||||
#define NGEN_PROFILE 0x0004
|
||||
#define NGEN_32BIT 0x0008
|
||||
#define NGEN_64BIT 0x0010
|
||||
|
||||
#define NGEN_TIMEOUT 60000 // 60 seconds
|
||||
|
||||
// If you change one of these strings, be sure to change the appropriate EmptyFormattedLength variable right below
|
||||
LPCWSTR vpwzUnformattedQuotedFile = L"\"[#%s]\"";
|
||||
LPCWSTR vpwzUnformattedQuotedDirectory = L"\"[%s]\\\"";
|
||||
|
||||
// These represent the length of the above strings in the case that the property resolves to an empty string
|
||||
const DWORD EMPTY_FORMATTED_LENGTH_QUOTED_FILE = 2;
|
||||
const DWORD EMPTY_FORMATTED_LENGTH_QUOTED_DIRECTORY = 3;
|
||||
|
||||
LPCWSTR vcsFileId =
|
||||
L"SELECT `File` FROM `File` WHERE `File`=?";
|
||||
enum eFileId { fiFile = 1 };
|
||||
|
||||
LPCWSTR vcsNgenQuery =
|
||||
L"SELECT `NetFxNativeImage`.`File_`, `NetFxNativeImage`.`NetFxNativeImage`, `NetFxNativeImage`.`Priority`, `NetFxNativeImage`.`Attributes`, `NetFxNativeImage`.`File_Application`, `NetFxNativeImage`.`Directory_ApplicationBase`, `File`.`Component_` "
|
||||
L"FROM `NetFxNativeImage`, `File` WHERE `File`.`File`=`NetFxNativeImage`.`File_`";
|
||||
enum eNgenQuery { ngqFile = 1, ngqId, ngqPriority, ngqAttributes, ngqFileApp, ngqDirAppBase, ngqComponent };
|
||||
|
||||
LPCWSTR vcsNgenGac =
|
||||
L"SELECT `MsiAssembly`.`File_Application` "
|
||||
L"FROM `File`, `MsiAssembly` WHERE `File`.`Component_`=`MsiAssembly`.`Component_` AND `File`.`File`=?";
|
||||
enum eNgenGac { nggApplication = 1 };
|
||||
|
||||
LPCWSTR vcsNgenStrongName =
|
||||
L"SELECT `Name`,`Value` FROM `MsiAssemblyName` WHERE `Component_`=?";
|
||||
enum eNgenStrongName { ngsnName = 1, ngsnValue };
|
||||
|
||||
// Searches subdirectories of the given path for the highest version of ngen.exe available
|
||||
static HRESULT GetNgenVersion(
|
||||
__in LPWSTR pwzParentPath,
|
||||
__out LPWSTR* ppwzVersion
|
||||
)
|
||||
{
|
||||
Assert(pwzParentPath);
|
||||
|
||||
HRESULT hr = S_OK;
|
||||
DWORD dwError = 0;
|
||||
DWORD dwNgenFileFlags = 0;
|
||||
|
||||
LPWSTR pwzVersionSearch = NULL;
|
||||
LPWSTR pwzNgen = NULL;
|
||||
LPWSTR pwzTemp = NULL;
|
||||
LPWSTR pwzTempVersion = NULL;
|
||||
DWORD dwMaxMajorVersion = 0; // This stores the highest major version we've seen so far
|
||||
DWORD dwMaxMinorVersion = 0; // This stores the minor version of the highest major version we've seen so far
|
||||
DWORD dwMajorVersion = 0; // This stores the major version of the directory we're currently considering
|
||||
DWORD dwMinorVersion = 0; // This stores the minor version of the directory we're currently considering
|
||||
BOOL fFound = TRUE;
|
||||
WIN32_FIND_DATAW wfdVersionDirectories;
|
||||
HANDLE hFind = INVALID_HANDLE_VALUE;
|
||||
|
||||
hr = StrAllocFormatted(&pwzVersionSearch, L"%s*", pwzParentPath);
|
||||
ExitOnFailure(hr, "failed to create outer directory search string from string %ls", pwzParentPath);
|
||||
hFind = FindFirstFileW(pwzVersionSearch, &wfdVersionDirectories);
|
||||
if (hFind == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
ExitWithLastError(hr, "failed to call FindFirstFileW with string %ls", pwzVersionSearch);
|
||||
}
|
||||
|
||||
while (fFound)
|
||||
{
|
||||
pwzTempVersion = (LPWSTR)&(wfdVersionDirectories.cFileName);
|
||||
|
||||
// Explicitly exclude v1.1.4322, which isn't backwards compatible and is not supported
|
||||
if (wfdVersionDirectories.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
||||
{
|
||||
if (0 != lstrcmpW(L"v1.1.4322", pwzTempVersion))
|
||||
{
|
||||
// A potential candidate directory was found to run ngen from - let's make sure ngen actually exists here
|
||||
hr = StrAllocFormatted(&pwzNgen, L"%s%s\\ngen.exe", pwzParentPath, pwzTempVersion);
|
||||
ExitOnFailure(hr, "failed to create inner ngen search string with strings %ls and %ls", pwzParentPath, pwzTempVersion);
|
||||
|
||||
// If Ngen.exe does exist as a file here, then let's check the file version
|
||||
if (FileExistsEx(pwzNgen, &dwNgenFileFlags) && (0 == (dwNgenFileFlags & FILE_ATTRIBUTE_DIRECTORY)))
|
||||
{
|
||||
hr = FileVersion(pwzNgen, &dwMajorVersion, &dwMinorVersion);
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
WcaLog(LOGMSG_VERBOSE, "Failed to get version of %ls - continuing", pwzNgen);
|
||||
}
|
||||
else if (dwMajorVersion > dwMaxMajorVersion || (dwMajorVersion == dwMaxMajorVersion && dwMinorVersion > dwMaxMinorVersion))
|
||||
{
|
||||
// If the version we found is the highest we've seen so far in this search, it will be our new best-so-far candidate
|
||||
hr = StrAllocString(ppwzVersion, pwzTempVersion, 0);
|
||||
ExitOnFailure(hr, "failed to copy temp version string %ls to version string", pwzTempVersion);
|
||||
// Add one for the backslash after the directory name
|
||||
WcaLog(LOGMSG_VERBOSE, "Found highest-so-far version of ngen.exe (in directory %ls, version %u.%u.%u.%u)", *ppwzVersion, (DWORD)HIWORD(dwMajorVersion), (DWORD)LOWORD(dwMajorVersion), (DWORD)HIWORD(dwMinorVersion), (DWORD)LOWORD(dwMinorVersion));
|
||||
|
||||
dwMaxMajorVersion = dwMajorVersion;
|
||||
dwMaxMinorVersion = dwMinorVersion;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
WcaLog(LOGMSG_VERBOSE, "Ignoring %ls because it doesn't contain the file ngen.exe", pwzTempVersion);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
WcaLog(LOGMSG_VERBOSE, "Ignoring %ls because it is from .NET Framework v1.1, which is not backwards compatible with other versions of the Framework and thus is not supported by this custom action.", pwzTempVersion);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
WcaLog(LOGMSG_VERBOSE, "Ignoring %ls because it isn't a directory", pwzTempVersion);
|
||||
}
|
||||
|
||||
fFound = FindNextFileW(hFind, &wfdVersionDirectories);
|
||||
|
||||
if (!fFound)
|
||||
{
|
||||
dwError = ::GetLastError();
|
||||
hr = (ERROR_NO_MORE_FILES == dwError) ? ERROR_SUCCESS : HRESULT_FROM_WIN32(dwError);
|
||||
ExitOnFailure(hr, "Failed to call FindNextFileW() with query %ls", pwzVersionSearch);
|
||||
}
|
||||
}
|
||||
|
||||
if (NULL == *ppwzVersion)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
|
||||
ExitOnRootFailure(hr, "Searched through all subdirectories of %ls, but failed to find any version of ngen.exe", pwzParentPath);
|
||||
}
|
||||
else
|
||||
{
|
||||
WcaLog(LOGMSG_VERBOSE, "Using highest version of ngen found, located in this subdirectory: %ls, version %u.%u.%u.%u", *ppwzVersion, (DWORD)HIWORD(dwMajorVersion), (DWORD)LOWORD(dwMajorVersion), (DWORD)HIWORD(dwMinorVersion), (DWORD)LOWORD(dwMinorVersion));
|
||||
}
|
||||
|
||||
LExit:
|
||||
if (hFind != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
if (0 == FindClose(hFind))
|
||||
{
|
||||
dwError = ::GetLastError();
|
||||
hr = HRESULT_FROM_WIN32(dwError);
|
||||
WcaLog(LOGMSG_STANDARD, "Failed to close handle created by outer FindFirstFile with error %x - continuing", hr);
|
||||
}
|
||||
hFind = INVALID_HANDLE_VALUE;
|
||||
}
|
||||
|
||||
ReleaseStr(pwzVersionSearch);
|
||||
ReleaseStr(pwzNgen);
|
||||
ReleaseStr(pwzTemp);
|
||||
// Purposely don't release pwzTempVersion, because it wasn't allocated in this function, it's just a pointer to a string inside wfdVersionDirectories
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
// Gets the path to ngen.exe
|
||||
static HRESULT GetNgenPath(
|
||||
__out LPWSTR* ppwzNgenPath,
|
||||
__in BOOL f64BitFramework
|
||||
)
|
||||
{
|
||||
Assert(ppwzNgenPath);
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
LPWSTR pwzVersion = NULL;
|
||||
LPWSTR pwzWindowsFolder = NULL;
|
||||
|
||||
hr = WcaGetProperty(L"WindowsFolder", &pwzWindowsFolder);
|
||||
ExitOnFailure(hr, "failed to get WindowsFolder property");
|
||||
|
||||
hr = StrAllocString(ppwzNgenPath, pwzWindowsFolder, 0);
|
||||
ExitOnFailure(hr, "failed to copy to NgenPath windows folder: %ls", pwzWindowsFolder);
|
||||
|
||||
if (f64BitFramework)
|
||||
{
|
||||
WcaLog(LOGMSG_VERBOSE, "Searching for ngen under 64-bit framework path");
|
||||
|
||||
hr = StrAllocConcat(ppwzNgenPath, L"Microsoft.NET\\Framework64\\", 0);
|
||||
ExitOnFailure(hr, "failed to copy platform portion of ngen path");
|
||||
}
|
||||
else
|
||||
{
|
||||
WcaLog(LOGMSG_VERBOSE, "Searching for ngen under 32-bit framework path");
|
||||
|
||||
hr = StrAllocConcat(ppwzNgenPath, L"Microsoft.NET\\Framework\\", 0);
|
||||
ExitOnFailure(hr, "failed to copy platform portion of ngen path");
|
||||
}
|
||||
|
||||
// We want to run the highest version of ngen possible, because they should be backwards compatible - so let's find the most appropriate directory now
|
||||
hr = GetNgenVersion(*ppwzNgenPath, &pwzVersion);
|
||||
ExitOnFailure(hr, "failed to search for ngen under path %ls", *ppwzNgenPath);
|
||||
|
||||
hr = StrAllocConcat(ppwzNgenPath, pwzVersion, 0);
|
||||
ExitOnFailure(hr, "failed to copy version portion of ngen path");
|
||||
|
||||
hr = StrAllocConcat(ppwzNgenPath, L"\\ngen.exe", 0);
|
||||
ExitOnFailure(hr, "failed to copy \"\\ngen.exe\" portion of ngen path");
|
||||
|
||||
LExit:
|
||||
ReleaseStr(pwzVersion);
|
||||
ReleaseStr(pwzWindowsFolder);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
||||
static HRESULT GetStrongName(
|
||||
__out LPWSTR* ppwzStrongName,
|
||||
__in LPCWSTR pwzComponent
|
||||
)
|
||||
{
|
||||
Assert(ppwzStrongName);
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
PMSIHANDLE hView = NULL;
|
||||
PMSIHANDLE hComponentRec = NULL;
|
||||
PMSIHANDLE hRec = NULL;
|
||||
|
||||
LPWSTR pwzData = NULL;
|
||||
LPWSTR pwzName = NULL;
|
||||
LPWSTR pwzVersion = NULL;
|
||||
LPWSTR pwzCulture = NULL;
|
||||
LPWSTR pwzPublicKeyToken = NULL;
|
||||
|
||||
hComponentRec = ::MsiCreateRecord(1);
|
||||
hr = WcaSetRecordString(hComponentRec, 1, pwzComponent);
|
||||
ExitOnFailure(hr, "failed to set component value in record to: %ls", pwzComponent);
|
||||
|
||||
// get the name value records for this component
|
||||
hr = WcaOpenView(vcsNgenStrongName, &hView);
|
||||
ExitOnFailure(hr, "failed to open view on NetFxNativeImage table");
|
||||
|
||||
hr = WcaExecuteView(hView, hComponentRec);
|
||||
ExitOnFailure(hr, "failed to execute strong name view");
|
||||
|
||||
while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
|
||||
{
|
||||
hr = WcaGetRecordString(hRec, ngsnName, &pwzData);
|
||||
ExitOnFailure(hr, "failed to get MsiAssemblyName.Name for component: %ls", pwzComponent);
|
||||
|
||||
if (0 == lstrcmpW(L"name", pwzData))
|
||||
{
|
||||
hr = WcaGetRecordString(hRec, ngsnValue, &pwzName);
|
||||
ExitOnFailure(hr, "failed to get MsiAssemblyName.Value for component: %ls Name: %ls", pwzComponent, pwzData);
|
||||
}
|
||||
else if (0 == lstrcmpW(L"version", pwzData))
|
||||
{
|
||||
hr = WcaGetRecordString(hRec, ngsnValue, &pwzVersion);
|
||||
ExitOnFailure(hr, "failed to get MsiAssemblyName.Value for component: %ls Name: %ls", pwzComponent, pwzData);
|
||||
}
|
||||
else if (0 == lstrcmpW(L"culture", pwzData))
|
||||
{
|
||||
hr = WcaGetRecordString(hRec, ngsnValue, &pwzCulture);
|
||||
ExitOnFailure(hr, "failed to get MsiAssemblyName.Value for component: %ls Name: %ls", pwzComponent, pwzData);
|
||||
}
|
||||
else if (0 == lstrcmpW(L"publicKeyToken", pwzData))
|
||||
{
|
||||
hr = WcaGetRecordString(hRec, ngsnValue, &pwzPublicKeyToken);
|
||||
ExitOnFailure(hr, "failed to get MsiAssemblyName.Value for component: %ls Name: %ls", pwzComponent, pwzData);
|
||||
}
|
||||
}
|
||||
if (E_NOMOREITEMS == hr)
|
||||
hr = S_OK;
|
||||
ExitOnFailure(hr, "failed while looping through all names and values in MsiAssemblyName table for component: %ls", pwzComponent);
|
||||
|
||||
hr = StrAllocFormatted(ppwzStrongName, L"\"%s, Version=%s, Culture=%s, PublicKeyToken=%s\"", pwzName, pwzVersion, pwzCulture, pwzPublicKeyToken);
|
||||
ExitOnFailure(hr, "failed to format strong name for component: %ls", pwzComponent);
|
||||
|
||||
LExit:
|
||||
ReleaseStr(pwzData);
|
||||
ReleaseStr(pwzName);
|
||||
ReleaseStr(pwzVersion);
|
||||
ReleaseStr(pwzCulture);
|
||||
ReleaseStr(pwzPublicKeyToken);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT CreateInstallCommand(
|
||||
__out LPWSTR* ppwzCommandLine,
|
||||
__in LPCWSTR pwzNgenPath,
|
||||
__in LPCWSTR pwzFile,
|
||||
__in int iPriority,
|
||||
__in int iAttributes,
|
||||
__in LPCWSTR pwzFileApp,
|
||||
__in LPCWSTR pwzDirAppBase
|
||||
)
|
||||
{
|
||||
Assert(ppwzCommandLine && pwzNgenPath && *pwzNgenPath && pwzFile && *pwzFile&& pwzFileApp && pwzDirAppBase);
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
LPWSTR pwzQueueString = NULL;
|
||||
|
||||
hr = StrAllocFormatted(ppwzCommandLine, L"%s install %s", pwzNgenPath, pwzFile);
|
||||
ExitOnFailure(hr, "failed to assemble install command line");
|
||||
|
||||
if (iPriority > 0)
|
||||
{
|
||||
hr = StrAllocFormatted(&pwzQueueString, L" /queue:%d", iPriority);
|
||||
ExitOnFailure(hr, "failed to format queue string");
|
||||
|
||||
hr = StrAllocConcat(ppwzCommandLine, pwzQueueString, 0);
|
||||
ExitOnFailure(hr, "failed to add queue string to NGEN command line");
|
||||
}
|
||||
|
||||
if (NGEN_DEBUG & iAttributes)
|
||||
{
|
||||
hr = StrAllocConcat(ppwzCommandLine, L" /Debug", 0);
|
||||
ExitOnFailure(hr, "failed to add debug to NGEN command line");
|
||||
}
|
||||
|
||||
if (NGEN_PROFILE & iAttributes)
|
||||
{
|
||||
hr = StrAllocConcat(ppwzCommandLine, L" /Profile", 0);
|
||||
ExitOnFailure(hr, "failed to add profile to NGEN command line");
|
||||
}
|
||||
|
||||
if (NGEN_NODEP & iAttributes)
|
||||
{
|
||||
hr = StrAllocConcat(ppwzCommandLine, L" /NoDependencies", 0);
|
||||
ExitOnFailure(hr, "failed to add no dependencies to NGEN command line");
|
||||
}
|
||||
|
||||
// If it's more than just two quotes around an empty string
|
||||
if (EMPTY_FORMATTED_LENGTH_QUOTED_FILE < lstrlenW(pwzFileApp))
|
||||
{
|
||||
hr = StrAllocConcat(ppwzCommandLine, L" /ExeConfig:", 0);
|
||||
ExitOnFailure(hr, "failed to add exe config to NGEN command line");
|
||||
|
||||
hr = StrAllocConcat(ppwzCommandLine, pwzFileApp, 0);
|
||||
ExitOnFailure(hr, "failed to add file app to NGEN command line");
|
||||
}
|
||||
|
||||
// If it's more than just two quotes around a backslash
|
||||
if (EMPTY_FORMATTED_LENGTH_QUOTED_DIRECTORY < lstrlenW(pwzDirAppBase))
|
||||
{
|
||||
hr = StrAllocConcat(ppwzCommandLine, L" /AppBase:", 0);
|
||||
ExitOnFailure(hr, "failed to add app base to NGEN command line");
|
||||
|
||||
hr = StrAllocConcat(ppwzCommandLine, pwzDirAppBase, 0);
|
||||
ExitOnFailure(hr, "failed to add dir app base to NGEN command line");
|
||||
}
|
||||
|
||||
LExit:
|
||||
return hr;
|
||||
}
|
||||
|
||||
/******************************************************************
|
||||
FileIdExists - checks if the file ID is found in the File table
|
||||
|
||||
returns S_OK if the file exists; S_FALSE if not; otherwise, error
|
||||
********************************************************************/
|
||||
static HRESULT FileIdExists(
|
||||
__in_opt LPCWSTR wzFile
|
||||
)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
PMSIHANDLE hView = NULL;
|
||||
PMSIHANDLE hRec = NULL;
|
||||
|
||||
if (!wzFile)
|
||||
{
|
||||
hr = S_FALSE;
|
||||
ExitFunction();
|
||||
}
|
||||
|
||||
hRec = ::MsiCreateRecord(1);
|
||||
hr = WcaSetRecordString(hRec, fiFile, wzFile);
|
||||
ExitOnFailure(hr, "failed to create a record with the file: %ls", wzFile);
|
||||
|
||||
hr = WcaTableExists(L"File");
|
||||
if (S_OK == hr)
|
||||
{
|
||||
hr = WcaOpenView(vcsFileId, &hView);
|
||||
ExitOnFailure(hr, "failed to open view on File table");
|
||||
|
||||
hr = WcaExecuteView(hView, hRec);
|
||||
ExitOnFailure(hr, "failed to execute view on File table");
|
||||
|
||||
// Reuse the same record; the handle will be released.
|
||||
hr = WcaFetchSingleRecord(hView, &hRec);
|
||||
ExitOnFailure(hr, "failed to fetch File from File table");
|
||||
}
|
||||
|
||||
LExit:
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
/******************************************************************
|
||||
SchedNetFx - entry point for NetFx Custom Action
|
||||
|
||||
********************************************************************/
|
||||
extern "C" UINT __stdcall SchedNetFx(
|
||||
__in MSIHANDLE hInstall
|
||||
)
|
||||
{
|
||||
// AssertSz(FALSE, "debug SchedNetFx");
|
||||
|
||||
HRESULT hr = S_OK;
|
||||
UINT er = ERROR_SUCCESS;
|
||||
|
||||
LPWSTR pwzInstallCustomActionData = NULL;
|
||||
LPWSTR pwzUninstallCustomActionData = NULL;
|
||||
UINT uiCost = 0;
|
||||
|
||||
PMSIHANDLE hView = NULL;
|
||||
PMSIHANDLE hRec = NULL;
|
||||
PMSIHANDLE hViewGac = NULL;
|
||||
PMSIHANDLE hRecGac = NULL;
|
||||
|
||||
LPWSTR pwzId = NULL;
|
||||
LPWSTR pwzData = NULL;
|
||||
LPWSTR pwzTemp = NULL;
|
||||
LPWSTR pwzFile = NULL;
|
||||
int iPriority = 0;
|
||||
int iAssemblyCost = 0;
|
||||
int iAttributes = 0;
|
||||
LPWSTR pwzFileApp = NULL;
|
||||
LPWSTR pwzDirAppBase = NULL;
|
||||
LPWSTR pwzComponent = NULL;
|
||||
|
||||
INSTALLSTATE isInstalled;
|
||||
INSTALLSTATE isAction;
|
||||
|
||||
LPWSTR pwz32Ngen = NULL;
|
||||
LPWSTR pwz64Ngen = NULL;
|
||||
|
||||
BOOL f32NgenExeExists = FALSE;
|
||||
BOOL f64NgenExeExists = FALSE;
|
||||
|
||||
BOOL fNeedInstallUpdate32 = FALSE;
|
||||
BOOL fNeedUninstallUpdate32 = FALSE;
|
||||
BOOL fNeedInstallUpdate64 = FALSE;
|
||||
BOOL fNeedUninstallUpdate64 = FALSE;
|
||||
|
||||
// initialize
|
||||
hr = WcaInitialize(hInstall, "SchedNetFx");
|
||||
ExitOnFailure(hr, "failed to initialize");
|
||||
|
||||
hr = GetNgenPath(&pwz32Ngen, FALSE);
|
||||
f32NgenExeExists = SUCCEEDED(hr);
|
||||
if (HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) == hr || HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) == hr)
|
||||
{
|
||||
hr = ERROR_SUCCESS;
|
||||
WcaLog(LOGMSG_STANDARD, "Failed to find 32bit ngen. No actions will be scheduled to create native images for 32bit.");
|
||||
}
|
||||
ExitOnFailure(hr, "failed to get 32bit ngen.exe path");
|
||||
|
||||
hr = GetNgenPath(&pwz64Ngen, TRUE);
|
||||
f64NgenExeExists = SUCCEEDED(hr);
|
||||
if (HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) == hr || HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) == hr)
|
||||
{
|
||||
hr = ERROR_SUCCESS;
|
||||
WcaLog(LOGMSG_STANDARD, "Failed to find 64bit ngen. No actions will be scheduled to create native images for 64bit.");
|
||||
}
|
||||
ExitOnFailure(hr, "failed to get 64bit ngen.exe path");
|
||||
|
||||
// loop through all the NetFx records
|
||||
hr = WcaOpenExecuteView(vcsNgenQuery, &hView);
|
||||
ExitOnFailure(hr, "failed to open view on NetFxNativeImage table");
|
||||
|
||||
while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
|
||||
{
|
||||
// Get Id
|
||||
hr = WcaGetRecordString(hRec, ngqId, &pwzId);
|
||||
ExitOnFailure(hr, "failed to get NetFxNativeImage.NetFxNativeImage");
|
||||
|
||||
// Get File
|
||||
hr = WcaGetRecordString(hRec, ngqFile, &pwzData);
|
||||
ExitOnFailure(hr, "failed to get NetFxNativeImage.File_ for record: %ls", pwzId);
|
||||
hr = StrAllocFormatted(&pwzTemp, vpwzUnformattedQuotedFile, pwzData);
|
||||
ExitOnFailure(hr, "failed to format file string for file: %ls", pwzData);
|
||||
hr = WcaGetFormattedString(pwzTemp, &pwzFile);
|
||||
ExitOnFailure(hr, "failed to get formatted string for file: %ls", pwzData);
|
||||
|
||||
// Get Priority
|
||||
hr = WcaGetRecordInteger(hRec, ngqPriority, &iPriority);
|
||||
ExitOnFailure(hr, "failed to get NetFxNativeImage.Priority for record: %ls", pwzId);
|
||||
|
||||
if (0 == iPriority)
|
||||
iAssemblyCost = COST_NGEN_BLOCKING;
|
||||
else
|
||||
iAssemblyCost = COST_NGEN_NONBLOCKING;
|
||||
|
||||
// Get Attributes
|
||||
hr = WcaGetRecordInteger(hRec, ngqAttributes, &iAttributes);
|
||||
ExitOnFailure(hr, "failed to get NetFxNativeImage.Attributes for record: %ls", pwzId);
|
||||
|
||||
// Get File_Application or leave pwzFileApp NULL.
|
||||
hr = WcaGetRecordFormattedString(hRec, ngqFileApp, &pwzData);
|
||||
ExitOnFailure(hr, "failed to get NetFxNativeImage.File_Application for record: %ls", pwzId);
|
||||
|
||||
// Check if the value resolves to a valid file ID.
|
||||
if (S_OK == FileIdExists(pwzData))
|
||||
{
|
||||
// Resolve the file ID to a path.
|
||||
hr = StrAllocFormatted(&pwzTemp, vpwzUnformattedQuotedFile, pwzData);
|
||||
ExitOnFailure(hr, "failed to format file application string for file: %ls", pwzData);
|
||||
|
||||
hr = WcaGetFormattedString(pwzTemp, &pwzFileApp);
|
||||
ExitOnFailure(hr, "failed to get formatted string for file application: %ls", pwzData);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Assume record formatted to a path already.
|
||||
hr = StrAllocString(&pwzFileApp, pwzData, 0);
|
||||
ExitOnFailure(hr, "failed to allocate string for file path: %ls", pwzData);
|
||||
|
||||
hr = PathEnsureQuoted(&pwzFileApp, FALSE);
|
||||
ExitOnFailure(hr, "failed to quote file path: %ls", pwzData);
|
||||
}
|
||||
|
||||
// Get Directory_ApplicationBase or leave pwzDirAppBase NULL.
|
||||
hr = WcaGetRecordFormattedString(hRec, ngqDirAppBase, &pwzData);
|
||||
ExitOnFailure(hr, "failed to get NetFxNativeImage.Directory_ApplicationBase for record: %ls", pwzId);
|
||||
|
||||
if (WcaIsUnicodePropertySet(pwzData))
|
||||
{
|
||||
// Resolve the directory ID to a path.
|
||||
hr = StrAllocFormatted(&pwzTemp, vpwzUnformattedQuotedDirectory, pwzData);
|
||||
ExitOnFailure(hr, "failed to format directory application base string for property: %ls", pwzData);
|
||||
|
||||
hr = WcaGetFormattedString(pwzTemp, &pwzDirAppBase);
|
||||
ExitOnFailure(hr, "failed to get formatted string for directory application base: %ls", pwzData);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Assume record formatted to a path already.
|
||||
hr = StrAllocString(&pwzDirAppBase, pwzData, 0);
|
||||
ExitOnFailure(hr, "failed to allocate string for directory path: %ls", pwzData);
|
||||
|
||||
hr = PathEnsureQuoted(&pwzDirAppBase, TRUE);
|
||||
ExitOnFailure(hr, "failed to quote and backslashify directory: %ls", pwzData);
|
||||
}
|
||||
|
||||
// Get Component
|
||||
hr = WcaGetRecordString(hRec, ngqComponent, &pwzComponent);
|
||||
ExitOnFailure(hr, "failed to get NetFxNativeImage.Directory_ApplicationBase for record: %ls", pwzId);
|
||||
er = ::MsiGetComponentStateW(hInstall, pwzComponent, &isInstalled, &isAction);
|
||||
ExitOnWin32Error(er, hr, "failed to get install state for Component: %ls", pwzComponent);
|
||||
|
||||
//
|
||||
// Figure out if it's going to be GAC'd. The possibility exists that no assemblies are going to be GAC'd
|
||||
// so we have to check for the MsiAssembly table first.
|
||||
//
|
||||
if (S_OK == WcaTableExists(L"MsiAssembly"))
|
||||
{
|
||||
hr = WcaOpenView(vcsNgenGac, &hViewGac);
|
||||
ExitOnFailure(hr, "failed to open view on File/MsiAssembly table");
|
||||
|
||||
hr = WcaExecuteView(hViewGac, hRec);
|
||||
ExitOnFailure(hr, "failed to execute view on File/MsiAssembly table");
|
||||
|
||||
hr = WcaFetchSingleRecord(hViewGac, &hRecGac);
|
||||
ExitOnFailure(hr, "failed to fetch File_Assembly from File/MsiAssembly table");
|
||||
|
||||
if (S_FALSE != hr)
|
||||
{
|
||||
hr = WcaGetRecordString(hRecGac, nggApplication, &pwzData);
|
||||
ExitOnFailure(hr, "failed to get MsiAssembly.File_Application");
|
||||
|
||||
// If it's in the GAC replace the file name with the strong name
|
||||
if (L'\0' == pwzData[0])
|
||||
{
|
||||
hr = GetStrongName(&pwzFile, pwzComponent);
|
||||
ExitOnFailure(hr, "failed to get strong name for component: %ls", pwzData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Schedule the work
|
||||
//
|
||||
if (!(iAttributes & NGEN_32BIT) && !(iAttributes & NGEN_64BIT))
|
||||
ExitOnFailure(hr = E_INVALIDARG, "Neither 32bit nor 64bit is specified for NGEN of file: %ls", pwzFile);
|
||||
|
||||
if (WcaIsInstalling(isInstalled, isAction) || WcaIsReInstalling(isInstalled, isAction))
|
||||
{
|
||||
if (iAttributes & NGEN_32BIT && f32NgenExeExists)
|
||||
{
|
||||
// Assemble the install command line
|
||||
hr = CreateInstallCommand(&pwzData, pwz32Ngen, pwzFile, iPriority, iAttributes, pwzFileApp, pwzDirAppBase);
|
||||
ExitOnFailure(hr, "failed to create install command line");
|
||||
|
||||
hr = WcaWriteStringToCaData(pwzData, &pwzInstallCustomActionData);
|
||||
ExitOnFailure(hr, "failed to add install command to custom action data: %ls", pwzData);
|
||||
|
||||
hr = WcaWriteIntegerToCaData(iAssemblyCost, &pwzInstallCustomActionData);
|
||||
ExitOnFailure(hr, "failed to add cost to custom action data: %ls", pwzData);
|
||||
|
||||
uiCost += iAssemblyCost;
|
||||
|
||||
fNeedInstallUpdate32 = TRUE;
|
||||
}
|
||||
|
||||
if (iAttributes & NGEN_64BIT && f64NgenExeExists)
|
||||
{
|
||||
// Assemble the install command line
|
||||
hr = CreateInstallCommand(&pwzData, pwz64Ngen, pwzFile, iPriority, iAttributes, pwzFileApp, pwzDirAppBase);
|
||||
ExitOnFailure(hr, "failed to create install command line");
|
||||
|
||||
hr = WcaWriteStringToCaData(pwzData, &pwzInstallCustomActionData); // command
|
||||
ExitOnFailure(hr, "failed to add install command to custom action data: %ls", pwzData);
|
||||
|
||||
hr = WcaWriteIntegerToCaData(iAssemblyCost, &pwzInstallCustomActionData); // cost
|
||||
ExitOnFailure(hr, "failed to add cost to custom action data: %ls", pwzData);
|
||||
|
||||
uiCost += iAssemblyCost;
|
||||
|
||||
fNeedInstallUpdate64 = TRUE;
|
||||
}
|
||||
}
|
||||
else if (WcaIsUninstalling(isInstalled, isAction))
|
||||
{
|
||||
if (iAttributes & NGEN_32BIT && f32NgenExeExists)
|
||||
{
|
||||
hr = StrAllocFormatted(&pwzData, L"%s uninstall %s", pwz32Ngen, pwzFile);
|
||||
ExitOnFailure(hr, "failed to create update 32 command line");
|
||||
|
||||
hr = WcaWriteStringToCaData(pwzData, &pwzUninstallCustomActionData); // command
|
||||
ExitOnFailure(hr, "failed to add install command to custom action data: %ls", pwzData);
|
||||
|
||||
hr = WcaWriteIntegerToCaData(COST_NGEN_NONBLOCKING, &pwzUninstallCustomActionData); // cost
|
||||
ExitOnFailure(hr, "failed to add cost to custom action data: %ls", pwzData);
|
||||
|
||||
uiCost += COST_NGEN_NONBLOCKING;
|
||||
|
||||
fNeedUninstallUpdate32 = TRUE;
|
||||
}
|
||||
|
||||
if (iAttributes & NGEN_64BIT && f64NgenExeExists)
|
||||
{
|
||||
hr = StrAllocFormatted(&pwzData, L"%s uninstall %s", pwz64Ngen, pwzFile);
|
||||
ExitOnFailure(hr, "failed to create update 64 command line");
|
||||
|
||||
hr = WcaWriteStringToCaData(pwzData, &pwzUninstallCustomActionData); // command
|
||||
ExitOnFailure(hr, "failed to add install command to custom action data: %ls", pwzData);
|
||||
|
||||
hr = WcaWriteIntegerToCaData(COST_NGEN_NONBLOCKING, &pwzUninstallCustomActionData); // cost
|
||||
ExitOnFailure(hr, "failed to add cost to custom action data: %ls", pwzData);
|
||||
|
||||
uiCost += COST_NGEN_NONBLOCKING;
|
||||
|
||||
fNeedUninstallUpdate64 = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (E_NOMOREITEMS == hr)
|
||||
hr = S_OK;
|
||||
ExitOnFailure(hr, "failed while looping through all files to create native images for");
|
||||
|
||||
// If we need 32 bit install update
|
||||
if (fNeedInstallUpdate32)
|
||||
{
|
||||
hr = StrAllocFormatted(&pwzData, L"%s update /queue", pwz32Ngen);
|
||||
ExitOnFailure(hr, "failed to create install update 32 command line");
|
||||
|
||||
hr = WcaWriteStringToCaData(pwzData, &pwzInstallCustomActionData); // command
|
||||
ExitOnFailure(hr, "failed to add install command to install custom action data: %ls", pwzData);
|
||||
|
||||
hr = WcaWriteIntegerToCaData(COST_NGEN_NONBLOCKING, &pwzInstallCustomActionData); // cost
|
||||
ExitOnFailure(hr, "failed to add cost to install custom action data: %ls", pwzData);
|
||||
|
||||
uiCost += COST_NGEN_NONBLOCKING;
|
||||
}
|
||||
|
||||
// If we need 32 bit uninstall update
|
||||
if (fNeedUninstallUpdate32)
|
||||
{
|
||||
hr = StrAllocFormatted(&pwzData, L"%s update /queue", pwz32Ngen);
|
||||
ExitOnFailure(hr, "failed to create uninstall update 32 command line");
|
||||
|
||||
hr = WcaWriteStringToCaData(pwzData, &pwzUninstallCustomActionData); // command
|
||||
ExitOnFailure(hr, "failed to add install command to uninstall custom action data: %ls", pwzData);
|
||||
|
||||
hr = WcaWriteIntegerToCaData(COST_NGEN_NONBLOCKING, &pwzUninstallCustomActionData); // cost
|
||||
ExitOnFailure(hr, "failed to add cost to uninstall custom action data: %ls", pwzData);
|
||||
|
||||
uiCost += COST_NGEN_NONBLOCKING;
|
||||
}
|
||||
|
||||
// If we need 64 bit install update
|
||||
if (fNeedInstallUpdate64)
|
||||
{
|
||||
hr = StrAllocFormatted(&pwzData, L"%s update /queue", pwz64Ngen);
|
||||
ExitOnFailure(hr, "failed to create install update 64 command line");
|
||||
|
||||
hr = WcaWriteStringToCaData(pwzData, &pwzInstallCustomActionData); // command
|
||||
ExitOnFailure(hr, "failed to add install command to install custom action data: %ls", pwzData);
|
||||
|
||||
hr = WcaWriteIntegerToCaData(COST_NGEN_NONBLOCKING, &pwzInstallCustomActionData); // cost
|
||||
ExitOnFailure(hr, "failed to add cost to install custom action data: %ls", pwzData);
|
||||
|
||||
uiCost += COST_NGEN_NONBLOCKING;
|
||||
}
|
||||
|
||||
// If we need 64 bit install update
|
||||
if (fNeedUninstallUpdate64)
|
||||
{
|
||||
hr = StrAllocFormatted(&pwzData, L"%s update /queue", pwz64Ngen);
|
||||
ExitOnFailure(hr, "failed to create uninstall update 64 command line");
|
||||
|
||||
hr = WcaWriteStringToCaData(pwzData, &pwzUninstallCustomActionData); // command
|
||||
ExitOnFailure(hr, "failed to add install command to uninstall custom action data: %ls", pwzData);
|
||||
|
||||
hr = WcaWriteIntegerToCaData(COST_NGEN_NONBLOCKING, &pwzUninstallCustomActionData); // cost
|
||||
ExitOnFailure(hr, "failed to add cost to uninstall custom action data: %ls", pwzData);
|
||||
|
||||
uiCost += COST_NGEN_NONBLOCKING;
|
||||
}
|
||||
|
||||
// Add to progress bar
|
||||
if ((pwzInstallCustomActionData && *pwzInstallCustomActionData) || (pwzUninstallCustomActionData && *pwzUninstallCustomActionData))
|
||||
{
|
||||
hr = WcaProgressMessage(uiCost, TRUE);
|
||||
ExitOnFailure(hr, "failed to extend progress bar for NetFxExecuteNativeImage");
|
||||
}
|
||||
|
||||
// Schedule the install custom action
|
||||
if (pwzInstallCustomActionData && *pwzInstallCustomActionData)
|
||||
{
|
||||
hr = WcaSetProperty(L"NetFxExecuteNativeImageInstall", pwzInstallCustomActionData);
|
||||
ExitOnFailure(hr, "failed to schedule NetFxExecuteNativeImageInstall action");
|
||||
|
||||
hr = WcaSetProperty(L"NetFxExecuteNativeImageCommitInstall", pwzInstallCustomActionData);
|
||||
ExitOnFailure(hr, "failed to schedule NetFxExecuteNativeImageCommitInstall action");
|
||||
}
|
||||
|
||||
// Schedule the uninstall custom action
|
||||
if (pwzUninstallCustomActionData && *pwzUninstallCustomActionData)
|
||||
{
|
||||
hr = WcaSetProperty(L"NetFxExecuteNativeImageUninstall", pwzUninstallCustomActionData);
|
||||
ExitOnFailure(hr, "failed to schedule NetFxExecuteNativeImageUninstall action");
|
||||
|
||||
hr = WcaSetProperty(L"NetFxExecuteNativeImageCommitUninstall", pwzUninstallCustomActionData);
|
||||
ExitOnFailure(hr, "failed to schedule NetFxExecuteNativeImageCommitUninstall action");
|
||||
}
|
||||
|
||||
|
||||
LExit:
|
||||
ReleaseStr(pwzInstallCustomActionData);
|
||||
ReleaseStr(pwzUninstallCustomActionData);
|
||||
ReleaseStr(pwzId);
|
||||
ReleaseStr(pwzData);
|
||||
ReleaseStr(pwzTemp);
|
||||
ReleaseStr(pwzFile);
|
||||
ReleaseStr(pwzFileApp);
|
||||
ReleaseStr(pwzDirAppBase);
|
||||
ReleaseStr(pwzComponent);
|
||||
ReleaseStr(pwz32Ngen);
|
||||
ReleaseStr(pwz64Ngen);
|
||||
|
||||
if (FAILED(hr))
|
||||
er = ERROR_INSTALL_FAILURE;
|
||||
return WcaFinalize(er);
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************
|
||||
ExecNetFx - entry point for NetFx Custom Action
|
||||
|
||||
*******************************************************************/
|
||||
extern "C" UINT __stdcall ExecNetFx(
|
||||
__in MSIHANDLE hInstall
|
||||
)
|
||||
{
|
||||
// AssertSz(FALSE, "debug ExecNetFx");
|
||||
|
||||
HRESULT hr = S_OK;
|
||||
UINT er = ERROR_SUCCESS;
|
||||
|
||||
LPWSTR pwzCustomActionData = NULL;
|
||||
LPWSTR pwzData = NULL;
|
||||
LPWSTR pwz = NULL;
|
||||
int iCost = 0;
|
||||
|
||||
// initialize
|
||||
hr = WcaInitialize(hInstall, "ExecNetFx");
|
||||
ExitOnFailure(hr, "failed to initialize");
|
||||
|
||||
hr = WcaGetProperty( L"CustomActionData", &pwzCustomActionData);
|
||||
ExitOnFailure(hr, "failed to get CustomActionData");
|
||||
|
||||
WcaLog(LOGMSG_TRACEONLY, "CustomActionData: %ls", pwzCustomActionData);
|
||||
|
||||
pwz = pwzCustomActionData;
|
||||
|
||||
// loop through all the passed in data
|
||||
while (pwz && *pwz)
|
||||
{
|
||||
hr = WcaReadStringFromCaData(&pwz, &pwzData);
|
||||
ExitOnFailure(hr, "failed to read command line from custom action data");
|
||||
|
||||
hr = WcaReadIntegerFromCaData(&pwz, &iCost);
|
||||
ExitOnFailure(hr, "failed to read cost from custom action data");
|
||||
|
||||
hr = QuietExec(pwzData, NGEN_TIMEOUT, TRUE, TRUE);
|
||||
// If we fail here it isn't critical - keep looping through to try to act on the other assemblies on our list
|
||||
if (FAILED(hr))
|
||||
{
|
||||
WcaLog(LOGMSG_STANDARD, "failed to execute Ngen command (with error 0x%x): %ls, continuing anyway", hr, pwzData);
|
||||
hr = S_OK;
|
||||
}
|
||||
|
||||
// Tick the progress bar along for this assembly
|
||||
hr = WcaProgressMessage(iCost, FALSE);
|
||||
ExitOnFailure(hr, "failed to tick progress bar for command line: %ls", pwzData);
|
||||
}
|
||||
|
||||
LExit:
|
||||
ReleaseStr(pwzCustomActionData);
|
||||
ReleaseStr(pwzData);
|
||||
|
||||
if (FAILED(hr))
|
||||
er = ERROR_INSTALL_FAILURE;
|
||||
return WcaFinalize(er);
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
; Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
|
||||
|
||||
|
||||
LIBRARY "netfxca"
|
||||
|
||||
EXPORTS
|
||||
SchedNetFx
|
||||
ExecNetFx
|
|
@ -0,0 +1,70 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\..\packages\WixToolset.DUtil.4.0.6\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.6\build\WixToolset.DUtil.props')" />
|
||||
<Import Project="..\..\packages\WixToolset.WcaUtil.4.0.2\build\WixToolset.WcaUtil.props" Condition="Exists('..\..\packages\WixToolset.WcaUtil.4.0.2\build\WixToolset.WcaUtil.props')" />
|
||||
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}</ProjectGuid>
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<TargetName>netfxca</TargetName>
|
||||
<PlatformToolset>v141</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<ProjectModuleDefinitionFile>netfxca.def</ProjectModuleDefinitionFile>
|
||||
<Description>WiX Toolset .NET Framework CustomAction</Description>
|
||||
</PropertyGroup>
|
||||
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
|
||||
<ImportGroup Label="Shared">
|
||||
<Import Project="..\..\packages\Microsoft.VisualStudio.Setup.Configuration.Native.1.14.114\build\native\Microsoft.VisualStudio.Setup.Configuration.Native.targets" Condition="Exists('..\..\packages\Microsoft.VisualStudio.Setup.Configuration.Native.1.14.114\build\native\Microsoft.VisualStudio.Setup.Configuration.Native.targets')" />
|
||||
</ImportGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<ProjectAdditionalLinkLibraries>msi.lib</ProjectAdditionalLinkLibraries>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ClCompile Include="dllmain.cpp">
|
||||
<PrecompiledHeader>Create</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="netfxca.cpp" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ClInclude Include="cost.h" />
|
||||
<ClInclude Include="precomp.h" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
<None Include="netfxca.def" />
|
||||
</ItemGroup>
|
||||
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\..\packages\Microsoft.VisualStudio.Setup.Configuration.Native.1.14.114\build\native\Microsoft.VisualStudio.Setup.Configuration.Native.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.VisualStudio.Setup.Configuration.Native.1.14.114\build\native\Microsoft.VisualStudio.Setup.Configuration.Native.targets'))" />
|
||||
<Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.6\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.6\build\WixToolset.DUtil.props'))" />
|
||||
<Error Condition="!Exists('..\..\packages\WixToolset.WcaUtil.4.0.2\build\WixToolset.WcaUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.WcaUtil.4.0.2\build\WixToolset.WcaUtil.props'))" />
|
||||
</Target>
|
||||
</Project>
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.VisualStudio.Setup.Configuration.Native" version="1.14.114" targetFramework="native" developmentDependency="true" />
|
||||
<package id="WixToolset.DUtil" version="4.0.6" targetFramework="native" />
|
||||
<package id="WixToolset.WcaUtil" version="4.0.2" targetFramework="native" />
|
||||
</packages>
|
|
@ -0,0 +1,13 @@
|
|||
#pragma once
|
||||
// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
|
||||
|
||||
|
||||
#include <windows.h>
|
||||
#include <msiquery.h>
|
||||
|
||||
#include "wcautil.h"
|
||||
#include "fileutil.h"
|
||||
#include "strutil.h"
|
||||
#include "pathutil.h"
|
||||
|
||||
#include "cost.h"
|
|
@ -0,0 +1,33 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
|
||||
|
||||
namespace WixToolsetTest.Netfx
|
||||
{
|
||||
using System.Linq;
|
||||
using WixBuildTools.TestSupport;
|
||||
using WixToolset.Core.TestPackage;
|
||||
using WixToolset.Netfx;
|
||||
using Xunit;
|
||||
|
||||
public class NetfxExtensionFixture
|
||||
{
|
||||
[Fact]
|
||||
public void CanBuildUsingNativeImage()
|
||||
{
|
||||
var folder = TestData.Get(@"TestData\UsingNativeImage");
|
||||
var build = new Builder(folder, typeof(NetfxExtensionFactory), new[] { folder });
|
||||
|
||||
var results = build.BuildAndQuery(Build, "NetFxNativeImage");
|
||||
Assert.Equal(new[]
|
||||
{
|
||||
"NetFxNativeImage:ExampleNgen\tfil6349_KNDJhqShNzVdHX3ihhvA6Y\t3\t8\t\t",
|
||||
}, results.OrderBy(s => s).ToArray());
|
||||
}
|
||||
|
||||
private static void Build(string[] args)
|
||||
{
|
||||
var result = WixRunner.Execute(args, out var messages);
|
||||
Assert.Equal(0, result);
|
||||
Assert.Empty(messages);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
This file contains the declaration of all the localizable strings.
|
||||
-->
|
||||
<WixLocalization xmlns="http://wixtoolset.org/schemas/v4/wxl" Culture="en-US">
|
||||
|
||||
<String Id="DowngradeError">A newer version of [ProductName] is already installed.</String>
|
||||
<String Id="FeatureTitle">MsiPackage</String>
|
||||
|
||||
</WixLocalization>
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
||||
<Product Id="*" Name="MsiPackage" Language="1033" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a">
|
||||
<Package InstallerVersion="200" Compressed="no" InstallScope="perMachine" />
|
||||
|
||||
<MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" />
|
||||
<MediaTemplate />
|
||||
|
||||
<Feature Id="ProductFeature" Title="!(loc.FeatureTitle)">
|
||||
<ComponentGroupRef Id="ProductComponents" />
|
||||
</Feature>
|
||||
|
||||
</Product>
|
||||
|
||||
<Fragment>
|
||||
<Directory Id="TARGETDIR" Name="SourceDir">
|
||||
<Directory Id="ProgramFilesFolder">
|
||||
<Directory Id="INSTALLFOLDER" Name="MsiPackage" />
|
||||
</Directory>
|
||||
</Directory>
|
||||
</Fragment>
|
||||
</Wix>
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
|
||||
xmlns:netfx="http://wixtoolset.org/schemas/v4/wxs/netfx">
|
||||
<Fragment>
|
||||
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
|
||||
<Component>
|
||||
<File Name="fake.ddl" Source="example.txt">
|
||||
<netfx:NativeImage Id="ExampleNgen" />
|
||||
</File>
|
||||
</Component>
|
||||
</ComponentGroup>
|
||||
</Fragment>
|
||||
</Wix>
|
|
@ -0,0 +1 @@
|
|||
This is example.txt.
|
|
@ -0,0 +1,40 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp2.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<NoWarn>NU1701</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="TestData\UsingNativeImage\example.txt" CopyToOutputDirectory="PreserveNewest" />
|
||||
<Content Include="TestData\UsingNativeImage\Package.en-us.wxl" CopyToOutputDirectory="PreserveNewest" />
|
||||
<Content Include="TestData\UsingNativeImage\Package.wxs" CopyToOutputDirectory="PreserveNewest" />
|
||||
<Content Include="TestData\UsingNativeImage\PackageComponents.wxs" CopyToOutputDirectory="PreserveNewest" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\wixext\WixToolset.Netfx.wixext.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="$(WixToolsetRootFolder)\Core\src\WixToolset.Core.TestPackage\WixToolset.Core.TestPackage.csproj" Condition=" '$(Configuration)' == 'Debug' And Exists('$(WixToolsetRootFolder)\Core\README.md') " />
|
||||
<ProjectReference Include="$(WixToolsetRootFolder)\Core\src\wix\wix.csproj" Condition=" '$(Configuration)' == 'Debug' And Exists('$(WixToolsetRootFolder)\Core\README.md') " />
|
||||
<PackageReference Include="WixToolset.Core.TestPackage" Version="4.0.*" Condition=" '$(Configuration)' == 'Release' Or !Exists('$(WixToolsetRootFolder)\Core\README.md') " PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="WixBuildTools.TestSupport" Version="4.0.*" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0-preview-20170628-02" />
|
||||
<PackageReference Include="xunit" Version="2.2.0" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -0,0 +1,159 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
|
||||
|
||||
namespace WixToolset.Netfx
|
||||
{
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Xml.Linq;
|
||||
using WixToolset.Data;
|
||||
using WixToolset.Extensibility;
|
||||
|
||||
/// <summary>
|
||||
/// The compiler for the WiX Toolset .NET Framework Extension.
|
||||
/// </summary>
|
||||
public sealed class NetfxCompiler : BaseCompilerExtension
|
||||
{
|
||||
public override XNamespace Namespace => "http://wixtoolset.org/schemas/v4/wxs/netfx";
|
||||
|
||||
/// <summary>
|
||||
/// Processes an element for the Compiler.
|
||||
/// </summary>
|
||||
/// <param name="parentElement">Parent element of element to process.</param>
|
||||
/// <param name="element">Element to process.</param>
|
||||
/// <param name="contextValues">Extra information about the context in which this element is being parsed.</param>
|
||||
public override void ParseElement(Intermediate intermediate, IntermediateSection section, XElement parentElement, XElement element, IDictionary<string, string> context)
|
||||
{
|
||||
switch (parentElement.Name.LocalName)
|
||||
{
|
||||
case "File":
|
||||
string fileId = context["FileId"];
|
||||
|
||||
switch (element.Name.LocalName)
|
||||
{
|
||||
case "NativeImage":
|
||||
this.ParseNativeImageElement(intermediate, section, element, fileId);
|
||||
break;
|
||||
default:
|
||||
this.ParseHelper.UnexpectedElement(parentElement, element);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
this.ParseHelper.UnexpectedElement(parentElement, element);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a NativeImage element.
|
||||
/// </summary>
|
||||
/// <param name="element">The element to parse.</param>
|
||||
/// <param name="fileId">The file identifier of the parent element.</param>
|
||||
private void ParseNativeImageElement(Intermediate intermediate, IntermediateSection section, XElement element, string fileId)
|
||||
{
|
||||
SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
|
||||
Identifier id = null;
|
||||
string appBaseDirectory = null;
|
||||
string assemblyApplication = null;
|
||||
int attributes = 0x8; // 32bit is on by default
|
||||
int priority = 3;
|
||||
|
||||
foreach (XAttribute attrib in element.Attributes())
|
||||
{
|
||||
if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
|
||||
{
|
||||
switch (attrib.Name.LocalName)
|
||||
{
|
||||
case "Id":
|
||||
id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
|
||||
break;
|
||||
case "AppBaseDirectory":
|
||||
appBaseDirectory = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
|
||||
|
||||
// See if a formatted value is specified.
|
||||
if (-1 == appBaseDirectory.IndexOf("[", StringComparison.Ordinal))
|
||||
{
|
||||
this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "Directory", appBaseDirectory);
|
||||
}
|
||||
break;
|
||||
case "AssemblyApplication":
|
||||
assemblyApplication = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
|
||||
|
||||
// See if a formatted value is specified.
|
||||
if (-1 == assemblyApplication.IndexOf("[", StringComparison.Ordinal))
|
||||
{
|
||||
this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "File", assemblyApplication);
|
||||
}
|
||||
break;
|
||||
case "Debug":
|
||||
if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
|
||||
{
|
||||
attributes |= 0x1;
|
||||
}
|
||||
break;
|
||||
case "Dependencies":
|
||||
if (YesNoType.No == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
|
||||
{
|
||||
attributes |= 0x2;
|
||||
}
|
||||
break;
|
||||
case "Platform":
|
||||
string platformValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
|
||||
if (0 < platformValue.Length)
|
||||
{
|
||||
switch (platformValue)
|
||||
{
|
||||
case "32bit":
|
||||
// 0x8 is already on by default
|
||||
break;
|
||||
case "64bit":
|
||||
attributes &= ~0x8;
|
||||
attributes |= 0x10;
|
||||
break;
|
||||
case "all":
|
||||
attributes |= 0x10;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "Priority":
|
||||
priority = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, 3);
|
||||
break;
|
||||
case "Profile":
|
||||
if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
|
||||
{
|
||||
attributes |= 0x4;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
this.ParseHelper.UnexpectedAttribute(element, attrib);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib);
|
||||
}
|
||||
}
|
||||
|
||||
if (null == id)
|
||||
{
|
||||
this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Id"));
|
||||
}
|
||||
|
||||
this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
|
||||
|
||||
this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "NetFxScheduleNativeImage");
|
||||
|
||||
if (!this.Messaging.EncounteredError)
|
||||
{
|
||||
var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "NetFxNativeImage", id);
|
||||
row.Set(1, fileId);
|
||||
row.Set(2, priority);
|
||||
row.Set(3, attributes);
|
||||
row.Set(4, assemblyApplication);
|
||||
row.Set(5, appBaseDirectory);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,139 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
|
||||
|
||||
namespace WixToolset.Extensions
|
||||
{
|
||||
#if TODO_CONSIDER_DECOMPILER
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using WixToolset.Data;
|
||||
using WixToolset.Extensibility;
|
||||
using NetFx = WixToolset.Extensions.Serialize.NetFx;
|
||||
using Wix = WixToolset.Data.Serialize;
|
||||
|
||||
/// <summary>
|
||||
/// The decompiler for the WiX Toolset .NET Framework Extension.
|
||||
/// </summary>
|
||||
public sealed class NetFxDecompiler : DecompilerExtension
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a decompiler for NetFx Extension.
|
||||
/// </summary>
|
||||
public NetFxDecompiler()
|
||||
{
|
||||
this.TableDefinitions = NetFxExtensionData.GetExtensionTableDefinitions();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the extensions library to be removed.
|
||||
/// </summary>
|
||||
/// <param name="tableDefinitions">Table definitions for library.</param>
|
||||
/// <returns>Library to remove from decompiled output.</returns>
|
||||
public override Library GetLibraryToRemove(TableDefinitionCollection tableDefinitions)
|
||||
{
|
||||
return NetFxExtensionData.GetExtensionLibrary(tableDefinitions);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Decompiles an extension table.
|
||||
/// </summary>
|
||||
/// <param name="table">The table to decompile.</param>
|
||||
public override void DecompileTable(Table table)
|
||||
{
|
||||
switch (table.Name)
|
||||
{
|
||||
case "NetFxNativeImage":
|
||||
this.DecompileNetFxNativeImageTable(table);
|
||||
break;
|
||||
default:
|
||||
base.DecompileTable(table);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Decompile the NetFxNativeImage table.
|
||||
/// </summary>
|
||||
/// <param name="table">The table to decompile.</param>
|
||||
private void DecompileNetFxNativeImageTable(Table table)
|
||||
{
|
||||
foreach (Row row in table.Rows)
|
||||
{
|
||||
NetFx.NativeImage nativeImage = new NetFx.NativeImage();
|
||||
|
||||
nativeImage.Id = (string)row[0];
|
||||
|
||||
switch ((int)row[2])
|
||||
{
|
||||
case 0:
|
||||
nativeImage.Priority = NetFx.NativeImage.PriorityType.Item0;
|
||||
break;
|
||||
case 1:
|
||||
nativeImage.Priority = NetFx.NativeImage.PriorityType.Item1;
|
||||
break;
|
||||
case 2:
|
||||
nativeImage.Priority = NetFx.NativeImage.PriorityType.Item2;
|
||||
break;
|
||||
case 3:
|
||||
nativeImage.Priority = NetFx.NativeImage.PriorityType.Item3;
|
||||
break;
|
||||
}
|
||||
|
||||
if (null != row[3])
|
||||
{
|
||||
int attributes = (int)row[3];
|
||||
|
||||
if (0x1 == (attributes & 0x1))
|
||||
{
|
||||
nativeImage.Debug = NetFx.YesNoType.yes;
|
||||
}
|
||||
|
||||
if (0x2 == (attributes & 0x2))
|
||||
{
|
||||
nativeImage.Dependencies = NetFx.YesNoType.no;
|
||||
}
|
||||
|
||||
if (0x4 == (attributes & 0x4))
|
||||
{
|
||||
nativeImage.Profile = NetFx.YesNoType.yes;
|
||||
}
|
||||
|
||||
if (0x8 == (attributes & 0x8) && 0x10 == (attributes & 0x10))
|
||||
{
|
||||
nativeImage.Platform = NetFx.NativeImage.PlatformType.all;
|
||||
}
|
||||
else if (0x8 == (attributes & 0x8))
|
||||
{
|
||||
nativeImage.Platform = NetFx.NativeImage.PlatformType.Item32bit;
|
||||
}
|
||||
else if (0x10 == (attributes & 0x10))
|
||||
{
|
||||
nativeImage.Platform = NetFx.NativeImage.PlatformType.Item64bit;
|
||||
}
|
||||
}
|
||||
|
||||
if (null != row[4])
|
||||
{
|
||||
nativeImage.AssemblyApplication = (string)row[4];
|
||||
}
|
||||
|
||||
if (null != row[5])
|
||||
{
|
||||
nativeImage.AppBaseDirectory = (string)row[5];
|
||||
}
|
||||
|
||||
Wix.File file = (Wix.File)this.Core.GetIndexedElement("File", (string)row[1]);
|
||||
if (null != file)
|
||||
{
|
||||
file.AddChild(nativeImage);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "File_", (string)row[1], "File"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
|
||||
|
||||
namespace WixToolset.Netfx
|
||||
{
|
||||
using WixToolset.Data;
|
||||
using WixToolset.Extensibility;
|
||||
using WixToolset.Netfx.Tuples;
|
||||
|
||||
/// <summary>
|
||||
/// The WiX Toolset .NET Framework Extension.
|
||||
/// </summary>
|
||||
public sealed class NetfxExtensionData : BaseExtensionData
|
||||
{
|
||||
public override bool TryGetTupleDefinitionByName(string name, out IntermediateTupleDefinition tupleDefinition)
|
||||
{
|
||||
tupleDefinition = (name == NetfxTupleDefinitionNames.NetFxNativeImage) ? NetfxTupleDefinitions.NetFxNativeImage : null;
|
||||
return tupleDefinition != null;
|
||||
}
|
||||
|
||||
public override Intermediate GetLibrary(ITupleDefinitionCreator tupleDefinitions)
|
||||
{
|
||||
return Intermediate.Load(typeof(NetfxExtensionData).Assembly, "WixToolset.Netfx.netfx.wixlib", tupleDefinitions);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
|
||||
|
||||
namespace WixToolset.Netfx
|
||||
{
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using WixToolset.Extensibility;
|
||||
|
||||
public class NetfxExtensionFactory : BaseExtensionFactory
|
||||
{
|
||||
protected override IEnumerable<Type> ExtensionTypes => new[]
|
||||
{
|
||||
typeof(NetfxCompiler),
|
||||
typeof(NetfxExtensionData),
|
||||
typeof(NetfxWindowsInstallerBackendExtension),
|
||||
};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
|
||||
|
||||
namespace WixToolset.Netfx
|
||||
{
|
||||
using WixToolset.Data.WindowsInstaller;
|
||||
using WixToolset.Extensibility;
|
||||
|
||||
public class NetfxWindowsInstallerBackendExtension : BaseWindowsInstallerBackendExtension
|
||||
{
|
||||
private static readonly TableDefinition[] Tables = new[] {
|
||||
new TableDefinition(
|
||||
"NetFxNativeImage",
|
||||
new[]
|
||||
{
|
||||
new ColumnDefinition("NetFxNativeImage", ColumnType.String, 72, true, false, ColumnCategory.Identifier, description: "The primary key, a non-localized token."),
|
||||
new ColumnDefinition("File_", ColumnType.String, 0, false, false, ColumnCategory.Identifier, keyTable:"File", keyColumn: 1, description: "The assembly for which a native image will be generated."),
|
||||
new ColumnDefinition("Priority", ColumnType.Number, 2, false, false, ColumnCategory.Integer, maxValue: 3, description: "The priority for generating this native image: 0 is syncronous, 1-3 represent various levels of queued generation."),
|
||||
new ColumnDefinition("Attributes", ColumnType.Number, 4, false, false, ColumnCategory.Integer, maxValue: 2147483647, description: "Integer containing bit flags representing native image attributes."),
|
||||
new ColumnDefinition("File_Application", ColumnType.String, 72, false, true, ColumnCategory.Formatted, description: "The application which loads this assembly."),
|
||||
new ColumnDefinition("Directory_ApplicationBase", ColumnType.String, 72, false, true, ColumnCategory.Formatted, description: "The directory containing the application which loads this assembly."),
|
||||
}
|
||||
),
|
||||
};
|
||||
|
||||
protected override TableDefinition[] TableDefinitionsForTuples => Tables;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
|
||||
|
||||
namespace WixToolset.Netfx.Tuples
|
||||
{
|
||||
using WixToolset.Data;
|
||||
|
||||
public enum NetFxNativeImageTupleFields
|
||||
{
|
||||
NetFxNativeImage,
|
||||
File_,
|
||||
Priority,
|
||||
Attributes,
|
||||
File_Application,
|
||||
Directory_ApplicationBase,
|
||||
}
|
||||
|
||||
public class NetFxNativeImageTuple : IntermediateTuple
|
||||
{
|
||||
public NetFxNativeImageTuple() : base(NetfxTupleDefinitions.NetFxNativeImage, null, null)
|
||||
{
|
||||
}
|
||||
|
||||
public NetFxNativeImageTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(NetfxTupleDefinitions.NetFxNativeImage, sourceLineNumber, id)
|
||||
{
|
||||
}
|
||||
|
||||
public IntermediateField this[NetFxNativeImageTupleFields index] => this.Fields[(int)index];
|
||||
|
||||
public string NetFxNativeImage
|
||||
{
|
||||
get => this.Fields[(int)NetFxNativeImageTupleFields.NetFxNativeImage].AsString();
|
||||
set => this.Set((int)NetFxNativeImageTupleFields.NetFxNativeImage, value);
|
||||
}
|
||||
|
||||
public string File_
|
||||
{
|
||||
get => this.Fields[(int)NetFxNativeImageTupleFields.File_].AsString();
|
||||
set => this.Set((int)NetFxNativeImageTupleFields.File_, value);
|
||||
}
|
||||
|
||||
public int Priority
|
||||
{
|
||||
get => this.Fields[(int)NetFxNativeImageTupleFields.Priority].AsNumber();
|
||||
set => this.Set((int)NetFxNativeImageTupleFields.Priority, value);
|
||||
}
|
||||
|
||||
public int Attributes
|
||||
{
|
||||
get => this.Fields[(int)NetFxNativeImageTupleFields.Attributes].AsNumber();
|
||||
set => this.Set((int)NetFxNativeImageTupleFields.Attributes, value);
|
||||
}
|
||||
|
||||
public string File_Application
|
||||
{
|
||||
get => this.Fields[(int)NetFxNativeImageTupleFields.File_Application].AsString();
|
||||
set => this.Set((int)NetFxNativeImageTupleFields.File_Application, value);
|
||||
}
|
||||
|
||||
public string Directory_ApplicationBase
|
||||
{
|
||||
get => this.Fields[(int)NetFxNativeImageTupleFields.Directory_ApplicationBase].AsString();
|
||||
set => this.Set((int)NetFxNativeImageTupleFields.Directory_ApplicationBase, value);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
|
||||
|
||||
namespace WixToolset.Netfx.Tuples
|
||||
{
|
||||
using WixToolset.Data;
|
||||
|
||||
public static class NetfxTupleDefinitionNames
|
||||
{
|
||||
public static string NetFxNativeImage { get; } = "NetFxNativeImage";
|
||||
}
|
||||
|
||||
public static class NetfxTupleDefinitions
|
||||
{
|
||||
public static readonly IntermediateTupleDefinition NetFxNativeImage = new IntermediateTupleDefinition(
|
||||
NetfxTupleDefinitionNames.NetFxNativeImage,
|
||||
new[]
|
||||
{
|
||||
new IntermediateFieldDefinition(nameof(NetFxNativeImageTupleFields.NetFxNativeImage), IntermediateFieldType.String),
|
||||
new IntermediateFieldDefinition(nameof(NetFxNativeImageTupleFields.File_), IntermediateFieldType.String),
|
||||
new IntermediateFieldDefinition(nameof(NetFxNativeImageTupleFields.Priority), IntermediateFieldType.Number),
|
||||
new IntermediateFieldDefinition(nameof(NetFxNativeImageTupleFields.Attributes), IntermediateFieldType.Number),
|
||||
new IntermediateFieldDefinition(nameof(NetFxNativeImageTupleFields.File_Application), IntermediateFieldType.String),
|
||||
new IntermediateFieldDefinition(nameof(NetFxNativeImageTupleFields.Directory_ApplicationBase), IntermediateFieldType.String),
|
||||
},
|
||||
typeof(NetFxNativeImageTuple));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<RootNamespace>WixToolset.Netfx</RootNamespace>
|
||||
<Description>WiX Toolset .NET Framework Extension</Description>
|
||||
<Title>WiX Toolset .NET Framework Extension</Title>
|
||||
<IsTool>true</IsTool>
|
||||
<ContentTargetFolders>build</ContentTargetFolders>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="$(MSBuildThisFileName).targets" />
|
||||
<Content Include="netfx.xsd" PackagePath="tools" />
|
||||
<EmbeddedResource Include="$(OutputPath)..\netfx.wixlib" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="$(WixToolsetRootFolder)\Data\src\WixToolset.Data\WixToolset.Data.csproj" Condition=" '$(Configuration)' == 'Debug' And Exists('$(WixToolsetRootFolder)\Data\README.md') " />
|
||||
<PackageReference Include="WixToolset.Data" Version="4.0.*" Condition=" '$(Configuration)' == 'Release' Or !Exists('$(WixToolsetRootFolder)\Data\README.md') " PrivateAssets="all" />
|
||||
|
||||
<ProjectReference Include="$(WixToolsetRootFolder)\Extensibility\src\WixToolset.Extensibility\WixToolset.Extensibility.csproj" Condition=" '$(Configuration)' == 'Debug' And Exists('$(WixToolsetRootFolder)\Extensibility\README.md') " />
|
||||
<PackageReference Include="WixToolset.Extensibility" Version="4.0.*" Condition=" '$(Configuration)' == 'Release' Or !Exists('$(WixToolsetRootFolder)\Extensibility\README.md') " PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\wixlib\netfx.wixproj" ReferenceOutputAssembly="false" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Nerdbank.GitVersioning" Version="2.1.7" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
|
||||
<PropertyGroup>
|
||||
<WixToolsetNetfxWixextPath Condition=" '$(WixToolsetNetfxWixextPath)' == '' ">$(MSBuildThisFileDirectory)..\tools\WixToolset.Netfx.wixext.dll"</WixToolsetNetfxWixextPath>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<WixExtension Include="$(WixToolsetNetfxWixextPath)" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -0,0 +1,235 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:xse=" http://wixtoolset.org/schemas/XmlSchemaExtension"
|
||||
xmlns:html="http://www.w3.org/1999/xhtml"
|
||||
targetNamespace="http://wixtoolset.org/schemas/v4/wxs/netfx"
|
||||
xmlns="http://wixtoolset.org/schemas/v4/wxs/netfx">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
The source code schema for the WiX Toolset .NET Framework Extension.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
|
||||
<xs:element name="NativeImage">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
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
|
||||
it runs <html:a href="http://msdn.microsoft.com/en-us/library/6t9t5wcf.aspx">NGen</html:a>.
|
||||
</xs:documentation>
|
||||
<xs:appinfo>
|
||||
<xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="File" />
|
||||
<xse:remarks>
|
||||
<html:p>
|
||||
Native images are files containing compiled processor-specific machine code, which
|
||||
are installed into the native image cache on the local computer. The runtime
|
||||
can use native images from the cache instead using the just-in-time (JIT)
|
||||
compiler to compile the original assembly.
|
||||
</html:p>
|
||||
<html:p>
|
||||
The native image custom actions are configured to ignore failures so that failing
|
||||
to generate or remove a native image will not cause setup to fail and roll back.
|
||||
</html:p>
|
||||
<html:p>
|
||||
<html:b>Note for patches:</html:b> if you built your target, or baseline, MSI with
|
||||
previous versions 3.0 or 3.5 of this extension and want to upgrade to formattable
|
||||
values for @AssemblyApplication or @AppBaseDirectory you must also include a
|
||||
BinaryRef to "NetFxCA" to pull in necessary changes. If you do use formattable
|
||||
values and do not include the binary changes ngen.exe will not optimize your
|
||||
native images for the specified application.
|
||||
</html:p>
|
||||
<html:p>
|
||||
This should be a rare occurrence, however. Because you cannot remove components
|
||||
in a patch - and pyro does validate you do not - it is not practical to switch
|
||||
from using identifiers to formattable values in a patch. One practical possibility
|
||||
is if you wanted to use a different application to optimize your native images
|
||||
and that application is not already installed with the MSI to be updated.
|
||||
</html:p>
|
||||
</xse:remarks>
|
||||
</xs:appinfo>
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:attribute name="Id" type="xs:string" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
The identifier for this NativeImage.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="AppBaseDirectory" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
<html:p>
|
||||
The directory to use for locating dependent assemblies.
|
||||
For DLL assemblies and assemblies installed to the Global Assembly Cache (GAC),
|
||||
this attribute should be set to the directory of the application which loads this
|
||||
assembly. For EXE assemblies, this attribute does not need to be set because NGen
|
||||
will use the directory of the assembly file by default.
|
||||
</html:p>
|
||||
<html:p>
|
||||
The value can be in the form of a directory identifier, or a formatted string
|
||||
that resolves to either a directory identifier or a full path to a directory.
|
||||
</html:p>
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="AssemblyApplication" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
<html:p>
|
||||
The application which will load this assembly.
|
||||
For DLL assemblies which are loaded via reflection, this attribute should
|
||||
be set to indicate the application which will load this assembly.
|
||||
The configuration of the application (usually specified via an exe.config file) will be used
|
||||
to determine how to resolve dependencies for this assembly.
|
||||
</html:p>
|
||||
<html:p>
|
||||
The value can be in the form of a file identifier, or a formatted string
|
||||
that resolves to either a file identifier or a full path to a file.
|
||||
</html:p>
|
||||
<html:p>
|
||||
When a shared component is loaded at run time, using the Load method, the
|
||||
application's configuration file determines the dependencies that are loaded
|
||||
for the shared component — for example, the version of a dependency that is loaded.
|
||||
This attribute gives guidance on which dependencies would be loaded at run time in order
|
||||
to figure out which dependency assemblies will also need to have native images generated
|
||||
(assuming the Dependency attribute is not set to "no").
|
||||
</html:p>
|
||||
<html:p>
|
||||
This attribute cannot be set if the AssemblyApplication attribute is set on the parent
|
||||
File element (please note that these attributes both refer to the same application
|
||||
assembly but do very different things: specifiying File/@AssemblyApplication will force
|
||||
an assembly to install to a private location next to the indicated application, whereas
|
||||
this AssemblyApplication attribute will be used to help resolve dependent assemblies
|
||||
while generating native images for this assembly).
|
||||
</html:p>
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="Debug" type="YesNoType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Set to "yes" to generate native images that can be used under a debugger.
|
||||
The default value is "no".
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="Dependencies" type="YesNoType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Set to "no" to generate the minimum number of native images.
|
||||
The default value is "yes".
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="Platform">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Sets the platform(s) for which native images will be generated.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:NMTOKEN">
|
||||
<xs:enumeration value="32bit">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Attempt to generate native images only for the 32-bit version of the .NET Framework
|
||||
on the target machine. If the 32-bit version of the .NET Framework 2.0 or newer is not
|
||||
present on the target machine, native image custom actions will not be scheduled.
|
||||
This is the default value.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:enumeration>
|
||||
<xs:enumeration value="64bit">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Attempt to generate native images only for the 64-bit version of the .NET Framework
|
||||
on the target machine. If a 64-bit version of the .NET Framework 2.0 or newer is not
|
||||
present on the target machine, native image custom actions will not be scheduled.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:enumeration>
|
||||
<xs:enumeration value="all">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Attempt to generate native images for the 32-bit and 64-bit versions of the .NET Framework
|
||||
on the target machine. If a version of the .NET Framework 2.0 or newer is not present on the
|
||||
target machine for a processor architecture, native image custom actions will not be
|
||||
scheduled for that processor architecture.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:enumeration>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="Priority">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Sets the priority of generating the native images for this assembly.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:NMTOKEN">
|
||||
<xs:enumeration value="0">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
This is the highest priority, it means that image generation occurs syncronously
|
||||
during the setup process. This option will slow down setup performance.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:enumeration>
|
||||
<xs:enumeration value="1">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
This will queue image generation to the NGen service to occur immediately.
|
||||
This option will slow down setup performance.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:enumeration>
|
||||
<xs:enumeration value="2">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
This will queue image generation to the NGen service to occur after all priority 1
|
||||
assemblies have completed.
|
||||
This option will slow down setup performance.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:enumeration>
|
||||
<xs:enumeration value="3">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
This is the lowest priority, it will queue image generation to occur when the
|
||||
machine is idle.
|
||||
This option should not slow down setup performance.
|
||||
This is the default value.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:enumeration>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="Profile" type="YesNoType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Set to "yes" to generate native images that can be used under a profiler.
|
||||
The default value is "no".
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:simpleType name="YesNoType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Values of this type will either be "yes" or "no".</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:restriction base='xs:NMTOKEN'>
|
||||
<xs:enumeration value="no"/>
|
||||
<xs:enumeration value="yes"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
</xs:schema>
|
|
@ -0,0 +1,192 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
||||
|
||||
<!--
|
||||
.NET Framework installation state properties
|
||||
|
||||
Official documentation can be found at the following location:
|
||||
|
||||
.NET Framework 1.1 - http://msdn.microsoft.com/library/ms994339.aspx
|
||||
-->
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Indicates the service pack level for the .NET Framework 1.1. -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_SP_LEVEL" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11SP" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322" Name="SP" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Location of .NET Framework 1.1 redistributable install root directory -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11INSTALLROOTDIR" Secure="yes">
|
||||
<RegistrySearch Id="NetFxInstallRootForNetfx11Search" Type="raw" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="InstallRoot">
|
||||
<DirectorySearch Id="NetFx11InstallRootSearch" Path="v1.1.4322" Depth="0" />
|
||||
</RegistrySearch>
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Chinese (Simplified) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_ZH_CN_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11ZhCnLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\2052" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Chinese (Traditional) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_ZH_TW_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11ZhTwLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1028" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Czech language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_CS_CZ_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11CsCzLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1029" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Danish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_DA_DK_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11DaDkLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1030" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Dutch language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_NL_NL_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11NlNlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1043" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Finnish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_FI_FI_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11FiFiLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1035" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 French language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_FR_FR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11FrFrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1036" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 German language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_DE_DE_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11DeDeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1031" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Greek language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_EL_GR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11ElGrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1032" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Hungarian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_HU_HU_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11HuHuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1038" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Italian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_IT_IT_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11ItItLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1040" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Japanese language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_JA_JP_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11JaJpLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1041" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Korean language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_KO_KR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11KoKrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1042" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Norwegian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_NB_NO_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11NbNoLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1044" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Polish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_PL_PL_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11PlPlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1045" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Portuguese (Brazil) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_PT_BR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11PtBrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1046" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Portuguese (Portugal) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_PT_PT_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11PtPtLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\2070" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Russian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_RU_RU_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11RuRuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1049" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Spanish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_ES_ES_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11EsEsLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\3082" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Swedish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_SV_SE_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11SvSeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1053" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 1.1 Turkish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11_TR_TR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11TrTrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1055" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- location of the .NET Framework 1.1 SDK installation root -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK11SDKDIR" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework11SDKDir" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="sdkInstallRootv1.1" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
</Wix>
|
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
||||
|
||||
<!--
|
||||
.NET Framework installation state properties
|
||||
|
||||
Official documentation can be found at the following location:
|
||||
|
||||
.NET Framework 1.0 - http://msdn.microsoft.com/library/ms994349.aspx
|
||||
-->
|
||||
|
||||
<!-- set to 3321-3705 if the .NET Framework 1.0 is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK10" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework10" Root="HKLM" Key="SOFTWARE\Microsoft\.NETFramework\policy\v1.0" Name="3705" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Location of .NET Framework 1.0 redistributable install root directory -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK10INSTALLROOTDIR" Secure="yes">
|
||||
<RegistrySearch Id="NetFxInstallRootForNetfx10Search" Type="raw" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="InstallRoot">
|
||||
<DirectorySearch Id="NetFx10InstallRootSearch" Path="v1.0.3705" Depth="0" />
|
||||
</RegistrySearch>
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
</Wix>
|
|
@ -0,0 +1,201 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
||||
|
||||
<!--
|
||||
.NET Framework installation state properties
|
||||
|
||||
Official documentation can be found at the following location:
|
||||
|
||||
.NET Framework 2.0 - http://msdn.microsoft.com/library/aa480243.aspx
|
||||
-->
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework20" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Indicates the service pack level for the .NET Framework 2.0. -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_SP_LEVEL" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework20SP" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727" Name="SP" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Location of .NET Framework 2.0 redistributable install root directory -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20INSTALLROOTDIR" Secure="yes">
|
||||
<RegistrySearch Id="NetFxInstallRootForNetfx20Search" Type="raw" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="InstallRoot">
|
||||
<DirectorySearch Id="NetFx20InstallRootSearch" Path="v2.0.50727" Depth="0" />
|
||||
</RegistrySearch>
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Location of .NET Framework 2.0 (64-bit) redistributable install root directory -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20INSTALLROOTDIR64" Secure="yes">
|
||||
<RegistrySearch Id="NetFxInstallRootForNetfx20Search64" Type="raw" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="InstallRoot" Win64="yes">
|
||||
<DirectorySearch Id="NetFx20InstallRootSearch64" Path="v2.0.50727" Depth="0" />
|
||||
</RegistrySearch>
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Chinese (Simplified) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_ZH_CN_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20ZhCnLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\2052" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Chinese (Traditional) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_ZH_TW_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20ZhTwLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1028" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Czech language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_CS_CZ_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20CsCzLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1029" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Danish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_DA_DK_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20DaDkLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1030" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Dutch language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_NL_NL_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20NlNlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1043" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Finnish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_FI_FI_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20FiFiLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1035" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 French language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_FR_FR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20FrFrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1036" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 German language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_DE_DE_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20DeDeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1031" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Greek language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_EL_GR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20ElGrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1032" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Hungarian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_HU_HU_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20HuHuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1038" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Italian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_IT_IT_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20ItItLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1040" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Japanese language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_JA_JP_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20JaJpLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1041" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Korean language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_KO_KR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20KoKrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1042" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Norwegian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_NB_NO_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20NbNoLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1044" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Polish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_PL_PL_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20PlPlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1045" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Portuguese (Brazil) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_PT_BR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20PtBrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1046" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Portuguese (Portugal) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_PT_PT_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20PtPtLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\2070" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Russian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_RU_RU_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20RuRuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1049" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Spanish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_ES_ES_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20EsEsLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\3082" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Swedish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_SV_SE_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20SvSeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1053" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 2.0 Turkish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20_TR_TR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK20TrTrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1055" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- location of the .NET Framework 2.0 SDK installation root -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK20SDKDIR" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework20SDKDir" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="sdkInstallRootv2.0" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
</Wix>
|
|
@ -0,0 +1,241 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
|
||||
|
||||
<!--
|
||||
.NET Framework installation state properties
|
||||
|
||||
Official documentation can be found at the following locations:
|
||||
|
||||
.NET Framework 3.5 - http://msdn.microsoft.com/library/cc160716.aspx
|
||||
.NET Framework 3.5 client profile - http://download.microsoft.com/download/5/a/a/5aa86d6c-969b-42d8-bc6b-30e02bfeccf0/NETFXClientProfile_DeploymentGuide.htm
|
||||
-->
|
||||
|
||||
<!-- Indicates the service pack level for the .NET Framework 3.5 (for bundles). -->
|
||||
<Fragment>
|
||||
<util:RegistrySearch
|
||||
Id="NETFRAMEWORK35_SP_LEVEL"
|
||||
Variable="NETFRAMEWORK35_SP_LEVEL"
|
||||
Root="HKLM"
|
||||
Key="Software\Microsoft\NET Framework Setup\NDP\v3.5"
|
||||
Value="SP"
|
||||
Result="value" />
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework35" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Indicates the service pack level for the .NET Framework 3.5. -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_SP_LEVEL" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework35SP" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5" Name="SP" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Location of .NET Framework 3.5 redistributable install root directory -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35INSTALLROOTDIR" Secure="yes">
|
||||
<RegistrySearch Id="NetFxInstallRootForNetfx35Search" Type="raw" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="InstallRoot">
|
||||
<DirectorySearch Id="NetFx35InstallRootSearch" Path="v3.5" Depth="0" />
|
||||
</RegistrySearch>
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Location of .NET Framework 3.5 (64-bit) redistributable install root directory -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35INSTALLROOTDIR64" Secure="yes">
|
||||
<RegistrySearch Id="NetFxInstallRootForNetfx35Search64" Type="raw" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="InstallRoot" Win64="yes">
|
||||
<DirectorySearch Id="NetFx35InstallRootSearch64" Path="v3.5" Depth="0" />
|
||||
</RegistrySearch>
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Chinese (Simplified) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_ZH_CN_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35ZhCnLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\2052" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Chinese (Traditional) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_ZH_TW_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35ZhTwLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1028" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Czech language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_CS_CZ_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35CsCzLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1029" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Danish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_DA_DK_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35DaDkLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1030" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Dutch language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_NL_NL_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35NlNlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1043" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Finnish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_FI_FI_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35FiFiLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1035" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 French language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_FR_FR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35FrFrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1036" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 German language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_DE_DE_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35DeDeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1031" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Greek language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_EL_GR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35ElGrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1032" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Hungarian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_HU_HU_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35HuHuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1038" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Italian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_IT_IT_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35ItItLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1040" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Japanese language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_JA_JP_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35JaJpLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1041" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Korean language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_KO_KR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35KoKrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1042" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Norwegian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_NB_NO_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35NbNoLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1044" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Polish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_PL_PL_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35PlPlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1045" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Portuguese (Brazil) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_PT_BR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35PtBrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1046" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Portuguese (Portugal) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_PT_PT_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35PtPtLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\2070" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Russian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_RU_RU_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35RuRuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1049" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Spanish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_ES_ES_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35EsEsLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\3082" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Swedish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_SV_SE_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35SvSeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1053" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 Turkish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_TR_TR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35TrTrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1055" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.5 client profile is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_CLIENT" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35ClientSearch" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\DotNetClient\v3.5" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Indicates the service pack level for the .NET Framework 3.5 client profile -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK35_CLIENT_SP_LEVEL" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK35ClientSpSearch" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\DotNetClient\v3.5" Name="SP" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- location of the Windows SDK 6.0a installation root -->
|
||||
<Fragment>
|
||||
<Property Id="WINDOWSSDK60ADIR" Secure="yes">
|
||||
<RegistrySearch Id="WindowsSdk60aDir" Root="HKLM" Key="Software\Microsoft\Microsoft SDKs\Windows\v6.0A" Name="InstallationFolder" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- location of the Windows SDK 6.1 installation root -->
|
||||
<Fragment>
|
||||
<Property Id="WINDOWSSDK61DIR" Secure="yes">
|
||||
<RegistrySearch Id="WindowsSdk61Dir" Root="HKLM" Key="Software\Microsoft\Microsoft SDKs\Windows\v6.1" Name="InstallationFolder" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- location of the Windows SDK 7.0 installation root -->
|
||||
<Fragment>
|
||||
<Property Id="WINDOWSSDK70ADIR" Secure="yes">
|
||||
<RegistrySearch Id="WindowsSdk70aDir" Root="HKLM" Key="Software\Microsoft\Microsoft SDKs\Windows\v7.0A" Name="InstallationFolder" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
</Wix>
|
|
@ -0,0 +1,195 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
||||
|
||||
<!--
|
||||
.NET Framework installation state properties
|
||||
|
||||
Official documentation can be found at the following location:
|
||||
|
||||
.NET Framework 3.0 - http://msdn.microsoft.com/library/aa964979.aspx
|
||||
-->
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework30" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup" Name="InstallSuccess" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Indicates the service pack level for the .NET Framework 3.0. -->
|
||||
<!-- This value will not exist until a service pack is installed. -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_SP_LEVEL" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework30SP" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0" Name="SP" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Location of .NET Framework 3.0 redistributable install root directory -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30INSTALLROOTDIR" Secure="yes">
|
||||
<RegistrySearch Id="NetFxInstallRootForNetfx30Search" Type="raw" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="InstallRoot">
|
||||
<DirectorySearch Id="NetFx30InstallRootSearch" Path="v3.0" Depth="0" />
|
||||
</RegistrySearch>
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Location of .NET Framework 3.0 (64-bit) redistributable install root directory -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30INSTALLROOTDIR64" Secure="yes">
|
||||
<RegistrySearch Id="NetFxInstallRootForNetfx30Search64" Type="raw" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="InstallRoot" Win64="yes">
|
||||
<DirectorySearch Id="NetFx30InstallRootSearch64" Path="v3.0" Depth="0" />
|
||||
</RegistrySearch>
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Chinese (Simplified) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_ZH_CN_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30ZhCnLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\2052" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Chinese (Traditional) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_ZH_TW_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30ZhTwLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1028" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Czech language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_CS_CZ_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30CsCzLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1029" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Danish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_DA_DK_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30DaDkLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1030" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Dutch language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_NL_NL_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30NlNlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1043" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Finnish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_FI_FI_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30FiFiLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1035" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 French language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_FR_FR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30FrFrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1036" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 German language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_DE_DE_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30DeDeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1031" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Greek language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_EL_GR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30ElGrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1032" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Hungarian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_HU_HU_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30HuHuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1038" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Italian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_IT_IT_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30ItItLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1040" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Japanese language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_JA_JP_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30JaJpLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1041" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Korean language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_KO_KR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30KoKrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1042" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Norwegian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_NB_NO_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30NbNoLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1044" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Polish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_PL_PL_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30PlPlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1045" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Portuguese (Brazil) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_PT_BR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30PtBrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1046" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Portuguese (Portugal) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_PT_PT_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30PtPtLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\2070" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Russian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_RU_RU_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30RuRuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1049" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Spanish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_ES_ES_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30EsEsLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\3082" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Swedish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_SV_SE_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30SvSeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1053" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 3.0 Turkish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK30_TR_TR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK30TrTrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1055" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
</Wix>
|
|
@ -0,0 +1,274 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
|
||||
|
||||
<!--
|
||||
.NET Framework installation state properties
|
||||
|
||||
Official documentation can be found at the following location:
|
||||
|
||||
.NET Framework 4.5 - http://msdn.microsoft.com/en-us/library/5a4x27ek.aspx, http://msdn.microsoft.com/en-us/library/ee942965(v=VS.110).aspx
|
||||
-->
|
||||
|
||||
<?define NetFx45MinRelease = 378389?>
|
||||
<?define NetFx45WebLink = http://go.microsoft.com/fwlink/?LinkId=225704 ?>
|
||||
<?define NetFx45RedistLink = http://go.microsoft.com/fwlink/?LinkId=225702 ?>
|
||||
|
||||
<Fragment>
|
||||
<PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
|
||||
<Property Id="WIX_IS_NETFRAMEWORK_45_OR_LATER_INSTALLED" Secure="yes" />
|
||||
<SetProperty Id="WIX_IS_NETFRAMEWORK_45_OR_LATER_INSTALLED" Value="1" After="AppSearch">
|
||||
WIXNETFX4RELEASEINSTALLED >= "#$(var.NetFx45MinRelease)"
|
||||
</SetProperty>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearch
|
||||
Id="NETFRAMEWORK45"
|
||||
Variable="NETFRAMEWORK45"
|
||||
Root="HKLM"
|
||||
Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full"
|
||||
Value="Release"
|
||||
Result="value" />
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearchRef Id="NETFRAMEWORK45"/>
|
||||
|
||||
<WixVariable Id="NetFx45WebDetectCondition" Value="NETFRAMEWORK45 >= $(var.NetFx45MinRelease)" Overridable="yes" />
|
||||
<WixVariable Id="NetFx45WebInstallCondition" Value="" Overridable="yes" />
|
||||
<WixVariable Id="NetFx45WebPackageDirectory" Value="redist\" Overridable="yes" />
|
||||
|
||||
<PackageGroup Id="NetFx45Web">
|
||||
<ExePackage
|
||||
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx45FullWebLog].html""
|
||||
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx45FullWebLog].html""
|
||||
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx45FullWebLog].html""
|
||||
PerMachine="yes"
|
||||
DetectCondition="!(wix.NetFx45WebDetectCondition)"
|
||||
InstallCondition="!(wix.NetFx45WebInstallCondition)"
|
||||
Id="NetFx45Web"
|
||||
Vital="yes"
|
||||
Permanent="yes"
|
||||
Protocol="netfx4"
|
||||
DownloadUrl="$(var.NetFx45WebLink)"
|
||||
LogPathVariable="NetFx45FullWebLog"
|
||||
Compressed="no"
|
||||
Name="!(wix.NetFx45WebPackageDirectory)dotNetFx45_Full_setup.exe">
|
||||
<RemotePayload
|
||||
Size="1005568"
|
||||
Version="4.5.50709.17929"
|
||||
ProductName="Microsoft .NET Framework 4.5"
|
||||
Description="Microsoft .NET Framework 4.5 Setup"
|
||||
CertificatePublicKey="BE931A1B869E4BB989C2B32D0C105204ECBEFB3D"
|
||||
CertificateThumbprint="8363887511B4835B79C383ECF06FC055B5839255"
|
||||
Hash="F6BA6F03C65C3996A258F58324A917463B2D6FF4"/>
|
||||
</ExePackage>
|
||||
</PackageGroup>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearchRef Id="NETFRAMEWORK45"/>
|
||||
|
||||
<WixVariable Id="NetFx45RedistDetectCondition" Value="NETFRAMEWORK45 >= $(var.NetFx45MinRelease)" Overridable="yes" />
|
||||
<WixVariable Id="NetFx45RedistInstallCondition" Value="" Overridable="yes" />
|
||||
<WixVariable Id="NetFx45RedistPackageDirectory" Value="redist\" Overridable="yes" />
|
||||
|
||||
<PackageGroup Id="NetFx45Redist">
|
||||
<ExePackage
|
||||
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx45FullLog].html""
|
||||
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx45FullLog].html""
|
||||
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx45FullLog].html""
|
||||
PerMachine="yes"
|
||||
DetectCondition="!(wix.NetFx45RedistDetectCondition)"
|
||||
InstallCondition="!(wix.NetFx45RedistInstallCondition)"
|
||||
Id="NetFx45Redist"
|
||||
Vital="yes"
|
||||
Permanent="yes"
|
||||
Protocol="netfx4"
|
||||
DownloadUrl="$(var.NetFx45RedistLink)"
|
||||
LogPathVariable="NetFx45FullLog"
|
||||
Compressed="no"
|
||||
Name="!(wix.NetFx45RedistPackageDirectory)dotNetFx45_Full_x86_x64.exe">
|
||||
<RemotePayload
|
||||
Size="50352408"
|
||||
Version="4.5.50709.17929"
|
||||
ProductName="Microsoft .NET Framework 4.5"
|
||||
Description="Microsoft .NET Framework 4.5 Setup"
|
||||
CertificatePublicKey="BE931A1B869E4BB989C2B32D0C105204ECBEFB3D"
|
||||
CertificateThumbprint="8363887511B4835B79C383ECF06FC055B5839255"
|
||||
Hash="B2FF712CA0947040CA0B8E9BD7436A3C3524BB5D"/>
|
||||
</ExePackage>
|
||||
</PackageGroup>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework45" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Arabic language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_AR_SA_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45ArSaLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1025" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Chinese (Simplified) language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_ZH_CN_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45ZhCnLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\2052" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Chinese (Traditional) language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_ZH_TW_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45ZhTwLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1028" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Czech language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_CS_CZ_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45CsCzLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1029" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Danish language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_DA_DK_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45DaDkLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1030" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Dutch language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_NL_NL_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45NlNlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1043" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Finnish language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_FI_FI_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45FiFiLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1035" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 French language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_FR_FR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45FrFrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1036" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 German language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_DE_DE_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45DeDeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1031" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Greek language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_EL_GR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45ElGrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1032" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Hebrew language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_HE_IL_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45HeIlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1037" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Hungarian language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_HU_HU_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45HuHuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1038" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Italian language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_IT_IT_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45ItItLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1040" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Japanese language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_JA_JP_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45JaJpLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1041" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Korean language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_KO_KR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45KoKrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1042" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Norwegian language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_NB_NO_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45NbNoLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1044" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Polish language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_PL_PL_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45PlPlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1045" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Portuguese (Brazil) language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_PT_BR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45PtBrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1046" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Portuguese (Portugal) language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_PT_PT_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45PtPtLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\2070" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Russian language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_RU_RU_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45RuRuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1049" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Spanish language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_ES_ES_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45EsEsLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\3082" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Swedish language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_SV_SE_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45SvSeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1053" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to Release number of the .NET Framework 4.5 Turkish language pack if installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK45_TR_TR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK45TrTrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1055" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
</Wix>
|
|
@ -0,0 +1,543 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
|
||||
|
||||
<!--
|
||||
.NET Framework installation state properties
|
||||
|
||||
Official documentation can be found at the following location:
|
||||
|
||||
.NET Framework 4.0 full & client - http://msdn.microsoft.com/en-us/library/ee942965.aspx
|
||||
-->
|
||||
|
||||
<?define NetFx40WebLink = http://go.microsoft.com/fwlink/?linkid=182805 ?>
|
||||
<?define NetFx40RedistLink = http://go.microsoft.com/fwlink/?LinkId=247729 ?>
|
||||
<?define NetFx40ClientWebLink = http://go.microsoft.com/fwlink/?linkid=182804 ?>
|
||||
<?define NetFx40ClientRedistLink = http://go.microsoft.com/fwlink/?LinkId=247730 ?>
|
||||
|
||||
<Fragment>
|
||||
<PropertyRef Id="NETFRAMEWORK40FULL" />
|
||||
<Property Id="WIX_IS_NETFRAMEWORK_40_OR_LATER_INSTALLED" Secure="yes" />
|
||||
<SetProperty Id="WIX_IS_NETFRAMEWORK_40_OR_LATER_INSTALLED" Value="1" After="AppSearch">
|
||||
NETFRAMEWORK40FULL
|
||||
</SetProperty>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearch
|
||||
Id="NETFRAMEWORK40"
|
||||
Variable="NETFRAMEWORK40"
|
||||
Root="HKLM"
|
||||
Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full"
|
||||
Value="Install"
|
||||
Result="value" />
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearchRef Id="NETFRAMEWORK40"/>
|
||||
|
||||
<PackageGroup Id="NetFx40Web">
|
||||
<ExePackage
|
||||
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]""
|
||||
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]""
|
||||
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]""
|
||||
PerMachine="yes"
|
||||
DetectCondition="NETFRAMEWORK40"
|
||||
Id="NetFx40Web"
|
||||
Vital="yes"
|
||||
Permanent="yes"
|
||||
Protocol="netfx4"
|
||||
DownloadUrl="$(var.NetFx40WebLink)"
|
||||
Compressed="no"
|
||||
Name="redist\dotNetFx40_Full_setup.exe">
|
||||
<RemotePayload
|
||||
Size="889416"
|
||||
Version="4.0.30319.1"
|
||||
ProductName="Microsoft .NET Framework 4"
|
||||
Description="Microsoft .NET Framework 4 Setup"
|
||||
CertificatePublicKey="672605E36DD71EC6B8325B91C5FE6971390CB6B6"
|
||||
CertificateThumbprint="9617094A1CFB59AE7C1F7DFDB6739E4E7C40508F"
|
||||
Hash="06BECADB92A5FCCA2529C0B93687C2A0C6D0D610"/>
|
||||
</ExePackage>
|
||||
</PackageGroup>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearchRef Id="NETFRAMEWORK40"/>
|
||||
|
||||
<PackageGroup Id="NetFx40Redist">
|
||||
<ExePackage
|
||||
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]""
|
||||
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]""
|
||||
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]""
|
||||
PerMachine="yes"
|
||||
DetectCondition="NETFRAMEWORK40"
|
||||
Id="NetFx40Redist"
|
||||
Vital="yes"
|
||||
Permanent="yes"
|
||||
Protocol="netfx4"
|
||||
DownloadUrl="$(var.NetFx40RedistLink)"
|
||||
Compressed="no"
|
||||
Name="redist\dotNetFx40_Full_x86_x64.exe">
|
||||
<RemotePayload
|
||||
Size="50449456"
|
||||
Version="4.0.30319.1"
|
||||
ProductName="Microsoft .NET Framework 4"
|
||||
Description="Microsoft .NET Framework 4 Setup"
|
||||
CertificatePublicKey="672605E36DD71EC6B8325B91C5FE6971390CB6B6"
|
||||
CertificateThumbprint="9617094A1CFB59AE7C1F7DFDB6739E4E7C40508F"
|
||||
Hash="58DA3D74DB353AAD03588CBB5CEA8234166D8B99"/>
|
||||
</ExePackage>
|
||||
</PackageGroup>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearch
|
||||
Id="NETFRAMEWORK40CLIENT"
|
||||
Variable="NETFRAMEWORK40CLIENT"
|
||||
Root="HKLM"
|
||||
Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client"
|
||||
Value="Install"
|
||||
Result="value" />
|
||||
</Fragment>
|
||||
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearchRef Id="NETFRAMEWORK40CLIENT"/>
|
||||
|
||||
<PackageGroup Id="NetFx40ClientWeb">
|
||||
<ExePackage
|
||||
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]""
|
||||
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]""
|
||||
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]""
|
||||
PerMachine="yes"
|
||||
DetectCondition="NETFRAMEWORK40CLIENT"
|
||||
Id="NetFx40ClientWeb"
|
||||
Vital="yes"
|
||||
Permanent="yes"
|
||||
Protocol="netfx4"
|
||||
DownloadUrl="$(var.NetFx40ClientWebLink)"
|
||||
Compressed="no"
|
||||
Name="redist\dotNetFx40_Client_setup.exe">
|
||||
<RemotePayload
|
||||
Size="887896"
|
||||
Version="4.0.30319.1"
|
||||
ProductName="Microsoft .NET Framework 4 Client Profile"
|
||||
Description="Microsoft .NET Framework 4 Client Profile Setup"
|
||||
CertificatePublicKey="672605E36DD71EC6B8325B91C5FE6971390CB6B6"
|
||||
CertificateThumbprint="9617094A1CFB59AE7C1F7DFDB6739E4E7C40508F"
|
||||
Hash="E15AD80FC74277EF2048312E9A71AF56B2EBA622"/>
|
||||
</ExePackage>
|
||||
</PackageGroup>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearchRef Id="NETFRAMEWORK40CLIENT"/>
|
||||
|
||||
<PackageGroup Id="NetFx40ClientRedist">
|
||||
<ExePackage
|
||||
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]""
|
||||
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]""
|
||||
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]""
|
||||
PerMachine="yes"
|
||||
DetectCondition="NETFRAMEWORK40CLIENT"
|
||||
Id="NetFx40ClientRedist"
|
||||
Vital="yes"
|
||||
Permanent="yes"
|
||||
Protocol="netfx4"
|
||||
DownloadUrl="$(var.NetFx40ClientRedistLink)"
|
||||
Compressed="no"
|
||||
Name="redist\dotNetFx40_Client_x86_x64.exe">
|
||||
<RemotePayload
|
||||
Size="43000680"
|
||||
Version="4.0.30319.1"
|
||||
ProductName="Microsoft .NET Framework 4 Client Profile"
|
||||
Description="Microsoft .NET Framework 4 Client Profile Setup"
|
||||
CertificatePublicKey="672605E36DD71EC6B8325B91C5FE6971390CB6B6"
|
||||
CertificateThumbprint="9617094A1CFB59AE7C1F7DFDB6739E4E7C40508F"
|
||||
Hash="4CD67F609F89D617D2B206341B8C211E1B88B287"/>
|
||||
</ExePackage>
|
||||
</PackageGroup>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 client is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework40Client" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Indicates the servicing level for the .NET Framework 4.0 client. -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_SERVICING_LEVEL" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework40ClientServicing" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client" Name="Servicing" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Location of .NET Framework 4.0 client redistributable install root directory -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENTINSTALLROOTDIR" Secure="yes">
|
||||
<RegistrySearch Id="NetFxInstallRootForNetfx40Client" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client" Name="InstallPath" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Location of .NET Framework 4.0 client (64-bit) redistributable install root directory -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENTINSTALLROOTDIR64" Secure="yes">
|
||||
<RegistrySearch Id="NetFxInstallRootForNetfx40Client64" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client" Name="InstallPath" Type="raw" Win64="yes" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 full is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework40Full" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Indicates the servicing level for the .NET Framework 4.0 full. -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_SERVICING_LEVEL" Secure="yes">
|
||||
<RegistrySearch Id="NetFramework40FullServicing" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full" Name="Servicing" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Location of .NET Framework 4.0 full redistributable install root directory -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULLINSTALLROOTDIR" Secure="yes">
|
||||
<RegistrySearch Id="NetFxInstallRootForNetfx40Full" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full" Name="InstallPath" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Location of .NET Framework 4.0 full (64-bit) redistributable install root directory -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULLINSTALLROOTDIR64" Secure="yes">
|
||||
<RegistrySearch Id="NetFxInstallRootForNetfx40Full64" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full" Name="InstallPath" Type="raw" Win64="yes" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Arabic language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_AR_SA_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTArSaLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1025" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Chinese (Simplified) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_ZH_CN_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTZhCnLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\2052" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Chinese (Traditional) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_ZH_TW_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTZhTwLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1028" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Czech language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_CS_CZ_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTCsCzLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1029" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Danish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_DA_DK_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTDaDkLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1030" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Dutch language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_NL_NL_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTNlNlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1043" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Finnish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_FI_FI_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTFiFiLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1035" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client French language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_FR_FR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTFrFrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1036" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client German language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_DE_DE_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTDeDeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1031" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Greek language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_EL_GR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTElGrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1032" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Hebrew language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_HE_IL_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTHeIlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1037" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Hungarian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_HU_HU_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTHuHuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1038" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Italian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_IT_IT_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTItItLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1040" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Japanese language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_JA_JP_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTJaJpLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1041" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Korean language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_KO_KR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTKoKrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1042" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Norwegian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_NB_NO_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTNbNoLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1044" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Polish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_PL_PL_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTPlPlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1045" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Portuguese (Brazil) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_PT_BR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTPtBrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1046" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Portuguese (Portugal) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_PT_PT_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTPtPtLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\2070" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Russian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_RU_RU_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTRuRuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1049" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Spanish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_ES_ES_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTEsEsLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\3082" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Swedish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_SV_SE_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTSvSeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1053" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Client Turkish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40CLIENT_TR_TR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40CLIENTTrTrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1055" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Arabic language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_AR_SA_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLArSaLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1025" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Chinese (Simplified) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_ZH_CN_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLZhCnLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\2052" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Chinese (Traditional) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_ZH_TW_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLZhTwLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1028" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Czech language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_CS_CZ_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLCsCzLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1029" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Danish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_DA_DK_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLDaDkLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1030" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Dutch language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_NL_NL_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLNlNlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1043" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Finnish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_FI_FI_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLFiFiLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1035" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full French language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_FR_FR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLFrFrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1036" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full German language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_DE_DE_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLDeDeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1031" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Greek language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_EL_GR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLElGrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1032" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Hebrew language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_HE_IL_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLHeIlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1037" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Hungarian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_HU_HU_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLHuHuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1038" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Italian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_IT_IT_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLItItLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1040" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Japanese language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_JA_JP_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLJaJpLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1041" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Korean language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_KO_KR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLKoKrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1042" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Norwegian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_NB_NO_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLNbNoLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1044" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Polish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_PL_PL_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLPlPlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1045" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Portuguese (Brazil) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_PT_BR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLPtBrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1046" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Portuguese (Portugal) language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_PT_PT_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLPtPtLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\2070" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Russian language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_RU_RU_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLRuRuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1049" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Spanish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_ES_ES_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLEsEsLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\3082" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Swedish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_SV_SE_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLSvSeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1053" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- set to #1 if the .NET Framework 4.0 Full Turkish language pack is installed (not set otherwise) -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORK40FULL_TR_TR_LANGPACK" Secure="yes">
|
||||
<RegistrySearch Id="NETFRAMEWORK40FULLTrTrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1055" Name="Install" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
</Wix>
|
|
@ -0,0 +1,96 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
|
||||
|
||||
<!--
|
||||
.NET Framework installation state properties
|
||||
|
||||
Official documentation can be found at the following location:
|
||||
|
||||
.NET Framework 4.5/4.5.1 - http://msdn.microsoft.com/en-us/library/5a4x27ek.aspx, http://msdn.microsoft.com/en-us/library/ee942965(v=VS.110).aspx
|
||||
-->
|
||||
|
||||
<?define NetFx451MinRelease = 378675 ?>
|
||||
<?define NetFx451WebLink = http://go.microsoft.com/fwlink/?LinkId=322115 ?>
|
||||
<?define NetFx451RedistLink = http://go.microsoft.com/fwlink/?LinkId=322116 ?>
|
||||
|
||||
<Fragment>
|
||||
<PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
|
||||
<Property Id="WIX_IS_NETFRAMEWORK_451_OR_LATER_INSTALLED" Secure="yes" />
|
||||
<SetProperty Id="WIX_IS_NETFRAMEWORK_451_OR_LATER_INSTALLED" Value="1" After="AppSearch">
|
||||
WIXNETFX4RELEASEINSTALLED >= "#$(var.NetFx451MinRelease)"
|
||||
</SetProperty>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearchRef Id="NETFRAMEWORK45"/>
|
||||
|
||||
<WixVariable Id="NetFx451WebDetectCondition" Value="NETFRAMEWORK45 >= $(var.NetFx451MinRelease)" Overridable="yes" />
|
||||
<WixVariable Id="NetFx451WebInstallCondition" Value="" Overridable="yes" />
|
||||
<WixVariable Id="NetFx451WebPackageDirectory" Value="redist\" Overridable="yes" />
|
||||
|
||||
<PackageGroup Id="NetFx451Web">
|
||||
<ExePackage
|
||||
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx451FullWebLog].html""
|
||||
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx451FullWebLog].html""
|
||||
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx451FullWebLog].html""
|
||||
PerMachine="yes"
|
||||
DetectCondition="!(wix.NetFx451WebDetectCondition)"
|
||||
InstallCondition="!(wix.NetFx451WebInstallCondition)"
|
||||
Id="NetFx451Web"
|
||||
Vital="yes"
|
||||
Permanent="yes"
|
||||
Protocol="netfx4"
|
||||
DownloadUrl="$(var.NetFx451WebLink)"
|
||||
LogPathVariable="NetFx451FullWebLog"
|
||||
Compressed="no"
|
||||
Name="!(wix.NetFx451WebPackageDirectory)NDP451-KB2859818-Web.exe">
|
||||
<RemotePayload
|
||||
Size="1021432"
|
||||
Version="4.5.50938.18408"
|
||||
ProductName="Microsoft .NET Framework 4.5.1"
|
||||
Description="Microsoft .NET Framework 4.5.1 Setup"
|
||||
CertificatePublicKey="A260A870BE1145ED71E2BB5AA19463A4FE9DCC41"
|
||||
CertificateThumbprint="108E2BA23632620C427C570B6D9DB51AC31387FE"
|
||||
Hash="4CBEA1E408DB5B423E130931B9478972E6798431" />
|
||||
</ExePackage>
|
||||
</PackageGroup>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearchRef Id="NETFRAMEWORK45"/>
|
||||
|
||||
<WixVariable Id="NetFx451RedistDetectCondition" Value="NETFRAMEWORK45 >= $(var.NetFx451MinRelease)" Overridable="yes" />
|
||||
<WixVariable Id="NetFx451RedistInstallCondition" Value="" Overridable="yes" />
|
||||
<WixVariable Id="NetFx451RedistPackageDirectory" Value="redist\" Overridable="yes" />
|
||||
|
||||
<PackageGroup Id="NetFx451Redist">
|
||||
<ExePackage
|
||||
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx451FullLog].html""
|
||||
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx451FullLog].html""
|
||||
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx451FullLog].html""
|
||||
PerMachine="yes"
|
||||
DetectCondition="!(wix.NetFx451RedistDetectCondition)"
|
||||
InstallCondition="!(wix.NetFx451RedistInstallCondition)"
|
||||
Id="NetFx451Redist"
|
||||
Vital="yes"
|
||||
Permanent="yes"
|
||||
Protocol="netfx4"
|
||||
DownloadUrl="$(var.NetFx451RedistLink)"
|
||||
LogPathVariable="NetFx451FullLog"
|
||||
Compressed="no"
|
||||
Name="!(wix.NetFx451RedistPackageDirectory)NDP451-KB2858728-x86-x64-AllOS-ENU.exe">
|
||||
<RemotePayload
|
||||
Size="70087104"
|
||||
Version="4.5.50938.18408"
|
||||
ProductName="Microsoft .NET Framework 4.5.1"
|
||||
Description="Microsoft .NET Framework 4.5.1 Setup"
|
||||
CertificatePublicKey="A260A870BE1145ED71E2BB5AA19463A4FE9DCC41"
|
||||
CertificateThumbprint="108E2BA23632620C427C570B6D9DB51AC31387FE"
|
||||
Hash="5934DD101414BBC0B7F1EE2780D2FC8B9BEC5C4D" />
|
||||
</ExePackage>
|
||||
</PackageGroup>
|
||||
</Fragment>
|
||||
</Wix>
|
|
@ -0,0 +1,95 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
|
||||
|
||||
<!--
|
||||
.NET Framework installation state properties
|
||||
|
||||
Official documentation can be found at the following location:
|
||||
|
||||
.NET Framework 4.5/4.5.1/4.5.2 - http://msdn.microsoft.com/en-us/library/w0x726c2(v=vs.110).aspx
|
||||
-->
|
||||
|
||||
<?define NetFx452MinRelease = 379893 ?>
|
||||
<?define NetFx452WebLink = http://go.microsoft.com/fwlink/?LinkId=397707 ?>
|
||||
<?define NetFx452RedistLink = http://go.microsoft.com/fwlink/?LinkId=397708 ?>
|
||||
|
||||
<Fragment>
|
||||
<PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
|
||||
<Property Id="WIX_IS_NETFRAMEWORK_452_OR_LATER_INSTALLED" Secure="yes" />
|
||||
<SetProperty Id="WIX_IS_NETFRAMEWORK_452_OR_LATER_INSTALLED" Value="1" After="AppSearch">
|
||||
WIXNETFX4RELEASEINSTALLED >= "#$(var.NetFx452MinRelease)"
|
||||
</SetProperty>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearchRef Id="NETFRAMEWORK45"/>
|
||||
|
||||
<WixVariable Id="NetFx452WebDetectCondition" Value="NETFRAMEWORK45 >= $(var.NetFx452MinRelease)" Overridable="yes" />
|
||||
<WixVariable Id="NetFx452WebInstallCondition" Value="" Overridable="yes" />
|
||||
<WixVariable Id="NetFx452WebPackageDirectory" Value="redist\" Overridable="yes" />
|
||||
|
||||
<PackageGroup Id="NetFx452Web">
|
||||
<ExePackage
|
||||
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx452FullWebLog].html""
|
||||
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx452FullWebLog].html""
|
||||
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx452FullWebLog].html""
|
||||
PerMachine="yes"
|
||||
DetectCondition="!(wix.NetFx452WebDetectCondition)"
|
||||
InstallCondition="!(wix.NetFx452WebInstallCondition)"
|
||||
Id="NetFx452Web"
|
||||
Vital="yes"
|
||||
Permanent="yes"
|
||||
Protocol="netfx4"
|
||||
DownloadUrl="$(var.NetFx452WebLink)"
|
||||
LogPathVariable="NetFx452FullWebLog"
|
||||
Compressed="no"
|
||||
Name="!(wix.NetFx452WebPackageDirectory)NDP452-KB2901954-Web.exe">
|
||||
<RemotePayload CertificatePublicKey="B78FE7F6917E1BC5F4A9C77BA3D555A0E807B9E0"
|
||||
CertificateThumbprint="67B1757863E3EFF760EA9EBB02849AF07D3A8080"
|
||||
Description="Microsoft .NET Framework 4.5.2 Setup"
|
||||
Hash="5B71B20A455F6EEAB79DD1EDCAB0BA66AD0D2208"
|
||||
ProductName="Microsoft .NET Framework 4.5.2"
|
||||
Size="1118920"
|
||||
Version="4.5.51209.34209" />
|
||||
</ExePackage>
|
||||
</PackageGroup>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearchRef Id="NETFRAMEWORK45"/>
|
||||
|
||||
<WixVariable Id="NetFx452RedistDetectCondition" Value="NETFRAMEWORK45 >= $(var.NetFx452MinRelease)" Overridable="yes" />
|
||||
<WixVariable Id="NetFx452RedistInstallCondition" Value="" Overridable="yes" />
|
||||
<WixVariable Id="NetFx452RedistPackageDirectory" Value="redist\" Overridable="yes" />
|
||||
|
||||
<PackageGroup Id="NetFx452Redist">
|
||||
<ExePackage
|
||||
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx452FullLog].html""
|
||||
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx452FullLog].html""
|
||||
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx452FullLog].html""
|
||||
PerMachine="yes"
|
||||
DetectCondition="!(wix.NetFx452RedistDetectCondition)"
|
||||
InstallCondition="!(wix.NetFx452RedistInstallCondition)"
|
||||
Id="NetFx452Redist"
|
||||
Vital="yes"
|
||||
Permanent="yes"
|
||||
Protocol="netfx4"
|
||||
DownloadUrl="$(var.NetFx452RedistLink)"
|
||||
LogPathVariable="NetFx452FullLog"
|
||||
Compressed="no"
|
||||
Name="!(wix.NetFx452RedistPackageDirectory)NDP452-KB2901907-x86-x64-AllOS-ENU.exe">
|
||||
<RemotePayload
|
||||
CertificatePublicKey="B78FE7F6917E1BC5F4A9C77BA3D555A0E807B9E0"
|
||||
CertificateThumbprint="67B1757863E3EFF760EA9EBB02849AF07D3A8080"
|
||||
Description="Microsoft .NET Framework 4.5.2 Setup"
|
||||
Hash="89F86F9522DC7A8A965FACCE839ABB790A285A63"
|
||||
ProductName="Microsoft .NET Framework 4.5.2"
|
||||
Size="69999448"
|
||||
Version="4.5.51209.34209" />
|
||||
</ExePackage>
|
||||
</PackageGroup>
|
||||
</Fragment>
|
||||
</Wix>
|
|
@ -0,0 +1,96 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
|
||||
|
||||
<!--
|
||||
.NET Framework installation state properties
|
||||
|
||||
Official documentation can be found at the following location:
|
||||
|
||||
.NET Framework 4.5/4.5.1/4.5.2/4.6 - http://msdn.microsoft.com/en-us/library/w0x726c2(v=vs.110).aspx
|
||||
-->
|
||||
|
||||
<?define NetFx46MinRelease = 393295 ?>
|
||||
<?define NetFx46WebLink = http://go.microsoft.com/fwlink/?LinkId=560371 ?>
|
||||
<?define NetFx46RedistLink = http://go.microsoft.com/fwlink/?LinkId=560369 ?>
|
||||
|
||||
<Fragment>
|
||||
<PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
|
||||
<Property Id="WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED" Secure="yes" />
|
||||
<SetProperty Id="WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED" Value="1" After="AppSearch">
|
||||
WIXNETFX4RELEASEINSTALLED >= "#$(var.NetFx46MinRelease)"
|
||||
</SetProperty>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearchRef Id="NETFRAMEWORK45"/>
|
||||
|
||||
<WixVariable Id="NetFx46WebDetectCondition" Value="NETFRAMEWORK45 >= $(var.NetFx46MinRelease)" Overridable="yes" />
|
||||
<WixVariable Id="NetFx46WebInstallCondition" Value="" Overridable="yes" />
|
||||
<WixVariable Id="NetFx46WebPackageDirectory" Value="redist\" Overridable="yes" />
|
||||
|
||||
<PackageGroup Id="NetFx46Web">
|
||||
<ExePackage
|
||||
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx46FullLog].html""
|
||||
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx46FullLog].html""
|
||||
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx46FullLog].html""
|
||||
PerMachine="yes"
|
||||
DetectCondition="!(wix.NetFx46WebDetectCondition)"
|
||||
InstallCondition="!(wix.NetFx46WebInstallCondition)"
|
||||
Id="NetFx46Web"
|
||||
Vital="yes"
|
||||
Permanent="yes"
|
||||
Protocol="netfx4"
|
||||
DownloadUrl="$(var.NetFx46WebLink)"
|
||||
LogPathVariable="NetFx46FullLog"
|
||||
Compressed="no"
|
||||
Name="!(wix.NetFx46WebPackageDirectory)NDP46-KB3045560-Web.exe">
|
||||
<RemotePayload
|
||||
CertificatePublicKey="52868DFCA6E3AF2632389E6C1EE7D0468D3797D0"
|
||||
CertificateThumbprint="3BDA323E552DB1FDE5F4FBEE75D6D5B2B187EEDC"
|
||||
Description="Microsoft .NET Framework 4.6 Setup"
|
||||
Hash="480CA134B9E3F2437DF10719D5A8C77DDEC0A4F1"
|
||||
ProductName="Microsoft .NET Framework 4.6"
|
||||
Size="1497400"
|
||||
Version="4.6.81.0" />
|
||||
</ExePackage>
|
||||
</PackageGroup>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearchRef Id="NETFRAMEWORK45"/>
|
||||
|
||||
<WixVariable Id="NetFx46RedistDetectCondition" Value="NETFRAMEWORK45 >= $(var.NetFx46MinRelease)" Overridable="yes" />
|
||||
<WixVariable Id="NetFx46RedistInstallCondition" Value="" Overridable="yes" />
|
||||
<WixVariable Id="NetFx46RedistPackageDirectory" Value="redist\" Overridable="yes" />
|
||||
|
||||
<PackageGroup Id="NetFx46Redist">
|
||||
<ExePackage
|
||||
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx46FullLog].html""
|
||||
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx46FullLog].html""
|
||||
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx46FullLog].html""
|
||||
PerMachine="yes"
|
||||
DetectCondition="!(wix.NetFx46RedistDetectCondition)"
|
||||
InstallCondition="!(wix.NetFx46RedistInstallCondition)"
|
||||
Id="NetFx46Redist"
|
||||
Vital="yes"
|
||||
Permanent="yes"
|
||||
Protocol="netfx4"
|
||||
DownloadUrl="$(var.NetFx46RedistLink)"
|
||||
LogPathVariable="NetFx46FullLog"
|
||||
Compressed="no"
|
||||
Name="!(wix.NetFx46RedistPackageDirectory)NDP46-KB3045557-x86-x64-AllOS-ENU.exe">
|
||||
<RemotePayload
|
||||
CertificatePublicKey="52868DFCA6E3AF2632389E6C1EE7D0468D3797D0"
|
||||
CertificateThumbprint="3BDA323E552DB1FDE5F4FBEE75D6D5B2B187EEDC"
|
||||
Description="Microsoft .NET Framework 4.6 Setup"
|
||||
Hash="3049A85843EAF65E89E2336D5FE6E85E416797BE"
|
||||
ProductName="Microsoft .NET Framework 4.6"
|
||||
Size="65444688"
|
||||
Version="4.6.81.0" />
|
||||
</ExePackage>
|
||||
</PackageGroup>
|
||||
</Fragment>
|
||||
</Wix>
|
|
@ -0,0 +1,95 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
|
||||
|
||||
<!--
|
||||
.NET Framework installation state properties
|
||||
|
||||
Official documentation can be found at the following location:
|
||||
|
||||
.NET Framework 4.5/4.5.1/4.5.2/4.6/4.6.1 - http://msdn.microsoft.com/en-us/library/w0x726c2(v=vs.110).aspx
|
||||
-->
|
||||
|
||||
<?define NetFx461MinRelease = 394254 ?>
|
||||
<?define NetFx461WebLink = http://go.microsoft.com/fwlink/?LinkId=671728 ?>
|
||||
<?define NetFx461RedistLink = http://go.microsoft.com/fwlink/?LinkId=671743 ?>
|
||||
|
||||
<Fragment>
|
||||
<PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
|
||||
<Property Id="WIX_IS_NETFRAMEWORK_461_OR_LATER_INSTALLED" Secure="yes" />
|
||||
<SetProperty Id="WIX_IS_NETFRAMEWORK_461_OR_LATER_INSTALLED" Value="1" After="AppSearch">
|
||||
WIXNETFX4RELEASEINSTALLED >= "#$(var.NetFx461MinRelease)"
|
||||
</SetProperty>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearchRef Id="NETFRAMEWORK45"/>
|
||||
|
||||
<WixVariable Id="NetFx461WebDetectCondition" Value="NETFRAMEWORK45 >= $(var.NetFx461MinRelease)" Overridable="yes" />
|
||||
<WixVariable Id="NetFx461WebInstallCondition" Value="" Overridable="yes" />
|
||||
<WixVariable Id="NetFx461WebPackageDirectory" Value="redist\" Overridable="yes" />
|
||||
|
||||
<PackageGroup Id="NetFx461Web">
|
||||
<ExePackage
|
||||
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx461FullLog].html""
|
||||
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx461FullLog].html""
|
||||
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx461FullLog].html""
|
||||
PerMachine="yes"
|
||||
DetectCondition="!(wix.NetFx461WebDetectCondition)"
|
||||
InstallCondition="!(wix.NetFx461WebInstallCondition)"
|
||||
Id="NetFx461Web"
|
||||
Vital="yes"
|
||||
Permanent="yes"
|
||||
Protocol="netfx4"
|
||||
DownloadUrl="$(var.NetFx461WebLink)"
|
||||
LogPathVariable="NetFx461FullLog"
|
||||
Compressed="no"
|
||||
Name="!(wix.NetFx461WebPackageDirectory)NDP461-KB3102438-Web.exe">
|
||||
<RemotePayload
|
||||
CertificatePublicKey="52868DFCA6E3AF2632389E6C1EE7D0468D3797D0"
|
||||
CertificateThumbprint="3BDA323E552DB1FDE5F4FBEE75D6D5B2B187EEDC"
|
||||
Description="Microsoft .NET Framework 4.6.1 Setup"
|
||||
Hash="EE88B05232F43B517D4A368F7EE5065CDE7F67FA"
|
||||
ProductName="Microsoft .NET Framework 4.6.1"
|
||||
Size="1424328"
|
||||
Version="4.6.1055.0" />
|
||||
</ExePackage>
|
||||
</PackageGroup>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearchRef Id="NETFRAMEWORK45"/>
|
||||
|
||||
<WixVariable Id="NetFx461RedistDetectCondition" Value="NETFRAMEWORK45 >= $(var.NetFx461MinRelease)" Overridable="yes" />
|
||||
<WixVariable Id="NetFx461RedistInstallCondition" Value="" Overridable="yes" />
|
||||
<WixVariable Id="NetFx461RedistPackageDirectory" Value="redist\" Overridable="yes" />
|
||||
|
||||
<PackageGroup Id="NetFx461Redist">
|
||||
<ExePackage
|
||||
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx461FullLog].html""
|
||||
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx461FullLog].html""
|
||||
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx461FullLog].html""
|
||||
PerMachine="yes"
|
||||
DetectCondition="!(wix.NetFx461RedistDetectCondition)"
|
||||
InstallCondition="!(wix.NetFx461RedistInstallCondition)"
|
||||
Id="NetFx461Redist"
|
||||
Vital="yes"
|
||||
Permanent="yes"
|
||||
Protocol="netfx4"
|
||||
DownloadUrl="$(var.NetFx461RedistLink)"
|
||||
LogPathVariable="NetFx461FullLog"
|
||||
Compressed="no"
|
||||
Name="!(wix.NetFx461RedistPackageDirectory)NDP461-KB3102436-x86-x64-AllOS-ENU.exe">
|
||||
<RemotePayload
|
||||
CertificatePublicKey="52868DFCA6E3AF2632389E6C1EE7D0468D3797D0"
|
||||
CertificateThumbprint="3BDA323E552DB1FDE5F4FBEE75D6D5B2B187EEDC"
|
||||
Description="Microsoft .NET Framework 4.6.1 Setup"
|
||||
Hash="83D048D171FF44A3CAD9B422137656F585295866"
|
||||
ProductName="Microsoft .NET Framework 4.6.1"
|
||||
Size="67681000"
|
||||
Version="4.6.1055.0" />
|
||||
</ExePackage>
|
||||
</PackageGroup>
|
||||
</Fragment>
|
||||
</Wix>
|
|
@ -0,0 +1,95 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
|
||||
|
||||
<!--
|
||||
.NET Framework installation state properties
|
||||
|
||||
Official documentation can be found at the following location:
|
||||
|
||||
.NET Framework 4.5/4.5.1/4.5.2/4.6/4.6.1/4.6.2 - http://msdn.microsoft.com/en-us/library/w0x726c2(v=vs.110).aspx
|
||||
-->
|
||||
|
||||
<?define NetFx462MinRelease = 394802 ?>
|
||||
<?define NetFx462WebLink = http://go.microsoft.com/fwlink/?LinkId=780596 ?>
|
||||
<?define NetFx462RedistLink = http://go.microsoft.com/fwlink/?LinkId=780600 ?>
|
||||
|
||||
<Fragment>
|
||||
<PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
|
||||
<Property Id="WIX_IS_NETFRAMEWORK_462_OR_LATER_INSTALLED" Secure="yes" />
|
||||
<SetProperty Id="WIX_IS_NETFRAMEWORK_462_OR_LATER_INSTALLED" Value="1" After="AppSearch">
|
||||
WIXNETFX4RELEASEINSTALLED >= "#$(var.NetFx462MinRelease)"
|
||||
</SetProperty>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearchRef Id="NETFRAMEWORK45"/>
|
||||
|
||||
<WixVariable Id="NetFx462WebDetectCondition" Value="NETFRAMEWORK45 >= $(var.NetFx462MinRelease)" Overridable="yes" />
|
||||
<WixVariable Id="NetFx462WebInstallCondition" Value="" Overridable="yes" />
|
||||
<WixVariable Id="NetFx462WebPackageDirectory" Value="redist\" Overridable="yes" />
|
||||
|
||||
<PackageGroup Id="NetFx462Web">
|
||||
<ExePackage
|
||||
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx462FullLog].html""
|
||||
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx462FullLog].html""
|
||||
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx462FullLog].html""
|
||||
PerMachine="yes"
|
||||
DetectCondition="!(wix.NetFx462WebDetectCondition)"
|
||||
InstallCondition="!(wix.NetFx462WebInstallCondition)"
|
||||
Id="NetFx462Web"
|
||||
Vital="yes"
|
||||
Permanent="yes"
|
||||
Protocol="netfx4"
|
||||
DownloadUrl="$(var.NetFx462WebLink)"
|
||||
LogPathVariable="NetFx462FullLog"
|
||||
Compressed="no"
|
||||
Name="!(wix.NetFx462WebPackageDirectory)NDP462-KB3151802-Web.exe">
|
||||
<RemotePayload
|
||||
CertificatePublicKey="52868DFCA6E3AF2632389E6C1EE7D0468D3797D0"
|
||||
CertificateThumbprint="3BDA323E552DB1FDE5F4FBEE75D6D5B2B187EEDC"
|
||||
Description="Microsoft .NET Framework 4.6.2 Setup"
|
||||
Hash="C42E6ED280290648BBD59F664008852F4CFE4548"
|
||||
ProductName="Microsoft .NET Framework 4.6.2"
|
||||
Size="1429344"
|
||||
Version="4.6.1590.0" />
|
||||
</ExePackage>
|
||||
</PackageGroup>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<util:RegistrySearchRef Id="NETFRAMEWORK45"/>
|
||||
|
||||
<WixVariable Id="NetFx462RedistDetectCondition" Value="NETFRAMEWORK45 >= $(var.NetFx462MinRelease)" Overridable="yes" />
|
||||
<WixVariable Id="NetFx462RedistInstallCondition" Value="" Overridable="yes" />
|
||||
<WixVariable Id="NetFx462RedistPackageDirectory" Value="redist\" Overridable="yes" />
|
||||
|
||||
<PackageGroup Id="NetFx462Redist">
|
||||
<ExePackage
|
||||
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx462FullLog].html""
|
||||
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx462FullLog].html""
|
||||
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx462FullLog].html""
|
||||
PerMachine="yes"
|
||||
DetectCondition="!(wix.NetFx462RedistDetectCondition)"
|
||||
InstallCondition="!(wix.NetFx462RedistInstallCondition)"
|
||||
Id="NetFx462Redist"
|
||||
Vital="yes"
|
||||
Permanent="yes"
|
||||
Protocol="netfx4"
|
||||
DownloadUrl="$(var.NetFx462RedistLink)"
|
||||
LogPathVariable="NetFx462FullLog"
|
||||
Compressed="no"
|
||||
Name="!(wix.NetFx462RedistPackageDirectory)NDP462-KB3151800-x86-x64-AllOS-ENU.exe">
|
||||
<RemotePayload
|
||||
CertificatePublicKey="52868DFCA6E3AF2632389E6C1EE7D0468D3797D0"
|
||||
CertificateThumbprint="3BDA323E552DB1FDE5F4FBEE75D6D5B2B187EEDC"
|
||||
Description="Microsoft .NET Framework 4.6.2 Setup"
|
||||
Hash="A70F856BDA33D45AD0A8AD035F73092441715431"
|
||||
ProductName="Microsoft .NET Framework 4.6.2"
|
||||
Size="62008080"
|
||||
Version="4.6.1590.0" />
|
||||
</ExePackage>
|
||||
</PackageGroup>
|
||||
</Fragment>
|
||||
</Wix>
|
|
@ -0,0 +1,39 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
||||
|
||||
<!--
|
||||
.NET Framework installation state properties
|
||||
-->
|
||||
|
||||
<!-- Location of .NET Framework redistributable install root directory -->
|
||||
<Fragment>
|
||||
<Property Id="NETFRAMEWORKINSTALLROOTDIR" Secure="yes">
|
||||
<RegistrySearch Id="NetFxInstallRootSearch" Type="raw" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="InstallRoot" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- location of the Windows SDK current active version installation root -->
|
||||
<Fragment>
|
||||
<Property Id="WINDOWSSDKCURRENTVERSIONDIR" Secure="yes">
|
||||
<RegistrySearch Id="WindowsSdkCurrentVersionDir" Root="HKLM" Key="Software\Microsoft\Microsoft SDKs\Windows" Name="CurrentInstallFolder" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- The Windows SDK current active version -->
|
||||
<Fragment>
|
||||
<Property Id="WINDOWSSDKCURRENTVERSION" Secure="yes">
|
||||
<RegistrySearch Id="WindowsSdkCurrentVersion" Root="HKLM" Key="Software\Microsoft\Microsoft SDKs\Windows" Name="CurrentVersion" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
<!-- Release value of .NET 4.5 and later -->
|
||||
<Fragment>
|
||||
<Property Id="WIXNETFX4RELEASEINSTALLED" Secure="yes">
|
||||
<RegistrySearch Id="NetFx4ReleaseInstalled" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" Name="Release" Type="raw" />
|
||||
</Property>
|
||||
</Fragment>
|
||||
|
||||
</Wix>
|
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
|
||||
<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
||||
|
||||
<?include caSuffix.wxi ?>
|
||||
<Fragment>
|
||||
<CustomAction Id="NetFxScheduleNativeImage$(var.Suffix)" BinaryKey="NetFxCA$(var.Suffix)" DllEntry="SchedNetFx" Execute="immediate" Return="check" SuppressModularization="yes" />
|
||||
<CustomAction Id="NetFxExecuteNativeImageInstall$(var.DeferredSuffix)" BinaryKey="NetFxCA$(var.Suffix)" DllEntry="ExecNetFx" Execute="deferred" Impersonate="no" Return="ignore" SuppressModularization="yes" />
|
||||
<CustomAction Id="NetFxExecuteNativeImageCommitInstall$(var.DeferredSuffix)" BinaryKey="NetFxCA$(var.Suffix)" DllEntry="ExecNetFx" Execute="commit" Impersonate="no" Return="ignore" SuppressModularization="yes" />
|
||||
<CustomAction Id="NetFxExecuteNativeImageUninstall$(var.DeferredSuffix)" BinaryKey="NetFxCA$(var.Suffix)" DllEntry="ExecNetFx" Execute="deferred" Impersonate="no" Return="ignore" SuppressModularization="yes" />
|
||||
<CustomAction Id="NetFxExecuteNativeImageCommitUninstall$(var.DeferredSuffix)" BinaryKey="NetFxCA$(var.Suffix)" DllEntry="ExecNetFx" Execute="commit" Impersonate="no" Return="ignore" SuppressModularization="yes" />
|
||||
|
||||
<InstallExecuteSequence>
|
||||
<Custom Action="NetFxScheduleNativeImage$(var.Suffix)" Before="InstallFiles" Overridable="yes" />
|
||||
<Custom Action="NetFxExecuteNativeImageCommitUninstall$(var.DeferredSuffix)" After="MsiPublishAssemblies" Overridable="yes">RollbackDisabled <> 1</Custom>
|
||||
<Custom Action="NetFxExecuteNativeImageUninstall$(var.DeferredSuffix)" After="NetFxExecuteNativeImageCommitUninstall$(var.DeferredSuffix)" Overridable="yes">RollbackDisabled = 1</Custom>
|
||||
<Custom Action="NetFxExecuteNativeImageCommitInstall$(var.DeferredSuffix)" After="NetFxExecuteNativeImageUninstall$(var.DeferredSuffix)" Overridable="yes">RollbackDisabled <> 1</Custom>
|
||||
<Custom Action="NetFxExecuteNativeImageInstall$(var.DeferredSuffix)" After="NetFxExecuteNativeImageCommitInstall$(var.DeferredSuffix)" Overridable="yes">RollbackDisabled = 1</Custom>
|
||||
</InstallExecuteSequence>
|
||||
</Fragment>
|
||||
|
||||
<!-- NetFx Custom Action DLL Definitions -->
|
||||
<Fragment>
|
||||
<Binary Id="NetFxCA$(var.Suffix)" SourceFile="!(bindpath.$(var.platform))netfxca.dll" />
|
||||
</Fragment>
|
||||
</Include>
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
||||
<?define platform=x86 ?>
|
||||
<?include NetfxExtension_Platform.wxi ?>
|
||||
</Wix>
|
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
|
||||
<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
||||
<?ifndef platform ?>
|
||||
<?error Required value "platform" not defined in include caSuffix.wxi ?>
|
||||
<?endif ?>
|
||||
|
||||
<?ifdef Suffix ?>
|
||||
<?undef Suffix ?>
|
||||
<?undef DeferredSuffix ?>
|
||||
<?endif ?>
|
||||
|
||||
<?if $(var.platform)="x86" ?>
|
||||
<?define Suffix="" ?>
|
||||
<?define DeferredSuffix="" ?>
|
||||
<?endif ?>
|
||||
|
||||
<?if $(var.platform)="x64" ?>
|
||||
<?define Suffix="_x64" ?>
|
||||
<?define DeferredSuffix="_64" ?>
|
||||
<?endif ?>
|
||||
|
||||
<?if $(var.platform)="arm" ?>
|
||||
<?define Suffix="_ARM" ?>
|
||||
<?define DeferredSuffix="_ARM" ?>
|
||||
<?endif ?>
|
||||
</Include>
|
|
@ -0,0 +1,53 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="15.0">
|
||||
<Import Project="..\..\packages\WixToolset.Core.InternalPackage.4.0.64\build\WixToolset.Core.InternalPackage.props" Condition="Exists('..\..\packages\WixToolset.Core.InternalPackage.4.0.64\build\WixToolset.Core.InternalPackage.props')" />
|
||||
<Import Project="..\FindLocalWix.props" />
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{45e4a6ac-3190-4e17-83f0-9935ffa5dc2b}</ProjectGuid>
|
||||
<OutputName>netfx</OutputName>
|
||||
<OutputType>Library</OutputType>
|
||||
<BindFiles>true</BindFiles>
|
||||
<Pedantic>true</Pedantic>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="NetFxExtension.wxs" />
|
||||
<Compile Include="NetFx1.wxs" />
|
||||
<Compile Include="NetFx1.1.wxs" />
|
||||
<Compile Include="NetFx2.wxs" />
|
||||
<Compile Include="NetFx3.wxs" />
|
||||
<Compile Include="NetFx3.5.wxs" />
|
||||
<Compile Include="NetFx4.wxs" />
|
||||
<Compile Include="NetFx4.5.wxs" />
|
||||
<Compile Include="NetFx451.wxs" />
|
||||
<Compile Include="NetFx452.wxs" />
|
||||
<Compile Include="NetFx46.wxs" />
|
||||
<Compile Include="NetFx461.wxs" />
|
||||
<Compile Include="NetFx462.wxs" />
|
||||
<Compile Include="NetFxExtension_x86.wxs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ca\netfxca.vcxproj">
|
||||
<Name>netfxca</Name>
|
||||
<Project>{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}</Project>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(WixTargetsPath)" Condition=" '$(WixTargetsPath)' != '' AND Exists('$(WixTargetsPath)') " />
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\wix.targets" Condition=" '$(WixTargetsPath)' == '' AND Exists('$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\wix.targets') " />
|
||||
<Target Name="EnsureWixToolsetInstalled" Condition=" '$(WixTargetsImported)' != 'true' ">
|
||||
<Error Text="FG-WiX or WiX Toolset build tools (v3.11 or later) must be installed to build this project. To download FG-WiX, go to https://www.firegiant.com/downloads/. To download the WiX Toolset, go to http://wixtoolset.org/releases/." />
|
||||
</Target>
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\..\packages\Nerdbank.GitVersioning.2.1.7\build\Nerdbank.GitVersioning.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Nerdbank.GitVersioning.2.1.7\build\Nerdbank.GitVersioning.targets'))" />
|
||||
<Error Condition="!Exists('..\..\packages\WixToolset.Util.wixext.4.0.1\build\WixToolset.Util.wixext.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.Util.wixext.4.0.1\build\WixToolset.Util.wixext.targets'))" />
|
||||
<Error Condition="!Exists('..\..\packages\WixToolset.Core.InternalPackage.4.0.64\build\WixToolset.Core.InternalPackage.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.Core.InternalPackage.4.0.64\build\WixToolset.Core.InternalPackage.props'))" />
|
||||
</Target>
|
||||
<Import Project="..\..\packages\Nerdbank.GitVersioning.2.1.7\build\Nerdbank.GitVersioning.targets" Condition="Exists('..\..\packages\Nerdbank.GitVersioning.2.1.7\build\Nerdbank.GitVersioning.targets')" />
|
||||
<Import Project="..\..\packages\WixToolset.Util.wixext.4.0.1\build\WixToolset.Util.wixext.targets" Condition="Exists('..\..\packages\WixToolset.Util.wixext.4.0.1\build\WixToolset.Util.wixext.targets')" />
|
||||
</Project>
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Nerdbank.GitVersioning" version="2.1.7" developmentDependency="true" targetFramework="net40" />
|
||||
<package id="WixToolset.Core.InternalPackage" version="4.0.64" targetFramework="net40" developmentDependency="true" />
|
||||
<package id="WixToolset.Util.wixext" version="4.0.1" targetFramework="net40" />
|
||||
</packages>
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"version": "4.0",
|
||||
"publicReleaseRefSpec": [
|
||||
"^refs/heads/master$"
|
||||
],
|
||||
"cloudBuild": {
|
||||
"buildNumber": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
Загрузка…
Ссылка в новой задаче