This commit is contained in:
Rob Mensching 2017-12-30 01:56:55 -08:00
Родитель 3540e7467e
Коммит c8f39be3f8
70 изменённых файлов: 22931 добавлений и 0 удалений

73
Util.wixext.sln Normal file
Просмотреть файл

@ -0,0 +1,73 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2003
MinimumVisualStudioVersion = 15.0.26124.0
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "utilca", "src\ca\utilca.vcxproj", "{076018F7-19BD-423A-ABBF-229273DA08D8}"
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "util", "src\wixlib\util.wixproj", "{1ACFFEFD-505A-41A5-ACBF-A02B7B473AA2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.Util.wixext", "src\wixext\WixToolset.Util.wixext.csproj", "{6CF033EB-0A39-4AC6-9D41-9BD506352045}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.Util", "src\test\WixToolsetTest.Util\WixToolsetTest.Util.csproj", "{D5D34EC4-AF91-4B11-AC0A-FA5242AE924B}"
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
{076018F7-19BD-423A-ABBF-229273DA08D8}.Debug|Any CPU.ActiveCfg = Debug|Win32
{076018F7-19BD-423A-ABBF-229273DA08D8}.Debug|x64.ActiveCfg = Debug|Win32
{076018F7-19BD-423A-ABBF-229273DA08D8}.Debug|x86.ActiveCfg = Debug|Win32
{076018F7-19BD-423A-ABBF-229273DA08D8}.Debug|x86.Build.0 = Debug|Win32
{076018F7-19BD-423A-ABBF-229273DA08D8}.Release|Any CPU.ActiveCfg = Release|Win32
{076018F7-19BD-423A-ABBF-229273DA08D8}.Release|x64.ActiveCfg = Release|Win32
{076018F7-19BD-423A-ABBF-229273DA08D8}.Release|x86.ActiveCfg = Release|Win32
{076018F7-19BD-423A-ABBF-229273DA08D8}.Release|x86.Build.0 = Release|Win32
{1ACFFEFD-505A-41A5-ACBF-A02B7B473AA2}.Debug|Any CPU.ActiveCfg = Debug|x86
{1ACFFEFD-505A-41A5-ACBF-A02B7B473AA2}.Debug|x64.ActiveCfg = Debug|x64
{1ACFFEFD-505A-41A5-ACBF-A02B7B473AA2}.Debug|x64.Build.0 = Debug|x64
{1ACFFEFD-505A-41A5-ACBF-A02B7B473AA2}.Debug|x86.ActiveCfg = Debug|x86
{1ACFFEFD-505A-41A5-ACBF-A02B7B473AA2}.Debug|x86.Build.0 = Debug|x86
{1ACFFEFD-505A-41A5-ACBF-A02B7B473AA2}.Release|Any CPU.ActiveCfg = Release|x86
{1ACFFEFD-505A-41A5-ACBF-A02B7B473AA2}.Release|x64.ActiveCfg = Release|x64
{1ACFFEFD-505A-41A5-ACBF-A02B7B473AA2}.Release|x64.Build.0 = Release|x64
{1ACFFEFD-505A-41A5-ACBF-A02B7B473AA2}.Release|x86.ActiveCfg = Release|x86
{1ACFFEFD-505A-41A5-ACBF-A02B7B473AA2}.Release|x86.Build.0 = Release|x86
{6CF033EB-0A39-4AC6-9D41-9BD506352045}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6CF033EB-0A39-4AC6-9D41-9BD506352045}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6CF033EB-0A39-4AC6-9D41-9BD506352045}.Debug|x64.ActiveCfg = Debug|Any CPU
{6CF033EB-0A39-4AC6-9D41-9BD506352045}.Debug|x64.Build.0 = Debug|Any CPU
{6CF033EB-0A39-4AC6-9D41-9BD506352045}.Debug|x86.ActiveCfg = Debug|Any CPU
{6CF033EB-0A39-4AC6-9D41-9BD506352045}.Debug|x86.Build.0 = Debug|Any CPU
{6CF033EB-0A39-4AC6-9D41-9BD506352045}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6CF033EB-0A39-4AC6-9D41-9BD506352045}.Release|Any CPU.Build.0 = Release|Any CPU
{6CF033EB-0A39-4AC6-9D41-9BD506352045}.Release|x64.ActiveCfg = Release|Any CPU
{6CF033EB-0A39-4AC6-9D41-9BD506352045}.Release|x64.Build.0 = Release|Any CPU
{6CF033EB-0A39-4AC6-9D41-9BD506352045}.Release|x86.ActiveCfg = Release|Any CPU
{6CF033EB-0A39-4AC6-9D41-9BD506352045}.Release|x86.Build.0 = Release|Any CPU
{D5D34EC4-AF91-4B11-AC0A-FA5242AE924B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D5D34EC4-AF91-4B11-AC0A-FA5242AE924B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D5D34EC4-AF91-4B11-AC0A-FA5242AE924B}.Debug|x64.ActiveCfg = Debug|Any CPU
{D5D34EC4-AF91-4B11-AC0A-FA5242AE924B}.Debug|x64.Build.0 = Debug|Any CPU
{D5D34EC4-AF91-4B11-AC0A-FA5242AE924B}.Debug|x86.ActiveCfg = Debug|Any CPU
{D5D34EC4-AF91-4B11-AC0A-FA5242AE924B}.Debug|x86.Build.0 = Debug|Any CPU
{D5D34EC4-AF91-4B11-AC0A-FA5242AE924B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D5D34EC4-AF91-4B11-AC0A-FA5242AE924B}.Release|Any CPU.Build.0 = Release|Any CPU
{D5D34EC4-AF91-4B11-AC0A-FA5242AE924B}.Release|x64.ActiveCfg = Release|Any CPU
{D5D34EC4-AF91-4B11-AC0A-FA5242AE924B}.Release|x64.Build.0 = Release|Any CPU
{D5D34EC4-AF91-4B11-AC0A-FA5242AE924B}.Release|x86.ActiveCfg = Release|Any CPU
{D5D34EC4-AF91-4B11-AC0A-FA5242AE924B}.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

13
appveyor.cmd Normal file
Просмотреть файл

@ -0,0 +1,13 @@
@setlocal
@pushd %~dp0
nuget restore
msbuild -p:Configuration=Release -t:Restore
msbuild -p:Configuration=Release src\test\WixToolsetTest.Util\WixToolsetTest.Util.csproj
msbuild -p:Configuration=Release -t:Pack src\wixext\WixToolset.Util.wixext.csproj
@popd
@endlocal

29
appveyor.yml Normal file
Просмотреть файл

@ -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=

15
nuget.config Normal file
Просмотреть файл

@ -0,0 +1,15 @@
<?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="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>

101
src/Cpp.Build.props Normal file
Просмотреть файл

@ -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) &gt; 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>

22
src/Directory.Build.props Normal file
Просмотреть файл

@ -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>

8
src/FindLocalWix.props Normal file
Просмотреть файл

@ -0,0 +1,8 @@
<?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\build\Release\publish\net461\wix.targets') ">$(MSBuildThisFileDirectory)..\..\Core\build\Release\publish\net461\wix.targets</WixTargetsPath>
</PropertyGroup>
</Project>

26
src/ca/dllmain.cpp Normal file
Просмотреть файл

@ -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 custom actions
********************************************************************/
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;
}

6
src/ca/packages.config Normal file
Просмотреть файл

@ -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>

13
src/ca/precomp.h Normal file
Просмотреть файл

@ -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>
#define MAXUINT USHRT_MAX
#include <Setup.Configuration.h>
#include "wcautil.h"
#include "fileutil.h"
#include "strutil.h"

3
src/ca/utilca.cpp Normal file
Просмотреть файл

@ -0,0 +1,3 @@
// 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"

7
src/ca/utilca.def Normal file
Просмотреть файл

@ -0,0 +1,7 @@
; 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 "utilca"
EXPORTS

69
src/ca/utilca.vcxproj Normal file
Просмотреть файл

@ -0,0 +1,69 @@
<?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>{076018F7-19BD-423A-ABBF-229273DA08D8}</ProjectGuid>
<ConfigurationType>DynamicLibrary</ConfigurationType>
<TargetName>utilca</TargetName>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<ProjectModuleDefinitionFile>utilca.def</ProjectModuleDefinitionFile>
<Description>WiX Toolset Util 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="utilca.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="precomp.h" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
<None Include="utilca.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,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,16 @@
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
<Fragment>
<util:User Id="Everyone" Name="Everyone" />
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component>
<File Source="example.txt" />
<util:FileShare Id="ExampleFileShare" Description="An example file share" Name="example">
<util:FileSharePermission User="Everyone" Read="yes" />
</util:FileShare>
</Component>
</ComponentGroup>
</Fragment>
</Wix>

Просмотреть файл

@ -0,0 +1 @@
This is example.txt.

Просмотреть файл

@ -0,0 +1,34 @@
// 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.VisualStudio
{
using System.Linq;
using WixBuildTools.TestSupport;
using WixToolset.Core.TestPackage;
using WixToolset.Util;
using Xunit;
public class VisualStudioExtensionFixture
{
[Fact]
public void CanBuildUsingFileShare()
{
var folder = TestData.Get(@"TestData\UsingFileShare");
var build = new Builder(folder, typeof(UtilExtensionFactory), new[] { folder });
var results = build.BuildAndQuery(Build, "FileShare", "FileSharePermissions");
Assert.Equal(new[]
{
"FileShare:SetVS2010Vsix\t51\tVS_VSIX_INSTALLER_PATH\t[VS2010_VSIX_INSTALLER_PATH]\t0",
"FileSharePermissions:SetVS2012Vsix\t51\tVS_VSIX_INSTALLER_PATH\t[VS2012_VSIX_INSTALLER_PATH]\t0",
}, 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,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\UsingFileShare\example.txt" CopyToOutputDirectory="PreserveNewest" />
<Content Include="TestData\UsingFileShare\Package.en-us.wxl" CopyToOutputDirectory="PreserveNewest" />
<Content Include="TestData\UsingFileShare\Package.wxs" CopyToOutputDirectory="PreserveNewest" />
<Content Include="TestData\UsingFileShare\PackageComponents.wxs" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\wixext\WixToolset.Util.wixext.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="$(WixToolsetRootFolder)\Core\src\WixToolset.Core.TestPackage\WixToolset.Core.TestPackage.csproj" Condition=" '$(Configuration)' == 'Debug' And Exists('$(WixToolsetRootFolder)\Core\src\WixToolset.Core.TestPackage\WixToolset.Core.TestPackage.csproj') " />
<ProjectReference Include="$(WixToolsetRootFolder)\Core\src\wix\wix.csproj" Condition=" '$(Configuration)' == 'Debug' And Exists('$(WixToolsetRootFolder)\Core\src\wix\wix.csproj') " />
<PackageReference Include="WixToolset.Core.TestPackage" Version="4.0.*" Condition=" '$(Configuration)' == 'Release' Or !Exists('$(WixToolsetRootFolder)\Core\src\WixToolset.Core.TestPackage\WixToolset.Core.TestPackage.csproj') " 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,192 @@
// Captured from: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.dll
namespace System.Diagnostics
{
public enum PerformanceCounterType
{
//
// Summary:
// An instantaneous counter that shows the most recently observed value in hexadecimal
// format. Used, for example, to maintain a simple count of items or operations.
NumberOfItemsHEX32 = 0,
//
// Summary:
// An instantaneous counter that shows the most recently observed value. Used, for
// example, to maintain a simple count of a very large number of items or operations.
// It is the same as NumberOfItemsHEX32 except that it uses larger fields to accommodate
// larger values.
NumberOfItemsHEX64 = 256,
//
// Summary:
// An instantaneous counter that shows the most recently observed value. Used, for
// example, to maintain a simple count of items or operations.
NumberOfItems32 = 65536,
//
// Summary:
// An instantaneous counter that shows the most recently observed value. Used, for
// example, to maintain a simple count of a very large number of items or operations.
// It is the same as NumberOfItems32 except that it uses larger fields to accommodate
// larger values.
NumberOfItems64 = 65792,
//
// Summary:
// A difference counter that shows the change in the measured attribute between
// the two most recent sample intervals.
CounterDelta32 = 4195328,
//
// Summary:
// A difference counter that shows the change in the measured attribute between
// the two most recent sample intervals. It is the same as the CounterDelta32 counter
// type except that is uses larger fields to accomodate larger values.
CounterDelta64 = 4195584,
//
// Summary:
// An average counter that shows the average number of operations completed in one
// second. When a counter of this type samples the data, each sampling interrupt
// returns one or zero. The counter data is the number of ones that were sampled.
// It measures time in units of ticks of the system performance timer.
SampleCounter = 4260864,
//
// Summary:
// An average counter designed to monitor the average length of a queue to a resource
// over time. It shows the difference between the queue lengths observed during
// the last two sample intervals divided by the duration of the interval. This type
// of counter is typically used to track the number of items that are queued or
// waiting.
CountPerTimeInterval32 = 4523008,
//
// Summary:
// An average counter that monitors the average length of a queue to a resource
// over time. Counters of this type display the difference between the queue lengths
// observed during the last two sample intervals, divided by the duration of the
// interval. This counter type is the same as CountPerTimeInterval32 except that
// it uses larger fields to accommodate larger values. This type of counter is typically
// used to track a high-volume or very large number of items that are queued or
// waiting.
CountPerTimeInterval64 = 4523264,
//
// Summary:
// A difference counter that shows the average number of operations completed during
// each second of the sample interval. Counters of this type measure time in ticks
// of the system clock.
RateOfCountsPerSecond32 = 272696320,
//
// Summary:
// A difference counter that shows the average number of operations completed during
// each second of the sample interval. Counters of this type measure time in ticks
// of the system clock. This counter type is the same as the RateOfCountsPerSecond32
// type, but it uses larger fields to accommodate larger values to track a high-volume
// number of items or operations per second, such as a byte-transmission rate.
RateOfCountsPerSecond64 = 272696576,
//
// Summary:
// An instantaneous percentage counter that shows the ratio of a subset to its set
// as a percentage. For example, it compares the number of bytes in use on a disk
// to the total number of bytes on the disk. Counters of this type display the current
// percentage only, not an average over time.
RawFraction = 537003008,
//
// Summary:
// A percentage counter that shows the average time that a component is active as
// a percentage of the total sample time.
CounterTimer = 541132032,
//
// Summary:
// A percentage counter that shows the active time of a component as a percentage
// of the total elapsed time of the sample interval. It measures time in units of
// 100 nanoseconds (ns). Counters of this type are designed to measure the activity
// of one component at a time.
Timer100Ns = 542180608,
//
// Summary:
// A percentage counter that shows the average ratio of hits to all operations during
// the last two sample intervals.
SampleFraction = 549585920,
//
// Summary:
// A percentage counter that displays the average percentage of active time observed
// during sample interval. The value of these counters is calculated by monitoring
// the percentage of time that the service was inactive and then subtracting that
// value from 100 percent.
CounterTimerInverse = 557909248,
//
// Summary:
// A percentage counter that shows the average percentage of active time observed
// during the sample interval.
Timer100NsInverse = 558957824,
//
// Summary:
// A percentage counter that displays the active time of one or more components
// as a percentage of the total time of the sample interval. Because the numerator
// records the active time of components operating simultaneously, the resulting
// percentage can exceed 100 percent.
CounterMultiTimer = 574686464,
//
// Summary:
// A percentage counter that shows the active time of one or more components as
// a percentage of the total time of the sample interval. It measures time in 100
// nanosecond (ns) units.
CounterMultiTimer100Ns = 575735040,
//
// Summary:
// A percentage counter that shows the active time of one or more components as
// a percentage of the total time of the sample interval. It derives the active
// time by measuring the time that the components were not active and subtracting
// the result from 100 percent by the number of objects monitored.
CounterMultiTimerInverse = 591463680,
//
// Summary:
// A percentage counter that shows the active time of one or more components as
// a percentage of the total time of the sample interval. Counters of this type
// measure time in 100 nanosecond (ns) units. They derive the active time by measuring
// the time that the components were not active and subtracting the result from
// multiplying 100 percent by the number of objects monitored.
CounterMultiTimer100NsInverse = 592512256,
//
// Summary:
// An average counter that measures the time it takes, on average, to complete a
// process or operation. Counters of this type display a ratio of the total elapsed
// time of the sample interval to the number of processes or operations completed
// during that time. This counter type measures time in ticks of the system clock.
AverageTimer32 = 805438464,
//
// Summary:
// A difference timer that shows the total time between when the component or process
// started and the time when this value is calculated.
ElapsedTime = 807666944,
//
// Summary:
// An average counter that shows how many items are processed, on average, during
// an operation. Counters of this type display a ratio of the items processed to
// the number of operations completed. The ratio is calculated by comparing the
// number of items processed during the last interval to the number of operations
// completed during the last interval.
AverageCount64 = 1073874176,
//
// Summary:
// A base counter that stores the number of sampling interrupts taken and is used
// as a denominator in the sampling fraction. The sampling fraction is the number
// of samples that were 1 (or true) for a sample interrupt. Check that this value
// is greater than zero before using it as the denominator in a calculation of SampleFraction.
SampleBase = 1073939457,
//
// Summary:
// A base counter that is used in the calculation of time or count averages, such
// as AverageTimer32 and AverageCount64. Stores the denominator for calculating
// a counter to present "time per operation" or "count per operation".
AverageBase = 1073939458,
//
// Summary:
// A base counter that stores the denominator of a counter that presents a general
// arithmetic fraction. Check that this value is greater than zero before using
// it as the denominator in a RawFraction value calculation.
RawBase = 1073939459,
//
// Summary:
// A base counter that indicates the number of items sampled. It is used as the
// denominator in the calculations to get an average among the items sampled when
// taking timings of multiple, but similar items. Used with CounterMultiTimer, CounterMultiTimerInverse,
// CounterMultiTimer100Ns, and CounterMultiTimer100NsInverse.
CounterMultiBase = 1107494144
}
}

Просмотреть файл

@ -0,0 +1,55 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition EventManifest = new IntermediateTupleDefinition(
UtilTupleDefinitionType.EventManifest.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(EventManifestTupleFields.Component_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(EventManifestTupleFields.File), IntermediateFieldType.String),
},
typeof(EventManifestTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum EventManifestTupleFields
{
Component_,
File,
}
public class EventManifestTuple : IntermediateTuple
{
public EventManifestTuple() : base(UtilTupleDefinitions.EventManifest, null, null)
{
}
public EventManifestTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.EventManifest, sourceLineNumber, id)
{
}
public IntermediateField this[EventManifestTupleFields index] => this.Fields[(int)index];
public string Component_
{
get => this.Fields[(int)EventManifestTupleFields.Component_].AsString();
set => this.Set((int)EventManifestTupleFields.Component_, value);
}
public string File
{
get => this.Fields[(int)EventManifestTupleFields.File].AsString();
set => this.Set((int)EventManifestTupleFields.File, value);
}
}
}

Просмотреть файл

@ -0,0 +1,63 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition FileSharePermissions = new IntermediateTupleDefinition(
UtilTupleDefinitionType.FileSharePermissions.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(FileSharePermissionsTupleFields.FileShare_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(FileSharePermissionsTupleFields.User_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(FileSharePermissionsTupleFields.Permissions), IntermediateFieldType.Number),
},
typeof(FileSharePermissionsTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum FileSharePermissionsTupleFields
{
FileShare_,
User_,
Permissions,
}
public class FileSharePermissionsTuple : IntermediateTuple
{
public FileSharePermissionsTuple() : base(UtilTupleDefinitions.FileSharePermissions, null, null)
{
}
public FileSharePermissionsTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.FileSharePermissions, sourceLineNumber, id)
{
}
public IntermediateField this[FileSharePermissionsTupleFields index] => this.Fields[(int)index];
public string FileShare_
{
get => this.Fields[(int)FileSharePermissionsTupleFields.FileShare_].AsString();
set => this.Set((int)FileSharePermissionsTupleFields.FileShare_, value);
}
public string User_
{
get => this.Fields[(int)FileSharePermissionsTupleFields.User_].AsString();
set => this.Set((int)FileSharePermissionsTupleFields.User_, value);
}
public int Permissions
{
get => this.Fields[(int)FileSharePermissionsTupleFields.Permissions].AsNumber();
set => this.Set((int)FileSharePermissionsTupleFields.Permissions, value);
}
}
}

Просмотреть файл

@ -0,0 +1,95 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition FileShare = new IntermediateTupleDefinition(
UtilTupleDefinitionType.FileShare.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(FileShareTupleFields.FileShare), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(FileShareTupleFields.ShareName), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(FileShareTupleFields.Component_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(FileShareTupleFields.Description), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(FileShareTupleFields.Directory_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(FileShareTupleFields.User_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(FileShareTupleFields.Permissions), IntermediateFieldType.Number),
},
typeof(FileShareTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum FileShareTupleFields
{
FileShare,
ShareName,
Component_,
Description,
Directory_,
User_,
Permissions,
}
public class FileShareTuple : IntermediateTuple
{
public FileShareTuple() : base(UtilTupleDefinitions.FileShare, null, null)
{
}
public FileShareTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.FileShare, sourceLineNumber, id)
{
}
public IntermediateField this[FileShareTupleFields index] => this.Fields[(int)index];
public string FileShare
{
get => this.Fields[(int)FileShareTupleFields.FileShare].AsString();
set => this.Set((int)FileShareTupleFields.FileShare, value);
}
public string ShareName
{
get => this.Fields[(int)FileShareTupleFields.ShareName].AsString();
set => this.Set((int)FileShareTupleFields.ShareName, value);
}
public string Component_
{
get => this.Fields[(int)FileShareTupleFields.Component_].AsString();
set => this.Set((int)FileShareTupleFields.Component_, value);
}
public string Description
{
get => this.Fields[(int)FileShareTupleFields.Description].AsString();
set => this.Set((int)FileShareTupleFields.Description, value);
}
public string Directory_
{
get => this.Fields[(int)FileShareTupleFields.Directory_].AsString();
set => this.Set((int)FileShareTupleFields.Directory_, value);
}
public string User_
{
get => this.Fields[(int)FileShareTupleFields.User_].AsString();
set => this.Set((int)FileShareTupleFields.User_, value);
}
public int Permissions
{
get => this.Fields[(int)FileShareTupleFields.Permissions].AsNumber();
set => this.Set((int)FileShareTupleFields.Permissions, value);
}
}
}

Просмотреть файл

@ -0,0 +1,71 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition Group = new IntermediateTupleDefinition(
UtilTupleDefinitionType.Group.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(GroupTupleFields.Group), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(GroupTupleFields.Component_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(GroupTupleFields.Name), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(GroupTupleFields.Domain), IntermediateFieldType.String),
},
typeof(GroupTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum GroupTupleFields
{
Group,
Component_,
Name,
Domain,
}
public class GroupTuple : IntermediateTuple
{
public GroupTuple() : base(UtilTupleDefinitions.Group, null, null)
{
}
public GroupTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.Group, sourceLineNumber, id)
{
}
public IntermediateField this[GroupTupleFields index] => this.Fields[(int)index];
public string Group
{
get => this.Fields[(int)GroupTupleFields.Group].AsString();
set => this.Set((int)GroupTupleFields.Group, value);
}
public string Component_
{
get => this.Fields[(int)GroupTupleFields.Component_].AsString();
set => this.Set((int)GroupTupleFields.Component_, value);
}
public string Name
{
get => this.Fields[(int)GroupTupleFields.Name].AsString();
set => this.Set((int)GroupTupleFields.Name, value);
}
public string Domain
{
get => this.Fields[(int)GroupTupleFields.Domain].AsString();
set => this.Set((int)GroupTupleFields.Domain, value);
}
}
}

Просмотреть файл

@ -0,0 +1,63 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition PerfmonManifest = new IntermediateTupleDefinition(
UtilTupleDefinitionType.PerfmonManifest.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(PerfmonManifestTupleFields.Component_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(PerfmonManifestTupleFields.File), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(PerfmonManifestTupleFields.ResourceFileDirectory), IntermediateFieldType.String),
},
typeof(PerfmonManifestTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum PerfmonManifestTupleFields
{
Component_,
File,
ResourceFileDirectory,
}
public class PerfmonManifestTuple : IntermediateTuple
{
public PerfmonManifestTuple() : base(UtilTupleDefinitions.PerfmonManifest, null, null)
{
}
public PerfmonManifestTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.PerfmonManifest, sourceLineNumber, id)
{
}
public IntermediateField this[PerfmonManifestTupleFields index] => this.Fields[(int)index];
public string Component_
{
get => this.Fields[(int)PerfmonManifestTupleFields.Component_].AsString();
set => this.Set((int)PerfmonManifestTupleFields.Component_, value);
}
public string File
{
get => this.Fields[(int)PerfmonManifestTupleFields.File].AsString();
set => this.Set((int)PerfmonManifestTupleFields.File, value);
}
public string ResourceFileDirectory
{
get => this.Fields[(int)PerfmonManifestTupleFields.ResourceFileDirectory].AsString();
set => this.Set((int)PerfmonManifestTupleFields.ResourceFileDirectory, value);
}
}
}

Просмотреть файл

@ -0,0 +1,63 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition Perfmon = new IntermediateTupleDefinition(
UtilTupleDefinitionType.Perfmon.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(PerfmonTupleFields.Component_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(PerfmonTupleFields.File), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(PerfmonTupleFields.Name), IntermediateFieldType.String),
},
typeof(PerfmonTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum PerfmonTupleFields
{
Component_,
File,
Name,
}
public class PerfmonTuple : IntermediateTuple
{
public PerfmonTuple() : base(UtilTupleDefinitions.Perfmon, null, null)
{
}
public PerfmonTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.Perfmon, sourceLineNumber, id)
{
}
public IntermediateField this[PerfmonTupleFields index] => this.Fields[(int)index];
public string Component_
{
get => this.Fields[(int)PerfmonTupleFields.Component_].AsString();
set => this.Set((int)PerfmonTupleFields.Component_, value);
}
public string File
{
get => this.Fields[(int)PerfmonTupleFields.File].AsString();
set => this.Set((int)PerfmonTupleFields.File, value);
}
public string Name
{
get => this.Fields[(int)PerfmonTupleFields.Name].AsString();
set => this.Set((int)PerfmonTupleFields.Name, value);
}
}
}

Просмотреть файл

@ -0,0 +1,79 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition PerformanceCategory = new IntermediateTupleDefinition(
UtilTupleDefinitionType.PerformanceCategory.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(PerformanceCategoryTupleFields.PerformanceCategory), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(PerformanceCategoryTupleFields.Component_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(PerformanceCategoryTupleFields.Name), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(PerformanceCategoryTupleFields.IniData), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(PerformanceCategoryTupleFields.ConstantData), IntermediateFieldType.String),
},
typeof(PerformanceCategoryTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum PerformanceCategoryTupleFields
{
PerformanceCategory,
Component_,
Name,
IniData,
ConstantData,
}
public class PerformanceCategoryTuple : IntermediateTuple
{
public PerformanceCategoryTuple() : base(UtilTupleDefinitions.PerformanceCategory, null, null)
{
}
public PerformanceCategoryTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.PerformanceCategory, sourceLineNumber, id)
{
}
public IntermediateField this[PerformanceCategoryTupleFields index] => this.Fields[(int)index];
public string PerformanceCategory
{
get => this.Fields[(int)PerformanceCategoryTupleFields.PerformanceCategory].AsString();
set => this.Set((int)PerformanceCategoryTupleFields.PerformanceCategory, value);
}
public string Component_
{
get => this.Fields[(int)PerformanceCategoryTupleFields.Component_].AsString();
set => this.Set((int)PerformanceCategoryTupleFields.Component_, value);
}
public string Name
{
get => this.Fields[(int)PerformanceCategoryTupleFields.Name].AsString();
set => this.Set((int)PerformanceCategoryTupleFields.Name, value);
}
public string IniData
{
get => this.Fields[(int)PerformanceCategoryTupleFields.IniData].AsString();
set => this.Set((int)PerformanceCategoryTupleFields.IniData, value);
}
public string ConstantData
{
get => this.Fields[(int)PerformanceCategoryTupleFields.ConstantData].AsString();
set => this.Set((int)PerformanceCategoryTupleFields.ConstantData, value);
}
}
}

Просмотреть файл

@ -0,0 +1,87 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition SecureObjects = new IntermediateTupleDefinition(
UtilTupleDefinitionType.SecureObjects.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(SecureObjectsTupleFields.SecureObject), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(SecureObjectsTupleFields.Table), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(SecureObjectsTupleFields.Domain), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(SecureObjectsTupleFields.User), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(SecureObjectsTupleFields.Permission), IntermediateFieldType.Number),
new IntermediateFieldDefinition(nameof(SecureObjectsTupleFields.Component_), IntermediateFieldType.String),
},
typeof(SecureObjectsTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum SecureObjectsTupleFields
{
SecureObject,
Table,
Domain,
User,
Permission,
Component_,
}
public class SecureObjectsTuple : IntermediateTuple
{
public SecureObjectsTuple() : base(UtilTupleDefinitions.SecureObjects, null, null)
{
}
public SecureObjectsTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.SecureObjects, sourceLineNumber, id)
{
}
public IntermediateField this[SecureObjectsTupleFields index] => this.Fields[(int)index];
public string SecureObject
{
get => this.Fields[(int)SecureObjectsTupleFields.SecureObject].AsString();
set => this.Set((int)SecureObjectsTupleFields.SecureObject, value);
}
public string Table
{
get => this.Fields[(int)SecureObjectsTupleFields.Table].AsString();
set => this.Set((int)SecureObjectsTupleFields.Table, value);
}
public string Domain
{
get => this.Fields[(int)SecureObjectsTupleFields.Domain].AsString();
set => this.Set((int)SecureObjectsTupleFields.Domain, value);
}
public string User
{
get => this.Fields[(int)SecureObjectsTupleFields.User].AsString();
set => this.Set((int)SecureObjectsTupleFields.User, value);
}
public int Permission
{
get => this.Fields[(int)SecureObjectsTupleFields.Permission].AsNumber();
set => this.Set((int)SecureObjectsTupleFields.Permission, value);
}
public string Component_
{
get => this.Fields[(int)SecureObjectsTupleFields.Component_].AsString();
set => this.Set((int)SecureObjectsTupleFields.Component_, value);
}
}
}

Просмотреть файл

@ -0,0 +1,119 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition ServiceConfig = new IntermediateTupleDefinition(
UtilTupleDefinitionType.ServiceConfig.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.ServiceName), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.Component_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.NewService), IntermediateFieldType.Number),
new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.FirstFailureActionType), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.SecondFailureActionType), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.ThirdFailureActionType), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.ResetPeriodInDays), IntermediateFieldType.Number),
new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.RestartServiceDelayInSeconds), IntermediateFieldType.Number),
new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.ProgramCommandLine), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.RebootMessage), IntermediateFieldType.String),
},
typeof(ServiceConfigTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum ServiceConfigTupleFields
{
ServiceName,
Component_,
NewService,
FirstFailureActionType,
SecondFailureActionType,
ThirdFailureActionType,
ResetPeriodInDays,
RestartServiceDelayInSeconds,
ProgramCommandLine,
RebootMessage,
}
public class ServiceConfigTuple : IntermediateTuple
{
public ServiceConfigTuple() : base(UtilTupleDefinitions.ServiceConfig, null, null)
{
}
public ServiceConfigTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.ServiceConfig, sourceLineNumber, id)
{
}
public IntermediateField this[ServiceConfigTupleFields index] => this.Fields[(int)index];
public string ServiceName
{
get => this.Fields[(int)ServiceConfigTupleFields.ServiceName].AsString();
set => this.Set((int)ServiceConfigTupleFields.ServiceName, value);
}
public string Component_
{
get => this.Fields[(int)ServiceConfigTupleFields.Component_].AsString();
set => this.Set((int)ServiceConfigTupleFields.Component_, value);
}
public int NewService
{
get => this.Fields[(int)ServiceConfigTupleFields.NewService].AsNumber();
set => this.Set((int)ServiceConfigTupleFields.NewService, value);
}
public string FirstFailureActionType
{
get => this.Fields[(int)ServiceConfigTupleFields.FirstFailureActionType].AsString();
set => this.Set((int)ServiceConfigTupleFields.FirstFailureActionType, value);
}
public string SecondFailureActionType
{
get => this.Fields[(int)ServiceConfigTupleFields.SecondFailureActionType].AsString();
set => this.Set((int)ServiceConfigTupleFields.SecondFailureActionType, value);
}
public string ThirdFailureActionType
{
get => this.Fields[(int)ServiceConfigTupleFields.ThirdFailureActionType].AsString();
set => this.Set((int)ServiceConfigTupleFields.ThirdFailureActionType, value);
}
public int ResetPeriodInDays
{
get => this.Fields[(int)ServiceConfigTupleFields.ResetPeriodInDays].AsNumber();
set => this.Set((int)ServiceConfigTupleFields.ResetPeriodInDays, value);
}
public int RestartServiceDelayInSeconds
{
get => this.Fields[(int)ServiceConfigTupleFields.RestartServiceDelayInSeconds].AsNumber();
set => this.Set((int)ServiceConfigTupleFields.RestartServiceDelayInSeconds, value);
}
public string ProgramCommandLine
{
get => this.Fields[(int)ServiceConfigTupleFields.ProgramCommandLine].AsString();
set => this.Set((int)ServiceConfigTupleFields.ProgramCommandLine, value);
}
public string RebootMessage
{
get => this.Fields[(int)ServiceConfigTupleFields.RebootMessage].AsString();
set => this.Set((int)ServiceConfigTupleFields.RebootMessage, value);
}
}
}

Просмотреть файл

@ -0,0 +1,55 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition UserGroup = new IntermediateTupleDefinition(
UtilTupleDefinitionType.UserGroup.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(UserGroupTupleFields.User_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(UserGroupTupleFields.Group_), IntermediateFieldType.String),
},
typeof(UserGroupTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum UserGroupTupleFields
{
User_,
Group_,
}
public class UserGroupTuple : IntermediateTuple
{
public UserGroupTuple() : base(UtilTupleDefinitions.UserGroup, null, null)
{
}
public UserGroupTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.UserGroup, sourceLineNumber, id)
{
}
public IntermediateField this[UserGroupTupleFields index] => this.Fields[(int)index];
public string User_
{
get => this.Fields[(int)UserGroupTupleFields.User_].AsString();
set => this.Set((int)UserGroupTupleFields.User_, value);
}
public string Group_
{
get => this.Fields[(int)UserGroupTupleFields.Group_].AsString();
set => this.Set((int)UserGroupTupleFields.Group_, value);
}
}
}

Просмотреть файл

@ -0,0 +1,87 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition User = new IntermediateTupleDefinition(
UtilTupleDefinitionType.User.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(UserTupleFields.User), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(UserTupleFields.Component_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(UserTupleFields.Name), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(UserTupleFields.Domain), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(UserTupleFields.Password), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(UserTupleFields.Attributes), IntermediateFieldType.Number),
},
typeof(UserTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum UserTupleFields
{
User,
Component_,
Name,
Domain,
Password,
Attributes,
}
public class UserTuple : IntermediateTuple
{
public UserTuple() : base(UtilTupleDefinitions.User, null, null)
{
}
public UserTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.User, sourceLineNumber, id)
{
}
public IntermediateField this[UserTupleFields index] => this.Fields[(int)index];
public string User
{
get => this.Fields[(int)UserTupleFields.User].AsString();
set => this.Set((int)UserTupleFields.User, value);
}
public string Component_
{
get => this.Fields[(int)UserTupleFields.Component_].AsString();
set => this.Set((int)UserTupleFields.Component_, value);
}
public string Name
{
get => this.Fields[(int)UserTupleFields.Name].AsString();
set => this.Set((int)UserTupleFields.Name, value);
}
public string Domain
{
get => this.Fields[(int)UserTupleFields.Domain].AsString();
set => this.Set((int)UserTupleFields.Domain, value);
}
public string Password
{
get => this.Fields[(int)UserTupleFields.Password].AsString();
set => this.Set((int)UserTupleFields.Password, value);
}
public int Attributes
{
get => this.Fields[(int)UserTupleFields.Attributes].AsNumber();
set => this.Set((int)UserTupleFields.Attributes, value);
}
}
}

Просмотреть файл

@ -0,0 +1,111 @@
// 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.Util
{
using System;
using WixToolset.Data;
public enum UtilTupleDefinitionType
{
EventManifest,
FileShare,
FileSharePermissions,
Group,
Perfmon,
PerfmonManifest,
PerformanceCategory,
SecureObjects,
ServiceConfig,
User,
UserGroup,
WixCloseApplication,
WixFormatFiles,
WixInternetShortcut,
WixRemoveFolderEx,
WixRestartResource,
WixTouchFile,
XmlConfig,
XmlFile,
}
public static partial class UtilTupleDefinitions
{
public static readonly Version Version = new Version("4.0.0");
public static IntermediateTupleDefinition ByName(string name)
{
if (!Enum.TryParse(name, out UtilTupleDefinitionType type))
{
return null;
}
return ByType(type);
}
public static IntermediateTupleDefinition ByType(UtilTupleDefinitionType type)
{
switch (type)
{
case UtilTupleDefinitionType.EventManifest:
return UtilTupleDefinitions.EventManifest;
case UtilTupleDefinitionType.FileShare:
return UtilTupleDefinitions.FileShare;
case UtilTupleDefinitionType.FileSharePermissions:
return UtilTupleDefinitions.FileSharePermissions;
case UtilTupleDefinitionType.Group:
return UtilTupleDefinitions.Group;
case UtilTupleDefinitionType.Perfmon:
return UtilTupleDefinitions.Perfmon;
case UtilTupleDefinitionType.PerfmonManifest:
return UtilTupleDefinitions.PerfmonManifest;
case UtilTupleDefinitionType.PerformanceCategory:
return UtilTupleDefinitions.PerformanceCategory;
case UtilTupleDefinitionType.SecureObjects:
return UtilTupleDefinitions.SecureObjects;
case UtilTupleDefinitionType.ServiceConfig:
return UtilTupleDefinitions.ServiceConfig;
case UtilTupleDefinitionType.User:
return UtilTupleDefinitions.User;
case UtilTupleDefinitionType.UserGroup:
return UtilTupleDefinitions.UserGroup;
case UtilTupleDefinitionType.WixCloseApplication:
return UtilTupleDefinitions.WixCloseApplication;
case UtilTupleDefinitionType.WixFormatFiles:
return UtilTupleDefinitions.WixFormatFiles;
case UtilTupleDefinitionType.WixInternetShortcut:
return UtilTupleDefinitions.WixInternetShortcut;
case UtilTupleDefinitionType.WixRemoveFolderEx:
return UtilTupleDefinitions.WixRemoveFolderEx;
case UtilTupleDefinitionType.WixRestartResource:
return UtilTupleDefinitions.WixRestartResource;
case UtilTupleDefinitionType.WixTouchFile:
return UtilTupleDefinitions.WixTouchFile;
case UtilTupleDefinitionType.XmlConfig:
return UtilTupleDefinitions.XmlConfig;
case UtilTupleDefinitionType.XmlFile:
return UtilTupleDefinitions.XmlFile;
default:
throw new ArgumentOutOfRangeException(nameof(type));
}
}
}
}

Просмотреть файл

@ -0,0 +1,111 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition WixCloseApplication = new IntermediateTupleDefinition(
UtilTupleDefinitionType.WixCloseApplication.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(WixCloseApplicationTupleFields.WixCloseApplication), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixCloseApplicationTupleFields.Target), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixCloseApplicationTupleFields.Description), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixCloseApplicationTupleFields.Condition), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixCloseApplicationTupleFields.Attributes), IntermediateFieldType.Number),
new IntermediateFieldDefinition(nameof(WixCloseApplicationTupleFields.Sequence), IntermediateFieldType.Number),
new IntermediateFieldDefinition(nameof(WixCloseApplicationTupleFields.Property), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixCloseApplicationTupleFields.TerminateExitCode), IntermediateFieldType.Number),
new IntermediateFieldDefinition(nameof(WixCloseApplicationTupleFields.Timeout), IntermediateFieldType.Number),
},
typeof(WixCloseApplicationTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum WixCloseApplicationTupleFields
{
WixCloseApplication,
Target,
Description,
Condition,
Attributes,
Sequence,
Property,
TerminateExitCode,
Timeout,
}
public class WixCloseApplicationTuple : IntermediateTuple
{
public WixCloseApplicationTuple() : base(UtilTupleDefinitions.WixCloseApplication, null, null)
{
}
public WixCloseApplicationTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.WixCloseApplication, sourceLineNumber, id)
{
}
public IntermediateField this[WixCloseApplicationTupleFields index] => this.Fields[(int)index];
public string WixCloseApplication
{
get => this.Fields[(int)WixCloseApplicationTupleFields.WixCloseApplication].AsString();
set => this.Set((int)WixCloseApplicationTupleFields.WixCloseApplication, value);
}
public string Target
{
get => this.Fields[(int)WixCloseApplicationTupleFields.Target].AsString();
set => this.Set((int)WixCloseApplicationTupleFields.Target, value);
}
public string Description
{
get => this.Fields[(int)WixCloseApplicationTupleFields.Description].AsString();
set => this.Set((int)WixCloseApplicationTupleFields.Description, value);
}
public string Condition
{
get => this.Fields[(int)WixCloseApplicationTupleFields.Condition].AsString();
set => this.Set((int)WixCloseApplicationTupleFields.Condition, value);
}
public int Attributes
{
get => this.Fields[(int)WixCloseApplicationTupleFields.Attributes].AsNumber();
set => this.Set((int)WixCloseApplicationTupleFields.Attributes, value);
}
public int Sequence
{
get => this.Fields[(int)WixCloseApplicationTupleFields.Sequence].AsNumber();
set => this.Set((int)WixCloseApplicationTupleFields.Sequence, value);
}
public string Property
{
get => this.Fields[(int)WixCloseApplicationTupleFields.Property].AsString();
set => this.Set((int)WixCloseApplicationTupleFields.Property, value);
}
public int TerminateExitCode
{
get => this.Fields[(int)WixCloseApplicationTupleFields.TerminateExitCode].AsNumber();
set => this.Set((int)WixCloseApplicationTupleFields.TerminateExitCode, value);
}
public int Timeout
{
get => this.Fields[(int)WixCloseApplicationTupleFields.Timeout].AsNumber();
set => this.Set((int)WixCloseApplicationTupleFields.Timeout, value);
}
}
}

Просмотреть файл

@ -0,0 +1,55 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition WixFormatFiles = new IntermediateTupleDefinition(
UtilTupleDefinitionType.WixFormatFiles.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(WixFormatFilesTupleFields.Binary_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixFormatFilesTupleFields.File_), IntermediateFieldType.String),
},
typeof(WixFormatFilesTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum WixFormatFilesTupleFields
{
Binary_,
File_,
}
public class WixFormatFilesTuple : IntermediateTuple
{
public WixFormatFilesTuple() : base(UtilTupleDefinitions.WixFormatFiles, null, null)
{
}
public WixFormatFilesTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.WixFormatFiles, sourceLineNumber, id)
{
}
public IntermediateField this[WixFormatFilesTupleFields index] => this.Fields[(int)index];
public string Binary_
{
get => this.Fields[(int)WixFormatFilesTupleFields.Binary_].AsString();
set => this.Set((int)WixFormatFilesTupleFields.Binary_, value);
}
public string File_
{
get => this.Fields[(int)WixFormatFilesTupleFields.File_].AsString();
set => this.Set((int)WixFormatFilesTupleFields.File_, value);
}
}
}

Просмотреть файл

@ -0,0 +1,103 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition WixInternetShortcut = new IntermediateTupleDefinition(
UtilTupleDefinitionType.WixInternetShortcut.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.WixInternetShortcut), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.Component_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.Directory_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.Name), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.Target), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.Attributes), IntermediateFieldType.Number),
new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.IconFile), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.IconIndex), IntermediateFieldType.Number),
},
typeof(WixInternetShortcutTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum WixInternetShortcutTupleFields
{
WixInternetShortcut,
Component_,
Directory_,
Name,
Target,
Attributes,
IconFile,
IconIndex,
}
public class WixInternetShortcutTuple : IntermediateTuple
{
public WixInternetShortcutTuple() : base(UtilTupleDefinitions.WixInternetShortcut, null, null)
{
}
public WixInternetShortcutTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.WixInternetShortcut, sourceLineNumber, id)
{
}
public IntermediateField this[WixInternetShortcutTupleFields index] => this.Fields[(int)index];
public string WixInternetShortcut
{
get => this.Fields[(int)WixInternetShortcutTupleFields.WixInternetShortcut].AsString();
set => this.Set((int)WixInternetShortcutTupleFields.WixInternetShortcut, value);
}
public string Component_
{
get => this.Fields[(int)WixInternetShortcutTupleFields.Component_].AsString();
set => this.Set((int)WixInternetShortcutTupleFields.Component_, value);
}
public string Directory_
{
get => this.Fields[(int)WixInternetShortcutTupleFields.Directory_].AsString();
set => this.Set((int)WixInternetShortcutTupleFields.Directory_, value);
}
public string Name
{
get => this.Fields[(int)WixInternetShortcutTupleFields.Name].AsString();
set => this.Set((int)WixInternetShortcutTupleFields.Name, value);
}
public string Target
{
get => this.Fields[(int)WixInternetShortcutTupleFields.Target].AsString();
set => this.Set((int)WixInternetShortcutTupleFields.Target, value);
}
public int Attributes
{
get => this.Fields[(int)WixInternetShortcutTupleFields.Attributes].AsNumber();
set => this.Set((int)WixInternetShortcutTupleFields.Attributes, value);
}
public string IconFile
{
get => this.Fields[(int)WixInternetShortcutTupleFields.IconFile].AsString();
set => this.Set((int)WixInternetShortcutTupleFields.IconFile, value);
}
public int IconIndex
{
get => this.Fields[(int)WixInternetShortcutTupleFields.IconIndex].AsNumber();
set => this.Set((int)WixInternetShortcutTupleFields.IconIndex, value);
}
}
}

Просмотреть файл

@ -0,0 +1,71 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition WixRemoveFolderEx = new IntermediateTupleDefinition(
UtilTupleDefinitionType.WixRemoveFolderEx.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(WixRemoveFolderExTupleFields.WixRemoveFolderEx), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixRemoveFolderExTupleFields.Component_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixRemoveFolderExTupleFields.Property), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixRemoveFolderExTupleFields.InstallMode), IntermediateFieldType.Number),
},
typeof(WixRemoveFolderExTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum WixRemoveFolderExTupleFields
{
WixRemoveFolderEx,
Component_,
Property,
InstallMode,
}
public class WixRemoveFolderExTuple : IntermediateTuple
{
public WixRemoveFolderExTuple() : base(UtilTupleDefinitions.WixRemoveFolderEx, null, null)
{
}
public WixRemoveFolderExTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.WixRemoveFolderEx, sourceLineNumber, id)
{
}
public IntermediateField this[WixRemoveFolderExTupleFields index] => this.Fields[(int)index];
public string WixRemoveFolderEx
{
get => this.Fields[(int)WixRemoveFolderExTupleFields.WixRemoveFolderEx].AsString();
set => this.Set((int)WixRemoveFolderExTupleFields.WixRemoveFolderEx, value);
}
public string Component_
{
get => this.Fields[(int)WixRemoveFolderExTupleFields.Component_].AsString();
set => this.Set((int)WixRemoveFolderExTupleFields.Component_, value);
}
public string Property
{
get => this.Fields[(int)WixRemoveFolderExTupleFields.Property].AsString();
set => this.Set((int)WixRemoveFolderExTupleFields.Property, value);
}
public int InstallMode
{
get => this.Fields[(int)WixRemoveFolderExTupleFields.InstallMode].AsNumber();
set => this.Set((int)WixRemoveFolderExTupleFields.InstallMode, value);
}
}
}

Просмотреть файл

@ -0,0 +1,71 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition WixRestartResource = new IntermediateTupleDefinition(
UtilTupleDefinitionType.WixRestartResource.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(WixRestartResourceTupleFields.WixRestartResource), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixRestartResourceTupleFields.Component_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixRestartResourceTupleFields.Resource), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixRestartResourceTupleFields.Attributes), IntermediateFieldType.Number),
},
typeof(WixRestartResourceTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum WixRestartResourceTupleFields
{
WixRestartResource,
Component_,
Resource,
Attributes,
}
public class WixRestartResourceTuple : IntermediateTuple
{
public WixRestartResourceTuple() : base(UtilTupleDefinitions.WixRestartResource, null, null)
{
}
public WixRestartResourceTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.WixRestartResource, sourceLineNumber, id)
{
}
public IntermediateField this[WixRestartResourceTupleFields index] => this.Fields[(int)index];
public string WixRestartResource
{
get => this.Fields[(int)WixRestartResourceTupleFields.WixRestartResource].AsString();
set => this.Set((int)WixRestartResourceTupleFields.WixRestartResource, value);
}
public string Component_
{
get => this.Fields[(int)WixRestartResourceTupleFields.Component_].AsString();
set => this.Set((int)WixRestartResourceTupleFields.Component_, value);
}
public string Resource
{
get => this.Fields[(int)WixRestartResourceTupleFields.Resource].AsString();
set => this.Set((int)WixRestartResourceTupleFields.Resource, value);
}
public int Attributes
{
get => this.Fields[(int)WixRestartResourceTupleFields.Attributes].AsNumber();
set => this.Set((int)WixRestartResourceTupleFields.Attributes, value);
}
}
}

Просмотреть файл

@ -0,0 +1,71 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition WixTouchFile = new IntermediateTupleDefinition(
UtilTupleDefinitionType.WixTouchFile.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(WixTouchFileTupleFields.WixTouchFile), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixTouchFileTupleFields.Component_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixTouchFileTupleFields.Path), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(WixTouchFileTupleFields.Attributes), IntermediateFieldType.Number),
},
typeof(WixTouchFileTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum WixTouchFileTupleFields
{
WixTouchFile,
Component_,
Path,
Attributes,
}
public class WixTouchFileTuple : IntermediateTuple
{
public WixTouchFileTuple() : base(UtilTupleDefinitions.WixTouchFile, null, null)
{
}
public WixTouchFileTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.WixTouchFile, sourceLineNumber, id)
{
}
public IntermediateField this[WixTouchFileTupleFields index] => this.Fields[(int)index];
public string WixTouchFile
{
get => this.Fields[(int)WixTouchFileTupleFields.WixTouchFile].AsString();
set => this.Set((int)WixTouchFileTupleFields.WixTouchFile, value);
}
public string Component_
{
get => this.Fields[(int)WixTouchFileTupleFields.Component_].AsString();
set => this.Set((int)WixTouchFileTupleFields.Component_, value);
}
public string Path
{
get => this.Fields[(int)WixTouchFileTupleFields.Path].AsString();
set => this.Set((int)WixTouchFileTupleFields.Path, value);
}
public int Attributes
{
get => this.Fields[(int)WixTouchFileTupleFields.Attributes].AsNumber();
set => this.Set((int)WixTouchFileTupleFields.Attributes, value);
}
}
}

Просмотреть файл

@ -0,0 +1,111 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition XmlConfig = new IntermediateTupleDefinition(
UtilTupleDefinitionType.XmlConfig.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.XmlConfig), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.File), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.ElementPath), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.VerifyPath), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.Name), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.Value), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.Flags), IntermediateFieldType.Number),
new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.Component_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.Sequence), IntermediateFieldType.Number),
},
typeof(XmlConfigTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum XmlConfigTupleFields
{
XmlConfig,
File,
ElementPath,
VerifyPath,
Name,
Value,
Flags,
Component_,
Sequence,
}
public class XmlConfigTuple : IntermediateTuple
{
public XmlConfigTuple() : base(UtilTupleDefinitions.XmlConfig, null, null)
{
}
public XmlConfigTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.XmlConfig, sourceLineNumber, id)
{
}
public IntermediateField this[XmlConfigTupleFields index] => this.Fields[(int)index];
public string XmlConfig
{
get => this.Fields[(int)XmlConfigTupleFields.XmlConfig].AsString();
set => this.Set((int)XmlConfigTupleFields.XmlConfig, value);
}
public string File
{
get => this.Fields[(int)XmlConfigTupleFields.File].AsString();
set => this.Set((int)XmlConfigTupleFields.File, value);
}
public string ElementPath
{
get => this.Fields[(int)XmlConfigTupleFields.ElementPath].AsString();
set => this.Set((int)XmlConfigTupleFields.ElementPath, value);
}
public string VerifyPath
{
get => this.Fields[(int)XmlConfigTupleFields.VerifyPath].AsString();
set => this.Set((int)XmlConfigTupleFields.VerifyPath, value);
}
public string Name
{
get => this.Fields[(int)XmlConfigTupleFields.Name].AsString();
set => this.Set((int)XmlConfigTupleFields.Name, value);
}
public string Value
{
get => this.Fields[(int)XmlConfigTupleFields.Value].AsString();
set => this.Set((int)XmlConfigTupleFields.Value, value);
}
public int Flags
{
get => this.Fields[(int)XmlConfigTupleFields.Flags].AsNumber();
set => this.Set((int)XmlConfigTupleFields.Flags, value);
}
public string Component_
{
get => this.Fields[(int)XmlConfigTupleFields.Component_].AsString();
set => this.Set((int)XmlConfigTupleFields.Component_, value);
}
public int Sequence
{
get => this.Fields[(int)XmlConfigTupleFields.Sequence].AsNumber();
set => this.Set((int)XmlConfigTupleFields.Sequence, value);
}
}
}

Просмотреть файл

@ -0,0 +1,103 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Util.Tuples;
public static partial class UtilTupleDefinitions
{
public static readonly IntermediateTupleDefinition XmlFile = new IntermediateTupleDefinition(
UtilTupleDefinitionType.XmlFile.ToString(),
new[]
{
new IntermediateFieldDefinition(nameof(XmlFileTupleFields.XmlFile), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(XmlFileTupleFields.File), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(XmlFileTupleFields.ElementPath), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(XmlFileTupleFields.Name), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(XmlFileTupleFields.Value), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(XmlFileTupleFields.Flags), IntermediateFieldType.Number),
new IntermediateFieldDefinition(nameof(XmlFileTupleFields.Component_), IntermediateFieldType.String),
new IntermediateFieldDefinition(nameof(XmlFileTupleFields.Sequence), IntermediateFieldType.Number),
},
typeof(XmlFileTuple));
}
}
namespace WixToolset.Util.Tuples
{
using WixToolset.Data;
public enum XmlFileTupleFields
{
XmlFile,
File,
ElementPath,
Name,
Value,
Flags,
Component_,
Sequence,
}
public class XmlFileTuple : IntermediateTuple
{
public XmlFileTuple() : base(UtilTupleDefinitions.XmlFile, null, null)
{
}
public XmlFileTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(UtilTupleDefinitions.XmlFile, sourceLineNumber, id)
{
}
public IntermediateField this[XmlFileTupleFields index] => this.Fields[(int)index];
public string XmlFile
{
get => this.Fields[(int)XmlFileTupleFields.XmlFile].AsString();
set => this.Set((int)XmlFileTupleFields.XmlFile, value);
}
public string File
{
get => this.Fields[(int)XmlFileTupleFields.File].AsString();
set => this.Set((int)XmlFileTupleFields.File, value);
}
public string ElementPath
{
get => this.Fields[(int)XmlFileTupleFields.ElementPath].AsString();
set => this.Set((int)XmlFileTupleFields.ElementPath, value);
}
public string Name
{
get => this.Fields[(int)XmlFileTupleFields.Name].AsString();
set => this.Set((int)XmlFileTupleFields.Name, value);
}
public string Value
{
get => this.Fields[(int)XmlFileTupleFields.Value].AsString();
set => this.Set((int)XmlFileTupleFields.Value, value);
}
public int Flags
{
get => this.Fields[(int)XmlFileTupleFields.Flags].AsNumber();
set => this.Set((int)XmlFileTupleFields.Flags, value);
}
public string Component_
{
get => this.Fields[(int)XmlFileTupleFields.Component_].AsString();
set => this.Set((int)XmlFileTupleFields.Component_, value);
}
public int Sequence
{
get => this.Fields[(int)XmlFileTupleFields.Sequence].AsNumber();
set => this.Set((int)XmlFileTupleFields.Sequence, value);
}
}
}

347
src/wixext/UtilBinder.cs Normal file
Просмотреть файл

@ -0,0 +1,347 @@
// 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_BRINGBACK_FOR_BUNDLES
using System;
using System.Collections.Generic;
using System.Globalization;
using WixToolset.Data;
using WixToolset.Extensibility;
/// <summary>
/// The binder for the WiX Toolset Utility Extension.
/// </summary>
public sealed class UtilBinder : BinderExtension
{
// TODO: When WixSearch is supported in Product, etc, we may need to call
// ReorderWixSearch() from each of those initializers.
// TODO: A general-purpose "reorder this table given these constraints"
// mechanism may end up being helpful. This could be declaratively stated
// in the table definitions, or exposed from the core Wix.dll and called
// as-needed by any extensions.
/// <summary>
/// Called before bundle binding occurs.
/// </summary>
public override void Initialize(Output bundle)
{
if (OutputType.Bundle == bundle.Type)
{
this.ReorderWixSearch(bundle);
}
}
/// <summary>
/// Reorders Any WixSearch items.
/// </summary>
/// <param name="output">Output containing the tables to process.</param>
private void ReorderWixSearch(Output output)
{
Table wixSearchTable = output.Tables["WixSearch"];
if (null == wixSearchTable || wixSearchTable.Rows.Count == 0)
{
// nothing to do!
return;
}
RowDictionary rowDictionary = new RowDictionary();
foreach (Row row in wixSearchTable.Rows)
{
rowDictionary.AddRow(row);
}
Constraints constraints = new Constraints();
Table wixSearchRelationTable = output.Tables["WixSearchRelation"];
if (null != wixSearchRelationTable && wixSearchRelationTable.Rows.Count > 0)
{
// add relational info to our data...
foreach (Row row in wixSearchRelationTable.Rows)
{
constraints.AddConstraint((string)row[0], (string)row[1]);
}
}
this.FindCircularReference(constraints);
if (this.Core.EncounteredError)
{
return;
}
this.FlattenDependentReferences(constraints);
// Reorder by topographical sort (http://en.wikipedia.org/wiki/Topological_sorting)
// We use a variation of Kahn (1962) algorithm as described in
// Wikipedia, with the additional criteria that start nodes are sorted
// lexicographically at each step to ensure a deterministic ordering
// based on 'after' dependencies and ID.
TopologicalSort sorter = new TopologicalSort();
List <string> sortedIds = sorter.Sort(rowDictionary.Keys, constraints);
// Now, re-write the table with the searches in order...
wixSearchTable.Rows.Clear();
foreach (string id in sortedIds)
{
wixSearchTable.Rows.Add(rowDictionary[id]);
}
}
/// <summary>
/// A dictionary of Row items, indexed by their first column.
/// </summary>
private class RowDictionary : Dictionary<string, Row>
{
public void AddRow(Row row)
{
this.Add((string)row[0], row);
}
// TODO: Hide other Add methods?
}
/// <summary>
/// A dictionary of constraints, mapping an id to a list of ids.
/// </summary>
private class Constraints : Dictionary<string, List<string>>
{
public void AddConstraint(string id, string afterId)
{
if (!this.ContainsKey(id))
{
this.Add(id, new List<string>());
}
// TODO: Show warning if a constraint is seen twice?
if (!this[id].Contains(afterId))
{
this[id].Add(afterId);
}
}
// TODO: Hide other Add methods?
}
/// <summary>
/// Finds circular references in the constraints.
/// </summary>
/// <param name="constraints">Constraints to check.</param>
/// <remarks>This is not particularly performant, but it works.</remarks>
private void FindCircularReference(Constraints constraints)
{
foreach (string id in constraints.Keys)
{
List<string> seenIds = new List<string>();
string chain = null;
if (FindCircularReference(constraints, id, id, seenIds, out chain))
{
// We will show a separate message for every ID that's in
// the loop. We could bail after the first one, but then
// we wouldn't catch disjoint loops in a single run.
this.Core.OnMessage(UtilErrors.CircularSearchReference(chain));
}
}
}
/// <summary>
/// Recursive function that finds circular references in the constraints.
/// </summary>
/// <param name="constraints">Constraints to check.</param>
/// <param name="checkId">The identifier currently being looking for. (Fixed across a given run.)</param>
/// <param name="currentId">The idenifier curently being tested.</param>
/// <param name="seenIds">A list of identifiers seen, to ensure each identifier is only expanded once.</param>
/// <param name="chain">If a circular reference is found, will contain the chain of references.</param>
/// <returns>True if a circular reference is found, false otherwise.</returns>
private bool FindCircularReference(Constraints constraints, string checkId, string currentId, List<string> seenIds, out string chain)
{
chain = null;
List<string> afterList = null;
if (constraints.TryGetValue(currentId, out afterList))
{
foreach (string afterId in afterList)
{
if (afterId == checkId)
{
chain = String.Format(CultureInfo.InvariantCulture, "{0} -> {1}", currentId, afterId);
return true;
}
if (!seenIds.Contains(afterId))
{
seenIds.Add(afterId);
if (FindCircularReference(constraints, checkId, afterId, seenIds, out chain))
{
chain = String.Format(CultureInfo.InvariantCulture, "{0} -> {1}", currentId, chain);
return true;
}
}
}
}
return false;
}
/// <summary>
/// Flattens any dependency chains to simplify reordering.
/// </summary>
/// <param name="constraints"></param>
private void FlattenDependentReferences(Constraints constraints)
{
foreach (string id in constraints.Keys)
{
List<string> flattenedIds = new List<string>();
AddDependentReferences(constraints, id, flattenedIds);
List<string> constraintList = constraints[id];
foreach (string flattenedId in flattenedIds)
{
if (!constraintList.Contains(flattenedId))
{
constraintList.Add(flattenedId);
}
}
}
}
/// <summary>
/// Adds dependent references to a list.
/// </summary>
/// <param name="constraints"></param>
/// <param name="currentId"></param>
/// <param name="seenIds"></param>
private void AddDependentReferences(Constraints constraints, string currentId, List<string> seenIds)
{
List<string> afterList = null;
if (constraints.TryGetValue(currentId, out afterList))
{
foreach (string afterId in afterList)
{
if (!seenIds.Contains(afterId))
{
seenIds.Add(afterId);
AddDependentReferences(constraints, afterId, seenIds);
}
}
}
}
/// <summary>
/// Reorder by topological sort
/// </summary>
/// <remarks>
/// We use a variation of Kahn (1962) algorithm as described in
/// Wikipedia (http://en.wikipedia.org/wiki/Topological_sorting), with
/// the additional criteria that start nodes are sorted lexicographically
/// at each step to ensure a deterministic ordering based on 'after'
/// dependencies and ID.
/// </remarks>
private class TopologicalSort
{
private List<string> startIds = new List<string>();
private Constraints constraints;
/// <summary>
/// Reorder by topological sort
/// </summary>
/// <param name="allIds">The complete list of IDs.</param>
/// <param name="constraints">Constraints to use.</param>
/// <returns>The topologically sorted list of IDs.</returns>
internal List<string> Sort(IEnumerable<string> allIds, Constraints constraints)
{
this.startIds.Clear();
this.CopyConstraints(constraints);
this.FindInitialStartIds(allIds);
// We always create a new sortedId list, because we return it
// to the caller and don't know what its lifetime may be.
List<string> sortedIds = new List<string>();
while (this.startIds.Count > 0)
{
this.SortStartIds();
string currentId = this.startIds[0];
sortedIds.Add(currentId);
this.startIds.RemoveAt(0);
this.ResolveConstraint(currentId);
}
return sortedIds;
}
/// <summary>
/// Copies a Constraints set (to prevent modifying the incoming data).
/// </summary>
/// <param name="constraints">Constraints to copy.</param>
private void CopyConstraints(Constraints constraints)
{
this.constraints = new Constraints();
foreach (string id in constraints.Keys)
{
foreach (string afterId in constraints[id])
{
this.constraints.AddConstraint(id, afterId);
}
}
}
/// <summary>
/// Finds initial start IDs. (Those with no constraints.)
/// </summary>
/// <param name="allIds">The complete list of IDs.</param>
private void FindInitialStartIds(IEnumerable<string> allIds)
{
foreach (string id in allIds)
{
if (!this.constraints.ContainsKey(id))
{
this.startIds.Add(id);
}
}
}
/// <summary>
/// Sorts start IDs.
/// </summary>
private void SortStartIds()
{
this.startIds.Sort();
}
/// <summary>
/// Removes the resolved constraint and updates the list of startIds
/// with any now-valid (all constraints resolved) IDs.
/// </summary>
/// <param name="resolvedId">The ID to resolve from the set of constraints.</param>
private void ResolveConstraint(string resolvedId)
{
List<string> newStartIds = new List<string>();
foreach (string id in constraints.Keys)
{
if (this.constraints[id].Contains(resolvedId))
{
this.constraints[id].Remove(resolvedId);
// If we just removed the last constraint for this
// ID, it is now a valid start ID.
if (0 == this.constraints[id].Count)
{
newStartIds.Add(id);
}
}
}
foreach (string id in newStartIds)
{
this.constraints.Remove(id);
}
this.startIds.AddRange(newStartIds);
}
}
}
#endif
}

3911
src/wixext/UtilCompiler.cs Normal file

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,17 @@
// 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.Util
{
/// <summary>
/// Constants used by Utility Extension.
/// </summary>
internal static class UtilConstants
{
internal static readonly string[] FilePermissions = { "Read", "Write", "Append", "ReadExtendedAttributes", "WriteExtendedAttributes", "Execute", null, "ReadAttributes", "WriteAttributes" };
internal static readonly string[] FolderPermissions = { "Read", "CreateFile", "CreateChild", "ReadExtendedAttributes", "WriteExtendedAttributes", "Traverse", "DeleteChild", "ReadAttributes", "WriteAttributes" };
internal static readonly string[] GenericPermissions = { "GenericAll", "GenericExecute", "GenericWrite", "GenericRead" };
internal static readonly string[] RegistryPermissions = { "Read", "Write", "CreateSubkeys", "EnumerateSubkeys", "Notify", "CreateLink" };
internal static readonly string[] ServicePermissions = { "ServiceQueryConfig", "ServiceChangeConfig", "ServiceQueryStatus", "ServiceEnumerateDependents", "ServiceStart", "ServiceStop", "ServicePauseContinue", "ServiceInterrogate", "ServiceUserDefinedControl" };
internal static readonly string[] StandardPermissions = { "Delete", "ReadPermission", "ChangePermission", "TakeOwnership", "Synchronize" };
}
}

1543
src/wixext/UtilDecompiler.cs Normal file

Разница между файлами не показана из-за своего большого размера Загрузить разницу

109
src/wixext/UtilErrors.cs Normal file
Просмотреть файл

@ -0,0 +1,109 @@
// 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.Util
{
using System;
using System.Resources;
using WixToolset.Data;
public static class UtilErrors
{
public static Message ArgumentRequiresValue(string argument)
{
return Message(null, Ids.ArgumentRequiresValue, "The argument '{0}' does not have a value specified and it is required.", argument);
}
public static Message CircularSearchReference(string chain)
{
return Message(null, Ids.CircularSearchReference, "A circular reference of search ordering constraints was detected: {0}. Search ordering references must form a directed acyclic graph.", chain);
}
public static Message DirectoryNotFound(string directory)
{
return Message(null, Ids.DirectoryNotFound, "The directory '{0}' could not be found.", directory);
}
public static Message EmptyDirectory(string directory)
{
return Message(null, Ids.EmptyDirectory, "The directory '{0}' did not contain any files or sub-directories and since empty directories are not being kept, there was nothing to harvest.", directory);
}
public static Message ErrorTransformingHarvestedWiX(string transform, string message)
{
return Message(null, Ids.ErrorTransformingHarvestedWiX, "Error applying transform {0} to harvested WiX: {1}", transform, message);
}
public static Message FileNotFound(string file)
{
return Message(null, Ids.FileNotFound, "The file '{0}' cannot be found.", file);
}
public static Message IllegalAttributeWithoutComponent(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
{
return Message(sourceLineNumbers, Ids.IllegalAttributeWithoutComponent, "The {0}/@{1} attribute cannot be specified unless the element has a Component as an ancestor. A {0} that does not have a Component ancestor is not installed.", elementName, attributeName);
}
public static Message IllegalElementWithoutComponent(SourceLineNumber sourceLineNumbers, string elementName)
{
return Message(sourceLineNumbers, Ids.IllegalElementWithoutComponent, "The {0} element cannot be specified unless the element has a Component as an ancestor. A {0} that does not have a Component ancestor is not installed.", elementName);
}
public static Message IllegalFileValueInPerfmonOrManifest(string file, string table)
{
return Message(null, Ids.IllegalFileValueInPerfmonOrManifest, "The value '{0}' in the File column, {1} table is invalid. It should be in the form of '[#file]' or '[!file]'.", file, table);
}
public static Message InvalidRegistryObject(SourceLineNumber sourceLineNumbers, string registryElementName)
{
return Message(sourceLineNumbers, Ids.InvalidRegistryObject, "The {0} element has no id and cannot have its permissions set. If you want to set permissions on a 'placeholder' registry key, force its creation by setting the ForceCreateOnInstall attribute to yes.", registryElementName);
}
public static Message PerformanceCategoryNotFound(string key)
{
return Message(null, Ids.PerformanceCategoryNotFound, "Performance category '{0}' not found.", key);
}
public static Message SpacesNotAllowedInArgumentValue(string arg, string value)
{
return Message(null, Ids.SpacesNotAllowedInArgumentValue, "The switch '{0}' does not allow the spaces from the value. Please remove the spaces in from the value: {1}", arg, value);
}
public static Message UnableToOpenRegistryKey(string key)
{
return Message(null, Ids.UnableToOpenRegistryKey, "Unable to open registry key '{0}'.", key);
}
public static Message UnsupportedPerformanceCounterType(string key)
{
return Message(null, Ids.UnsupportedPerformanceCounterType, "Unsupported performance counter type '{0}'.", key);
}
private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args)
{
return new Message(sourceLineNumber, MessageLevel.Error, (int)id, format, args);
}
private static Message Message(SourceLineNumber sourceLineNumber, Ids id, ResourceManager resourceManager, string resourceName, params object[] args)
{
return new Message(sourceLineNumber, MessageLevel.Error, (int)id, resourceManager, resourceName, args);
}
public enum Ids
{
IllegalAttributeWithoutComponent = 5050,
IllegalElementWithoutComponent = 5051,
DirectoryNotFound = 5052,
EmptyDirectory = 5053,
IllegalFileValueInPerfmonOrManifest = 5054,
ErrorTransformingHarvestedWiX = 5055,
UnableToOpenRegistryKey = 5056,
SpacesNotAllowedInArgumentValue = 5057,
ArgumentRequiresValue = 5058,
FileNotFound = 5059,
PerformanceCategoryNotFound = 5060,
UnsupportedPerformanceCounterType = 5061,
CircularSearchReference = 5062,
InvalidRegistryObject = 5063,
}
}
}

Просмотреть файл

@ -0,0 +1,21 @@
// 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.Util
{
using WixToolset.Data;
using WixToolset.Extensibility;
public sealed class UtilExtensionData : BaseExtensionData
{
public override bool TryGetTupleDefinitionByName(string name, out IntermediateTupleDefinition tupleDefinition)
{
tupleDefinition = UtilTupleDefinitions.ByName(name);
return tupleDefinition != null;
}
public override Intermediate GetLibrary(ITupleDefinitionCreator tupleDefinitions)
{
return Intermediate.Load(typeof(UtilExtensionData).Assembly, "WixToolset.Util.util.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.Util
{
using System;
using System.Collections.Generic;
using WixToolset.Extensibility;
public class UtilExtensionFactory : BaseExtensionFactory
{
protected override IEnumerable<Type> ExtensionTypes => new[]
{
typeof(UtilCompiler),
typeof(UtilExtensionData),
typeof(UtilWindowsInstallerBackendExtension),
};
}
}

Просмотреть файл

@ -0,0 +1,72 @@
// 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.Util
{
using System;
using System.Resources;
using WixToolset.Data;
public static class UtilWarnings
{
public static Message AssemblyHarvestFailed(string file, string message)
{
return Message(null, Ids.AssemblyHarvestFailed, "Could not harvest data from a file that was expected to be an assembly: {0}. If this file is not an assembly you can ignore this warning. Otherwise, this error detail may be helpful to diagnose the failure: {1}", file, message);
}
public static Message DeprecatedPerfCounterElement(SourceLineNumber sourceLineNumbers)
{
return Message(sourceLineNumbers, Ids.DeprecatedPerfCounterElement, "The PerfCounter element has been deprecated. Please use the PerformanceCounter element instead.");
}
public static Message DuplicateDllRegistryEntry(string registryKey, string componentId)
{
return Message(null, Ids.DuplicateDllRegistryEntry, "Ignoring the registry key '{0}', it has already been added to the component '{1}'.", registryKey, componentId);
}
public static Message DuplicateDllRegistryEntry(string registryKey, string registryKeyValue, string componentId)
{
return Message(null, Ids.DuplicateDllRegistryEntry, "Ignoring the registry key '{0}', it has already been added to the component '{2}'. The registry key value '{1}' will not be harvested.", registryKey, registryKeyValue, componentId);
}
public static Message RequiredAttributeForWindowsXP(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
{
return Message(sourceLineNumbers, Ids.RequiredAttributeForWindowsXP, "The {0}/@{1} attribute must be specified to successfully install on Windows XP. You can ignore this warning if this installation does not install on Windows XP.", elementName, attributeName);
}
public static Message SelfRegHarvestFailed(string file, string message)
{
return Message(null, Ids.SelfRegHarvestFailed, "Could not harvest data from a file that was expected to be a SelfReg DLL: {0}. If this file does not support SelfReg you can ignore this warning. Otherwise, this error detail may be helpful to diagnose the failure: {1}", file, message);
}
public static Message TypeLibLoadFailed(string file, string message)
{
return Message(null, Ids.TypeLibLoadFailed, "Could not load file that was expected to be a type library based off of file extension: {0}. If this file is not a type library you can ignore this warning. Otherwise, this error detail may be helpful to diagnose the load failure: {1}", file, message);
}
public static Message UnsupportedRegistryType(string registryValue, int regFileLineNumber, string unsupportedType)
{
return Message(null, Ids.UnsupportedRegistryType, "Ignoring the registry value '{0}' found on line {1}, because it is of a type unsupported by Windows Installer ({2}).", registryValue, regFileLineNumber, unsupportedType);
}
private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args)
{
return new Message(sourceLineNumber, MessageLevel.Warning, (int)id, format, args);
}
private static Message Message(SourceLineNumber sourceLineNumber, Ids id, ResourceManager resourceManager, string resourceName, params object[] args)
{
return new Message(sourceLineNumber, MessageLevel.Warning, (int)id, resourceManager, resourceName, args);
}
public enum Ids
{
SelfRegHarvestFailed = 5150,
AssemblyHarvestFailed = 5151,
TypeLibLoadFailed = 5152,
DeprecatedPerfCounterElement = 5153,
RequiredAttributeForWindowsXP = 5154,
DuplicateDllRegistryEntry = 5156,
UnsupportedRegistryType = 5157,
}
}
}

Просмотреть файл

@ -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.
namespace WixToolset.Util
{
using System.Linq;
using System.Xml;
using WixToolset.Data.WindowsInstaller;
using WixToolset.Extensibility;
public class UtilWindowsInstallerBackendExtension : BaseWindowsInstallerBackendExtension
{
private static readonly TableDefinition[] Tables = LoadTables();
protected override TableDefinition[] TableDefinitionsForTuples => Tables;
private static TableDefinition[] LoadTables()
{
using (var resourceStream = typeof(UtilWindowsInstallerBackendExtension).Assembly.GetManifestResourceStream("WixToolset.Util.tables.xml"))
using (var reader = XmlReader.Create(resourceStream))
{
var tables = TableDefinitionCollection.Load(reader);
return tables.ToArray();
}
}
}
}

Просмотреть файл

@ -0,0 +1,34 @@
<?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.Util</RootNamespace>
<Description>WiX Toolset Utility Extension</Description>
<Title>WiX Toolset Util Extension</Title>
<IsTool>true</IsTool>
<ContentTargetFolders>build</ContentTargetFolders>
</PropertyGroup>
<ItemGroup>
<Content Include="$(MSBuildThisFileName).targets" />
<Content Include="util.xsd" PackagePath="tools" />
<EmbeddedResource Include="tables.xml" />
<EmbeddedResource Include="$(OutputPath)..\util.wixlib" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="$(WixToolsetRootFolder)\Data\src\WixToolset.Data\WixToolset.Data.csproj" Condition=" '$(Configuration)' == 'Debug' And Exists('$(WixToolsetRootFolder)\Data\src\WixToolset.Data\WixToolset.Data.csproj') " />
<ProjectReference Include="$(WixToolsetRootFolder)\Extensibility\src\WixToolset.Extensibility\WixToolset.Extensibility.csproj" Condition=" '$(Configuration)' == 'Debug' And Exists('$(WixToolsetRootFolder)\Extensibility\src\WixToolset.Extensibility\WixToolset.Extensibility.csproj') " />
<PackageReference Include="WixToolset.Extensibility" Version="4.0.*" Condition=" '$(Configuration)' == 'Release' Or !Exists('$(WixToolsetRootFolder)\Extensibility\src\WixToolset.Extensibility\WixToolset.Extensibility.csproj') " PrivateAssets="all" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\wixlib\util.wixproj" ReferenceOutputAssembly="false" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Nerdbank.GitVersioning" Version="2.1.7" PrivateAssets="all" />
</ItemGroup>
</Project>

Просмотреть файл

@ -0,0 +1,8 @@
<?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">
<ItemGroup>
<WixExtension Include="$(MSBuildThisFileDirectory)..\tools\WixToolset.Util.wixext.dll" />
</ItemGroup>
</Project>

242
src/wixext/tables.xml Normal file
Просмотреть файл

@ -0,0 +1,242 @@
<?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. -->
<tableDefinitions xmlns="http://wixtoolset.org/schemas/v4/wi/tables">
<tableDefinition name="WixCloseApplication">
<columnDefinition name="WixCloseApplication" type="string" length="72" primaryKey="yes" modularize="column"
category="identifier" description="Primary key, non-localized token in table."/>
<columnDefinition name="Target" type="localized" length="0" modularize="property"
category="formatted" description="Name of executable to ensure is closed."/>
<columnDefinition name="Description" type="string" length="0" nullable="yes" localizable="yes" modularize="property"
category="formatted" description="Description string displayed to user when executable is in use."/>
<columnDefinition name="Condition" type="string" length="0" nullable="yes" localizable="yes" modularize="condition"
category="condition" description="Optional expression which skips the closing."/>
<columnDefinition name="Attributes" type="number" length="4"
minValue="0" maxValue="2147483647" description="A 32-bit word that specifies the attribute flags to be applied."/>
<columnDefinition name="Sequence" type="number" length="4" nullable="yes"
minValue="1" maxValue="2147483647" description="Sequence to order the closings by."/>
<columnDefinition name="Property" type="string" length="72" nullable="yes" localizable="yes" modularize="property"
category="identifier" description="Optional property that is set to the number of running instances of the app."/>
<columnDefinition name="TerminateExitCode" type="number" length="4" nullable="yes"
minValue="0" maxValue="2147483647" description="Exit code to return from a terminated application."/>
<columnDefinition name="Timeout" type="number" length="4" nullable="yes"
minValue="1" maxValue="2147483647" description="Timeout in milliseconds before scheduling restart or terminating application."/>
</tableDefinition>
<tableDefinition name="WixRemoveFolderEx" createSymbols="yes">
<columnDefinition name="WixRemoveFolderEx" type="string" length="72" primaryKey="yes" modularize="column"
category="identifier" description="Identifier for the WixRemoveFolderEx row in the package."/>
<columnDefinition name="Component_" type="string" length="72" modularize="column"
keyTable="Component" keyColumn="1" category="identifier" description="Foreign key into the Component table used to determine install state"/>
<columnDefinition name="Property" type="string" length="72" modularize="property"
category="identifier" description="Name of Property that contains the root of the directory tree to remove."/>
<columnDefinition name="InstallMode" type="number" length="2"
minValue="1" maxValue="3" description="1 == Remove only when the associated component is being installed (msiInstallStateLocal or msiInstallStateSource), 2 == Remove only when the associated component is being removed (msiInstallStateAbsent), 3 = Remove in either of the above cases."/>
</tableDefinition>
<tableDefinition name="WixRestartResource">
<columnDefinition name="WixRestartResource" type="string" length="72" primaryKey="yes" modularize="column"
category="identifier" description="Primary key, non-localized identifier."/>
<columnDefinition name="Component_" type="string" length="72" nullable="yes" modularize="column"
keyTable="Component" keyColumn="1" category="identifier" description="Foreign key into the Component table used to determine install state."/>
<columnDefinition name="Resource" type="string" length="0" modularize="property"
category="formatted" description="The resource to be registered with the Restart Manager."/>
<columnDefinition name="Attributes" type="number" length="4"
minValue="0" maxValue="2147483647" description="A 32-bit word that specifies the type of resource and flags used for processing."/>
</tableDefinition>
<tableDefinition name="FileShare" createSymbols="yes">
<columnDefinition name="FileShare" type="string" length="72" primaryKey="yes" modularize="column"
category="identifier" description="Primary key, non-localized identifier"/>
<columnDefinition name="ShareName" type="string" length="255"
category="formatted" description="The actual share name used"/>
<columnDefinition name="Component_" type="string" length="72" modularize="column"
keyTable="Component" keyColumn="1" category="identifier" description="Foreign key into the Component table used to determine install state"/>
<columnDefinition name="Description" type="string" length="255" nullable="yes"
category="text" description="Description string displayed for the file share"/>
<columnDefinition name="Directory_" type="string" length="72" modularize="column"
keyTable="Directory" keyColumn="1" category="identifier" description="Foreign key referencing directory that the share is created on"/>
<columnDefinition name="User_" type="string" length="72" modularize="column" nullable="yes"
keyTable="User" keyColumn="1" category="identifier" description="Foreign key, User to give access permissions to"/>
<columnDefinition name="Permissions" type="number" length="4" nullable="yes"
description="Permissions int, as on EXPLICIT_ACCESS.grfAccessPermissions in MSDN"/>
</tableDefinition>
<tableDefinition name="FileSharePermissions">
<columnDefinition name="FileShare_" type="string" length="72" primaryKey="yes" modularize="column"
keyTable="FileShare" keyColumn="1" category="identifier" description="FileShare that these premissions are to be applied to."/>
<columnDefinition name="User_" type="string" length="72" primaryKey="yes" modularize="column"
category="identifier" description="User that these premissions are to apply to."/>
<columnDefinition name="Permissions" type="number" length="4"
description="Permissions int, as on EXPLICIT_ACCESS.grfAccessPermissions in MSDN"/>
</tableDefinition>
<tableDefinition name="Group" createSymbols="yes">
<columnDefinition name="Group" type="string" length="72" primaryKey="yes" modularize="column"
category="identifier" description="Primary key, non-localized token"/>
<columnDefinition name="Component_" type="string" length="72" nullable="yes" modularize="column"
keyTable="Component" keyColumn="1" category="text" description="Foreign key, Component used to determine install state"/>
<columnDefinition name="Name" type="string" length="255" modularize="property"
category="formatted" description="Group name"/>
<columnDefinition name="Domain" type="string" length="255" nullable="yes" modularize="property"
category="formatted" description="Group domain"/>
</tableDefinition>
<tableDefinition name="WixInternetShortcut" createSymbols="yes">
<columnDefinition name="WixInternetShortcut" type="string" length="72" primaryKey="yes" modularize="column"
category="identifier" description="Primary key, non-localized token in table."/>
<columnDefinition name="Component_" type="string" length="72" modularize="column"
keyTable="Component" keyColumn="1" category="text" description="Foreign key, Component used to determine install state"/>
<columnDefinition name="Directory_" type="string" length="72" modularize="column"
keyTable="Directory" keyColumn="1" category="identifier" description="Foreign key referencing directory that the shortcut is created in"/>
<columnDefinition name="Name" type="string" length="72" modularize="property"
category="text" description="Name used for shortcut."/>
<columnDefinition name="Target" type="localized" length="0" escapeIdtCharacters="yes"
category="text" description="URL target."/>
<columnDefinition name="Attributes" type="number" length="2"
description="Attribute flags that control how the shortcut is created."/>
<columnDefinition name="IconFile" type="localized" length="0" escapeIdtCharacters="yes"
category="text" nullable="yes" description="Icon file for shortcut"/>
<columnDefinition name="IconIndex" type="number" length="4"
nullable="yes" description="Index of the icon being referenced."/>
</tableDefinition>
<tableDefinition name="PerformanceCategory">
<columnDefinition name="PerformanceCategory" type="string" length="72" primaryKey="yes" modularize="column"
category="identifier" description="Primary key, non-localized token in table."/>
<columnDefinition name="Component_" type="string" length="72" modularize="column"
keyTable="Component" keyColumn="1" category="identifier" description="Component used to determine install state"/>
<columnDefinition name="Name" type="string" length="80"
category="text" description="Name of the performance counter category."/>
<columnDefinition name="IniData" type="localized" length="0" escapeIdtCharacters="yes"
category="text" description="Data that goes into the performance counter .ini file."/>
<columnDefinition name="ConstantData" type="localized" length="0" escapeIdtCharacters="yes"
category="text" description="Data that goes into the performance counter .h file."/>
</tableDefinition>
<tableDefinition name="Perfmon">
<columnDefinition name="Component_" type="string" length="72" primaryKey="yes" modularize="column"
keyTable="Component" keyColumn="1" category="identifier" description="Component used to determine install state"/>
<columnDefinition name="File" type="string" length="72" primaryKey="yes" modularize="property"
category="formatted" description="Name of .INI file"/>
<columnDefinition name="Name" type="string" length="72" primaryKey="yes"
category="text" description="Service name in registry"/>
</tableDefinition>
<tableDefinition name="PerfmonManifest">
<columnDefinition name="Component_" type="string" length="72" primaryKey="yes" modularize="column"
keyTable="Component" keyColumn="1" category="identifier" description="Component used to determine install state"/>
<columnDefinition name="File" type="string" length="72" primaryKey="yes" modularize="property"
category="formatted" description="Name of perfmon manifest file"/>
<columnDefinition name="ResourceFileDirectory" type="string" length="255" primaryKey="yes"
category="formatted" description="The path of the Resource File Directory"/>
</tableDefinition>
<tableDefinition name="EventManifest">
<columnDefinition name="Component_" type="string" length="72" primaryKey="yes" modularize="column"
keyTable="Component" keyColumn="1" category="identifier" description="Component used to determine install state"/>
<columnDefinition name="File" type="string" length="72" primaryKey="yes" modularize="property"
category="formatted" description="Name of event manifest file"/>
</tableDefinition>
<tableDefinition name="SecureObjects">
<columnDefinition name="SecureObject" type="string" length="72" primaryKey="yes" modularize="column"
category="identifier" description="Primary key, non-localized token in Table"/>
<columnDefinition name="Table" type="string" length="32" primaryKey="yes"
category="text" description="Table SecureObject should be securing"/>
<columnDefinition name="Domain" type="string" length="255" primaryKey="yes" nullable="yes" modularize="property"
category="text" description="Domain half of user account to secure"/>
<columnDefinition name="User" type="string" length="255" primaryKey="yes" modularize="property"
category="text" description="Username half of user account to secure"/>
<columnDefinition name="Permission" type="number" length="4" nullable="yes"
minValue="-2147483647" maxValue="2147483647" description="Permissions to grant to User"/>
<columnDefinition name="Component_" type="string" length="72" modularize="column"
keyTable="Component" keyColumn="1" category="identifier" description="Foreign key into the Component table used to determine install state"/>
</tableDefinition>
<tableDefinition name="ServiceConfig">
<columnDefinition name="ServiceName" type="string" length="72" primaryKey="yes"
category="formatted" description="Primary key, non-localized token"/>
<columnDefinition name="Component_" type="string" length="72" modularize="column"
keyTable="Component" keyColumn="1" category="identifier" description="Foreign key, Component used to determine install state "/>
<columnDefinition name="NewService" type="number" length="1"
minValue="0" maxValue="1" description="Whether the affected service is being installed or already exists."/>
<columnDefinition name="FirstFailureActionType" type="string" length="32"
category="text" description="First failure action type for configured service to take."/>
<columnDefinition name="SecondFailureActionType" type="string" length="32"
category="text" description="Second failure action type for configured service to take."/>
<columnDefinition name="ThirdFailureActionType" type="string" length="32"
category="text" description="Third failure action type for configured service to take."/>
<columnDefinition name="ResetPeriodInDays" type="number" length="4" nullable="yes"
category="integer" minValue="0" description="Period after which to reset the failure count for the service."/>
<columnDefinition name="RestartServiceDelayInSeconds" type="number" length="4" nullable="yes"
category="integer" minValue="0" description="Period after which to restart the service after a given failure."/>
<columnDefinition name="ProgramCommandLine" type="string" length="255" nullable="yes"
category="formatted" description="Command line for program to run if failure action is RUN_COMMAND."/>
<columnDefinition name="RebootMessage" type="string" length="255" nullable="yes"
category="text" description="Message to show to users when rebooting if failure action is REBOOT."/>
</tableDefinition>
<tableDefinition name="WixTouchFile" createSymbols="yes">
<columnDefinition name="WixTouchFile" type="string" length="72" primaryKey="yes" modularize="column"
category="identifier" description="Identifier for the WixTouchFile row in the package."/>
<columnDefinition name="Component_" type="string" length="72" modularize="column"
keyTable="Component" keyColumn="1" category="identifier" description="Foreign key into the Component table used to determine install state"/>
<columnDefinition name="Path" type="string" length="255" modularize="property"
category="formatted" description="Formatted column that resolves to the path to touch."/>
<columnDefinition name="Attributes" type="number" length="2"
minValue="1" maxValue="63" description="1 == Touch only when the associated component is being installed, 2 == Touch only when the associated component is being repaired , 4 == Touch only when the associated component is being removed, 16 = path is in 64-bit location, 32 = touching the file is vital."/>
</tableDefinition>
<tableDefinition name="User" createSymbols="yes">
<columnDefinition name="User" type="string" length="72" primaryKey="yes" modularize="column"
category="identifier" description="Primary key, non-localized token"/>
<columnDefinition name="Component_" type="string" length="72" nullable="yes" modularize="column"
keyTable="Component" keyColumn="1" category="text" description="Foreign key, Component used to determine install state"/>
<columnDefinition name="Name" type="string" length="255" modularize="property"
category="formatted" description="User name"/>
<columnDefinition name="Domain" type="string" length="255" nullable="yes" modularize="property"
category="formatted" description="User domain"/>
<columnDefinition name="Password" type="string" length="255" nullable="yes" modularize="property"
category="formatted" description="User password"/>
<columnDefinition name="Attributes" type="number" length="4" nullable="yes"
minValue="0" maxValue="65535" description="Attributes describing how to create the user"/>
</tableDefinition>
<tableDefinition name="UserGroup">
<columnDefinition name="User_" type="string" length="72" primaryKey="yes" modularize="column"
keyTable="User" keyColumn="1" category="identifier" description="User to be joined to a Group."/>
<columnDefinition name="Group_" type="string" length="72" primaryKey="yes" modularize="column"
keyTable="Group" keyColumn="1" category="identifier" description="User to be joined to a Group."/>
</tableDefinition>
<tableDefinition name="XmlFile">
<columnDefinition name="XmlFile" type="string" length="72" primaryKey="yes" modularize="column"
category="identifier" description="Primary key, non-localized token."/>
<columnDefinition name="File" type="localized" length="255" modularize="property"
category="formatted" description="The .XML file in which to write the information"/>
<columnDefinition name="ElementPath" type="localized" length="0" modularize="property"
category="formatted" description="The .XML file element to modify."/>
<columnDefinition name="Name" type="localized" length="255" modularize="property" nullable="yes"
category="formatted" description="The .XML file node to set/add in the element."/>
<columnDefinition name="Value" type="localized" length="0" modularize="property" nullable="yes"
category="formatted" description="The value to be written."/>
<columnDefinition name="Flags" type="number" length="4"
minValue="0" maxValue="70143" description="Flags"/>
<columnDefinition name="Component_" type="string" length="72" modularize="column"
keyTable="Component" keyColumn="1" category="identifier" description="Foreign key into the Component table referencing component that controls the installing of the .XML value."/>
<columnDefinition name="Sequence" type="number" length="2" nullable="yes"
description="Order to execute the XML modifications."/>
</tableDefinition>
<tableDefinition name="XmlConfig" createSymbols="yes">
<columnDefinition name="XmlConfig" type="string" length="72" primaryKey="yes" modularize="column"
category="identifier" description="Primary key, non-localized token."/>
<columnDefinition name="File" type="localized" length="255" modularize="property"
category="formatted" description="The .XML file in which to write the information"/>
<columnDefinition name="ElementPath" type="localized" length="0" modularize="property"
category="formatted" description="The XPATH query for an element to modify or add children to. Can also be a foreign key reference to another XmlConfig row if no attributes are set and the row referenced is a create element row."/>
<columnDefinition name="VerifyPath" type="localized" length="0" modularize="property" nullable="yes"
category="formatted" description="The XPATH query run from ElementPath to verify whether a repair is necessary. Also used to uninstall."/>
<columnDefinition name="Name" type="localized" length="255" modularize="property" nullable="yes"
category="formatted" description="The .XML file node to set/add in the element."/>
<columnDefinition name="Value" type="localized" length="0" modularize="property" nullable="yes" escapeIdtCharacters="yes"
category="formatted" description="The value to be written."/>
<columnDefinition name="Flags" type="number" length="4"
minValue="0" maxValue="65536" description="Element=1,Value=2,Document=4,Create=16,Delete=32,Install=256,Uninstall=512"/>
<columnDefinition name="Component_" type="string" length="72" modularize="column"
keyTable="Component" keyColumn="1" category="identifier" description="Foreign key into the Component table referencing component that controls the installing of the .XML value."/>
<columnDefinition name="Sequence" type="number" length="2" nullable="yes"
description="Order to execute the XML modifications."/>
</tableDefinition>
<tableDefinition name="WixFormatFiles">
<columnDefinition name="Binary_" type="string" length="72" primaryKey="yes" modularize="column"
keyTable="Binary" keyColumn="1" category="identifier" description="Binary data to be formatted."/>
<columnDefinition name="File_" type="string" length="72" primaryKey="yes" modularize="column"
keyTable="File" keyColumn="1" category="identifier" description="File whose component controls the custom action and where the formatted data is written."/>
</tableDefinition>
</tableDefinitions>

11461
src/wixext/util.cs Normal file

Разница между файлами не показана из-за своего большого размера Загрузить разницу

1692
src/wixext/util.xsd Normal file

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,430 @@
<?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">
<?include caerr.wxi ?>
<Fragment>
<UI Id="ConfigureUsersErrorText">
<Error Id="$(var.msierrUSRFailedUserCreate)">!(loc.msierrUSRFailedUserCreate)</Error>
<Error Id="$(var.msierrUSRFailedUserCreatePswd)">!(loc.msierrUSRFailedUserCreatePswd)</Error>
<Error Id="$(var.msierrUSRFailedUserGroupAdd)">!(loc.msierrUSRFailedUserGroupAdd)</Error>
<Error Id="$(var.msierrUSRFailedGrantLogonAsService)">Failed to grant 'logon as service' rights to user. ([2] [3] [4] [5])</Error>
<Error Id="$(var.msierrUSRFailedUserCreateExists)">!(loc.msierrUSRFailedUserCreateExists)</Error>
</UI>
</Fragment>
<Fragment>
<UI Id="ConfigureSmbErrorsText">
<Error Id="$(var.msierrSMBFailedCreate)">!(loc.msierrSMBFailedCreate)</Error>
<Error Id="$(var.msierrSMBFailedDrop)">!(loc.msierrSMBFailedDrop)</Error>
</UI>
</Fragment>
<Fragment>
<UI Id="PerCounterDataErrorsText">
<Error Id="$(var.msierrInstallPerfCounterData)">!(loc.msierrInstallPerfCounterData)</Error>
<Error Id="$(var.msierrUninstallPerfCounterData)">!(loc.msierrUninstallPerfCounterData)</Error>
</UI>
</Fragment>
<Fragment>
<UI Id="ConfigurePerfmonErrorsText">
<Error Id="$(var.msierrPERFMONFailedRegisterDLL)">!(loc.msierrPERFMONFailedRegisterDLL)</Error>
<Error Id="$(var.msierrPERFMONFailedUnregisterDLL)">!(loc.msierrPERFMONFailedUnregisterDLL)</Error>
</UI>
</Fragment>
<Fragment>
<UI Id="SecureObjectsErrors">
<Error Id="$(var.msierrSecureObjectsFailedCreateSD)">!(loc.msierrSecureObjectsFailedCreateSD)</Error>
<Error Id="$(var.msierrSecureObjectsFailedSet)">!(loc.msierrSecureObjectsFailedSet)</Error>
<Error Id="$(var.msierrSecureObjectsUnknownType)">!(loc.msierrSecureObjectsUnknownType)</Error>
</UI>
</Fragment>
<Fragment>
<UI Id="XmlFileErrorsText">
<Error Id="$(var.msierrXmlFileFailedRead)">!(loc.msierrXmlFileFailedRead)</Error>
<Error Id="$(var.msierrXmlFileFailedOpen)">!(loc.msierrXmlFileFailedOpen)</Error>
<Error Id="$(var.msierrXmlFileFailedSelect)">!(loc.msierrXmlFileFailedSelect)</Error>
<Error Id="$(var.msierrXmlFileFailedSave)">!(loc.msierrXmlFileFailedSave)</Error>
</UI>
</Fragment>
<Fragment>
<UI Id="XmlConfigErrorsText">
<Error Id="$(var.msierrXmlConfigFailedRead)">!(loc.msierrXmlConfigFailedRead)</Error>
<Error Id="$(var.msierrXmlConfigFailedOpen)">!(loc.msierrXmlConfigFailedOpen)</Error>
<Error Id="$(var.msierrXmlConfigFailedSelect)">!(loc.msierrXmlConfigFailedSelect)</Error>
<Error Id="$(var.msierrXmlConfigFailedSave)">!(loc.msierrXmlConfigFailedSave)</Error>
</UI>
</Fragment>
<Fragment>
<CustomAction Id="WixFailWhenDeferred" BinaryKey="WixCA" DllEntry="WixFailWhenDeferred" Execute="deferred" Return="check" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="WixFailWhenDeferred" Before="InstallFinalize" Overridable="yes">WIXFAILWHENDEFERRED=1 AND VersionNT &gt; 400</Custom>
</InstallExecuteSequence>
</Fragment>
<Fragment>
<CustomAction Id="WixWaitForEvent" BinaryKey="WixCA" DllEntry="WixWaitForEvent" Execute="immediate" Return="check" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="WixWaitForEvent" Before="InstallFinalize" Overridable="yes" />
</InstallExecuteSequence>
</Fragment>
<Fragment>
<CustomAction Id="WixWaitForEventDeferred" BinaryKey="WixCA" DllEntry="WixWaitForEvent" Execute="deferred" Return="check" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="WixWaitForEventDeferred" After="InstallInitialize" Overridable="yes" />
</InstallExecuteSequence>
</Fragment>
<Fragment>
<CustomAction Id="WixExitEarlyWithSuccess" BinaryKey="WixCA" DllEntry="WixExitEarlyWithSuccess" Execute="immediate" Return="check" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="WixExitEarlyWithSuccess" After="FindRelatedProducts" Overridable="yes">NEWERVERSIONDETECTED AND VersionNT &gt; 400</Custom>
</InstallExecuteSequence>
</Fragment>
<Fragment>
<CustomAction Id="WixRemoveFoldersEx" BinaryKey="WixCA" DllEntry="WixRemoveFoldersEx" Execute="immediate" Return="ignore" />
<InstallExecuteSequence>
<Custom Action="WixRemoveFoldersEx" Before="CostInitialize" />
</InstallExecuteSequence>
</Fragment>
<Fragment>
<CustomAction Id="WixBroadcastSettingChange" BinaryKey="WixCA" DllEntry="WixBroadcastSettingChange" Execute="immediate" Return="ignore" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="WixBroadcastSettingChange" After="InstallFinalize" Overridable="yes" />
</InstallExecuteSequence>
</Fragment>
<Fragment>
<CustomAction Id="WixBroadcastEnvironmentChange" BinaryKey="WixCA" DllEntry="WixBroadcastEnvironmentChange" Execute="immediate" Return="ignore" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="WixBroadcastEnvironmentChange" After="InstallFinalize" Overridable="yes" />
</InstallExecuteSequence>
</Fragment>
<!-- WiX OS-detection properties and custom action -->
<Fragment>
<CustomAction Id="WixQueryOsInfo" BinaryKey="WixCA" DllEntry="WixQueryOsInfo" Execute="firstSequence" Return="check" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="WixQueryOsInfo" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom>
</InstallExecuteSequence>
<InstallUISequence>
<Custom Action="WixQueryOsInfo" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom>
</InstallUISequence>
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_BACKOFFICE" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_BLADE" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_COMMUNICATIONS" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_COMPUTE_SERVER" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_DATACENTER" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_EMBEDDED_RESTRICTED" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_EMBEDDEDNT" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_ENTERPRISE" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_MEDIACENTER" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_PERSONAL" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_SECURITY_APPLIANCE" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_SERVERR2" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_SINGLEUSERTS" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_SMALLBUSINESS" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_SMALLBUSINESS_RESTRICTED" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_STARTER" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_STORAGE_SERVER" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_TABLETPC" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_TERMINAL" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_SUITE_WH_SERVER" Secure="yes" />
<CustomActionRef Id="WixQueryOsInfo" />
</Fragment>
<Fragment>
<CustomAction Id="WixQueryOsDirs" BinaryKey="WixCA" DllEntry="WixQueryOsDirs" Execute="firstSequence" Return="check" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="WixQueryOsDirs" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom>
</InstallExecuteSequence>
<InstallUISequence>
<Custom Action="WixQueryOsDirs" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom>
</InstallUISequence>
</Fragment>
<Fragment>
<Property Id="WIX_DIR_ADMINTOOLS" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_ALTSTARTUP" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_CDBURN_AREA" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_COMMON_ADMINTOOLS" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_COMMON_ALTSTARTUP" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_COMMON_DOCUMENTS" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_COMMON_FAVORITES" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_COMMON_MUSIC" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_COMMON_PICTURES" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_COMMON_VIDEO" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_COOKIES" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_DESKTOP" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_HISTORY" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_INTERNET_CACHE" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_MYMUSIC" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_MYPICTURES" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_MYVIDEO" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_NETHOOD" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_PERSONAL" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_PRINTHOOD" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_PROFILE" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_RECENT" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<Property Id="WIX_DIR_RESOURCES" Secure="yes" />
<CustomActionRef Id="WixQueryOsDirs" />
</Fragment>
<Fragment>
<CustomAction Id="WixQueryOsWellKnownSID" BinaryKey="WixCA" DllEntry="WixQueryOsWellKnownSID" Execute="firstSequence" Return="check" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="WixQueryOsWellKnownSID" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom>
</InstallExecuteSequence>
<InstallUISequence>
<Custom Action="WixQueryOsWellKnownSID" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom>
</InstallUISequence>
</Fragment>
<Fragment>
<Property Id="WIX_ACCOUNT_LOCALSYSTEM" Secure="yes" />
<CustomActionRef Id="WixQueryOsWellKnownSID" />
</Fragment>
<Fragment>
<Property Id="WIX_ACCOUNT_LOCALSERVICE" Secure="yes" />
<CustomActionRef Id="WixQueryOsWellKnownSID" />
</Fragment>
<Fragment>
<Property Id="WIX_ACCOUNT_NETWORKSERVICE" Secure="yes" />
<CustomActionRef Id="WixQueryOsWellKnownSID" />
</Fragment>
<Fragment>
<Property Id="WIX_ACCOUNT_ADMINISTRATORS" Secure="yes" />
<CustomActionRef Id="WixQueryOsWellKnownSID" />
</Fragment>
<Fragment>
<Property Id="WIX_ACCOUNT_USERS" Secure="yes" />
<CustomActionRef Id="WixQueryOsWellKnownSID" />
</Fragment>
<Fragment>
<Property Id="WIX_ACCOUNT_GUESTS" Secure="yes" />
<CustomActionRef Id="WixQueryOsWellKnownSID" />
</Fragment>
<Fragment>
<Property Id="WIX_ACCOUNT_PERFLOGUSERS" Secure="yes" />
<Property Id="WIX_ACCOUNT_PERFLOGUSERS_NODOMAIN" Secure="yes" />
<CustomActionRef Id="WixQueryOsWellKnownSID" />
</Fragment>
<Fragment>
<CustomAction Id="WixQueryOsDriverInfo" BinaryKey="WixCA" DllEntry="WixQueryOsDriverInfo" Execute="firstSequence" Return="check" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="WixQueryOsDriverInfo" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom>
</InstallExecuteSequence>
<InstallUISequence>
<Custom Action="WixQueryOsDriverInfo" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom>
</InstallUISequence>
</Fragment>
<Fragment>
<Property Id="WIX_WDDM_DRIVER_PRESENT" Secure="yes" />
<CustomActionRef Id="WixQueryOsDriverInfo" />
</Fragment>
<Fragment>
<Property Id="WIX_DWM_COMPOSITION_ENABLED" Secure="yes" />
<CustomActionRef Id="WixQueryOsDriverInfo" />
</Fragment>
<!-- ShellExec custom actions (for when only one is needed; multiple executions need their own IDs) -->
<Fragment>
<PropertyRef Id="WixShellExecBinaryId" />
<CustomAction Id="WixShellExecBinary" BinaryKey="WixCA" DllEntry="WixShellExecBinary" Execute="immediate" Return="check" Impersonate="yes" />
</Fragment>
<Fragment>
<PropertyRef Id="WixShellExecTarget" />
<CustomAction Id="WixShellExec" BinaryKey="WixCA" DllEntry="WixShellExec" Execute="immediate" Return="check" Impersonate="yes" />
</Fragment>
<Fragment>
<PropertyRef Id="WixUnelevatedShellExecTarget" />
<CustomAction Id="WixUnelevatedShellExec" BinaryKey="WixCA" DllEntry="WixUnelevatedShellExec" Execute="immediate" Return="check" Impersonate="yes" />
</Fragment>
<Fragment>
<PropertyRef Id="QtExecCmdLine" />
<CustomAction Id="QtExec" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="immediate" Return="check" Impersonate="yes" />
</Fragment>
<Fragment>
<PropertyRef Id="QtExec64CmdLine" />
<CustomAction Id="QtExec64" BinaryKey="WixCA" DllEntry="CAQuietExec64" Execute="immediate" Return="check" Impersonate="yes" />
</Fragment>
<Fragment>
<PropertyRef Id="WixQuietExecCmdLine" />
<CustomAction Id="WixQuietExec" BinaryKey="WixCA" DllEntry="WixQuietExec" Execute="immediate" Return="check" Impersonate="yes" />
</Fragment>
<Fragment>
<PropertyRef Id="WixQuietExec64CmdLine" />
<CustomAction Id="WixQuietExec64" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="immediate" Return="check" Impersonate="yes" />
</Fragment>
<!-- SilentExec custom actions differ from QtExec in that they do not log the commandline or output of the exe -->
<Fragment>
<PropertyRef Id="WixSilentExecCmdLine" />
<CustomAction Id="WixSilentExec" BinaryKey="WixCA" DllEntry="WixSilentExec" Execute="immediate" Return="check" Impersonate="yes" />
</Fragment>
<Fragment>
<PropertyRef Id="WixSilentExec64CmdLine" />
<CustomAction Id="WixSilentExec64" BinaryKey="WixCA" DllEntry="WixSilentExec64" Execute="immediate" Return="check" Impersonate="yes" />
</Fragment>
</Wix>

Просмотреть файл

@ -0,0 +1,224 @@
<?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">
<?include caSuffix.wxi ?>
<!--
The following actions do not support X64.
-->
<?if $(var.platform)!=x64 ?>
<Fragment>
<CustomAction Id="WixCheckRebootRequired$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixCheckRebootRequired" Execute="immediate" Return="ignore" SuppressModularization="yes" />
<InstallExecuteSequence>
<!-- Condition this so it runs on install and MMode, but not uninstall -->
<Custom Action="WixCheckRebootRequired$(var.Suffix)" After="InstallFinalize" Overridable="yes">NOT REMOVE~="ALL" AND VersionNT &gt; 400</Custom>
</InstallExecuteSequence>
</Fragment>
<Fragment>
<CustomAction Id="WixCloseApplications$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixCloseApplications" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="WixCloseApplicationsDeferred$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixCloseApplicationsDeferred" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" />
<CustomActionRef Id="WixCheckRebootRequired$(var.Suffix)" />
<InstallExecuteSequence>
<Custom Action="WixCloseApplications$(var.Suffix)" Before="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom>
</InstallExecuteSequence>
</Fragment>
<Fragment>
<CustomAction Id="WixRegisterRestartResources$(var.Suffix)" BinaryKey="WixCA" DllEntry="WixRegisterRestartResources$(var.Suffix)" Execute="immediate" Return="check" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="WixRegisterRestartResources$(var.Suffix)" Before="InstallValidate" Overridable="yes" />
</InstallExecuteSequence>
</Fragment>
<Fragment>
<UIRef Id="ConfigureUsersErrorText" />
<CustomAction Id="ConfigureUsers$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ConfigureUsers" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="CreateUser$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CreateUser" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
<CustomAction Id="CreateUserRollback$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="RemoveUser" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" />
<!-- RemoveUser is a type commit action because it is not possible to rollback the removal of a user -->
<CustomAction Id="RemoveUser$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="RemoveUser" Impersonate="no" Execute="commit" Return="ignore" HideTarget="yes" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="ConfigureUsers$(var.Suffix)" Before="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom>
</InstallExecuteSequence>
</Fragment>
<Fragment>
<UIRef Id="ConfigureSmbErrorsText" />
<CustomAction Id="ConfigureSmbInstall$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ConfigureSmbInstall" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="ConfigureSmbUninstall$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ConfigureSmbUninstall" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="CreateSmb$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CreateSmb" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
<CustomAction Id="CreateSmbRollback$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="DropSmb" Impersonate="no" Execute="rollback" Return="ignore" HideTarget="yes" SuppressModularization="yes" />
<CustomAction Id="DropSmb$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="DropSmb" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
<CustomAction Id="DropSmbRollback$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CreateSmb" Impersonate="no" Execute="rollback" Return="ignore" HideTarget="yes" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="ConfigureSmbInstall$(var.Suffix)" After="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom>
<Custom Action="ConfigureSmbUninstall$(var.Suffix)" After="RemoveFiles" Overridable="yes">VersionNT &gt; 400</Custom>
</InstallExecuteSequence>
</Fragment>
<Fragment>
<UIRef Id="PerCounterDataErrorsText" />
<CustomAction Id="InstallPerfCounterData$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="InstallPerfCounterData" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="UninstallPerfCounterData$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="UninstallPerfCounterData" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="RegisterPerfCounterData$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="RegisterPerfCounterData" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
<CustomAction Id="UnregisterPerfCounterData$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="UnregisterPerfCounterData" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
<CustomAction Id="RollbackRegisterPerfCounterData$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="UnregisterPerfCounterData" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" />
<CustomAction Id="RollbackUnregisterPerfCounterData$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="RegisterPerfCounterData" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="InstallPerfCounterData$(var.Suffix)" After="WriteRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom>
<Custom Action="UninstallPerfCounterData$(var.Suffix)" Before="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom>
</InstallExecuteSequence>
</Fragment>
<Fragment>
<UIRef Id="ConfigurePerfmonErrorsText" />
<CustomAction Id="ConfigurePerfmonInstall$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonInstall" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="ConfigurePerfmonUninstall$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonUninstall" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="RegisterPerfmon$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="RegisterPerfmon" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" />
<CustomAction Id="UnregisterPerfmon$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="UnregisterPerfmon" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" />
<CustomAction Id="RollbackRegisterPerfmon$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="UnregisterPerfmon" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" />
<CustomAction Id="RollbackUnregisterPerfmon$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="RegisterPerfmon" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="ConfigurePerfmonInstall$(var.Suffix)" After="WriteRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom>
<Custom Action="ConfigurePerfmonUninstall$(var.Suffix)" Before="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom>
</InstallExecuteSequence>
</Fragment>
<Fragment>
<CustomAction Id="ConfigurePerfmonManifestRegister$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonManifestRegister" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="ConfigurePerfmonManifestUnregister$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonManifestUnregister" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="RegisterPerfmonManifest$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" />
<CustomAction Id="UnregisterPerfmonManifest$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="ignore" SuppressModularization="yes" />
<CustomAction Id="RollbackRegisterPerfmonManifest$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="ignore" SuppressModularization="yes" />
<CustomAction Id="RollbackUnregisterPerfmonManifest$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="ConfigurePerfmonManifestRegister$(var.Suffix)" After="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom>
<Custom Action="ConfigurePerfmonManifestUnregister$(var.Suffix)" After="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom>
</InstallExecuteSequence>
</Fragment>
<Fragment>
<CustomAction Id="ConfigureEventManifestRegister$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ConfigureEventManifestRegister" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="ConfigureEventManifestUnregister$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ConfigureEventManifestUnregister" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="RegisterEventManifest$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" />
<CustomAction Id="UnregisterEventManifest$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="ignore" SuppressModularization="yes" />
<CustomAction Id="RollbackRegisterEventManifest$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="ignore" SuppressModularization="yes" />
<CustomAction Id="RollbackUnregisterEventManifest$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="ConfigureEventManifestRegister$(var.Suffix)" After="SchedXmlFile" Overridable="yes">VersionNT &gt; 400</Custom>
<Custom Action="ConfigureEventManifestUnregister$(var.Suffix)" After="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom>
</InstallExecuteSequence>
</Fragment>
<Fragment>
<CustomAction Id="SchedServiceConfig$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="SchedServiceConfig" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="ExecServiceConfig$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ExecServiceConfig" Execute="deferred" Impersonate="no" Return="check" SuppressModularization="yes" />
<CustomAction Id="RollbackServiceConfig$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="RollbackServiceConfig" Execute="rollback" Impersonate="no" Return="check" SuppressModularization="yes" />
<InstallExecuteSequence>
<!-- Condition this so it runs on install and MMode, but not uninstall -->
<Custom Action="SchedServiceConfig$(var.Suffix)" After="InstallServices" Overridable="yes">NOT REMOVE~="ALL" AND VersionNT &gt; 400</Custom>
</InstallExecuteSequence>
</Fragment>
<Fragment>
<CustomAction Id="WixTouchFileDuringInstall" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixTouchFileDuringInstall" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="WixTouchFileDuringUninstall" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixTouchFileDuringUninstall" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="WixExecuteTouchFile" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixExecuteTouchFile" Execute="deferred" Impersonate="no" Return="check" SuppressModularization="yes" />
<CustomAction Id="WixRollbackTouchFile" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixExecuteTouchFile" Execute="rollback" Impersonate="no" Return="check" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="WixTouchFileDuringUninstall" Before="RemoveFiles" Overridable="yes" />
<Custom Action="WixTouchFileDuringInstall" After="InstallFiles" Overridable="yes" />
</InstallExecuteSequence>
</Fragment>
<Fragment>
<UIRef Id="XmlFileErrorsText" />
<CustomAction Id="SchedXmlFile$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="SchedXmlFile" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="ExecXmlFile$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ExecXmlFile" Execute="deferred" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" />
<CustomAction Id="ExecXmlFileRollback$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ExecXmlFileRollback" Execute="rollback" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="SchedXmlFile$(var.Suffix)" After="DuplicateFiles" Overridable="yes">VersionNT &gt; 400</Custom>
</InstallExecuteSequence>
</Fragment>
<Fragment>
<UIRef Id="XmlConfigErrorsText" />
<CustomAction Id="SchedXmlConfig$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="SchedXmlConfig" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="ExecXmlConfig$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ExecXmlConfig" Execute="deferred" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" />
<CustomAction Id="ExecXmlConfigRollback$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ExecXmlConfigRollback" Execute="rollback" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="SchedXmlConfig$(var.Suffix)" After="DuplicateFiles" Overridable="yes">VersionNT &gt; 400</Custom>
</InstallExecuteSequence>
</Fragment>
<Fragment>
<CustomAction Id="WixSchedInternetShortcuts$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixSchedInternetShortcuts" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="WixRollbackInternetShortcuts$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixRollbackInternetShortcuts" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" />
<CustomAction Id="WixCreateInternetShortcuts$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixCreateInternetShortcuts" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="WixSchedInternetShortcuts$(var.Suffix)" Before="RemoveFolders" Overridable="yes">VersionNT &gt; 400</Custom>
<Custom Action="WixRollbackInternetShortcuts$(var.DeferredSuffix)" Before="WixCreateInternetShortcuts$(var.DeferredSuffix)" Overridable="yes">VersionNT &gt; 400</Custom>
<Custom Action="WixCreateInternetShortcuts$(var.DeferredSuffix)" After="CreateShortcuts" Overridable="yes">VersionNT &gt; 400</Custom>
</InstallExecuteSequence>
</Fragment>
<?endif ?>
<!--
The following actions do support all platforms.
-->
<Fragment>
<UIRef Id="SecureObjectsErrors" />
<CustomAction Id="SchedSecureObjects$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="SchedSecureObjects" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="SchedSecureObjectsRollback$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="SchedSecureObjectsRollback" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="ExecSecureObjects$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ExecSecureObjects" Execute="deferred" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" />
<CustomAction Id="ExecSecureObjectsRollback$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ExecSecureObjectsRollback" Execute="rollback" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" />
<InstallExecuteSequence>
<!-- Condition this so it runs on install and MMode, but not uninstall -->
<Custom Action="SchedSecureObjects$(var.Suffix)" After="InstallServices" Overridable="yes">NOT REMOVE~="ALL" AND VersionNT &gt; 400</Custom>
<Custom Action="SchedSecureObjectsRollback$(var.Suffix)" After="UnpublishFeatures" Overridable="yes">VersionNT &gt; 400</Custom>
</InstallExecuteSequence>
</Fragment>
<Fragment>
<CustomAction Id="WixSchedFormatFiles$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixSchedFormatFiles" Execute="immediate" Return="check" SuppressModularization="yes" />
<CustomAction Id="WixExecFormatFiles$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixExecFormatFiles" Execute="deferred" Impersonate="no" Return="check" SuppressModularization="yes" />
<CustomAction Id="WixRollbackFormatFiles$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixExecFormatFiles" Execute="rollback" Impersonate="no" Return="check" SuppressModularization="yes" />
<InstallExecuteSequence>
<Custom Action="WixSchedFormatFiles$(var.Suffix)" After="InstallFiles" />
</InstallExecuteSequence>
</Fragment>
<Fragment>
<Binary Id="UtilCA$(var.Suffix)" SourceFile="!(bindpath.$(var.platform))utilca.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=x64 ?>
<?include UtilExtension_Platform.wxi ?>
</Wix>

Просмотреть файл

@ -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 UtilExtension_Platform.wxi ?>
</Wix>

28
src/wixlib/caSuffix.wxi Normal file
Просмотреть файл

@ -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>

96
src/wixlib/caerr.wxi Normal file
Просмотреть файл

@ -0,0 +1,96 @@
<Include>
<?define msierrSecureObjectsFailedCreateSD = 25520?>
<?define msierrSecureObjectsFailedSet = 25521?>
<?define msierrSecureObjectsUnknownType = 25522?>
<?define msierrXmlFileFailedRead = 25530?>
<?define msierrXmlFileFailedOpen = 25531?>
<?define msierrXmlFileFailedSelect = 25532?>
<?define msierrXmlFileFailedSave = 25533?>
<?define msierrXmlConfigFailedRead = 25540?>
<?define msierrXmlConfigFailedOpen = 25541?>
<?define msierrXmlConfigFailedSelect = 25542?>
<?define msierrXmlConfigFailedSave = 25543?>
<?define msierrFirewallCannotConnect = 25580?>
<?define msierrIISCannotConnect = 26001?>
<?define msierrIISFailedReadWebSite = 26002?>
<?define msierrIISFailedReadWebDirs = 26003?>
<?define msierrIISFailedReadVDirs = 26004?>
<?define msierrIISFailedReadFilters = 26005?>
<?define msierrIISFailedReadAppPool = 26006?>
<?define msierrIISFailedReadMimeMap = 26007?>
<?define msierrIISFailedReadProp = 26008?>
<?define msierrIISFailedReadWebSvcExt = 26009?>
<?define msierrIISFailedReadWebError = 26010?>
<?define msierrIISFailedReadHttpHeader = 26011?>
<?define msierrIISFailedSchedTransaction = 26031?>
<?define msierrIISFailedSchedInstallWebs = 26032?>
<?define msierrIISFailedSchedInstallWebDirs = 26033?>
<?define msierrIISFailedSchedInstallVDirs = 26034?>
<?define msierrIISFailedSchedInstallFilters = 26035?>
<?define msierrIISFailedSchedInstallAppPool = 26036?>
<?define msierrIISFailedSchedInstallProp = 26037?>
<?define msierrIISFailedSchedInstallWebSvcExt = 26038?>
<?define msierrIISFailedSchedUninstallWebs = 26051?>
<?define msierrIISFailedSchedUninstallWebDirs = 26052?>
<?define msierrIISFailedSchedUninstallVDirs = 26053?>
<?define msierrIISFailedSchedUninstallFilters = 26054?>
<?define msierrIISFailedSchedUninstallAppPool = 26055?>
<?define msierrIISFailedSchedUninstallProp = 26056?>
<?define msierrIISFailedSchedUninstallWebSvcExt = 26057?>
<?define msierrIISFailedStartTransaction = 26101?>
<?define msierrIISFailedOpenKey = 26102?>
<?define msierrIISFailedCreateKey = 26103?>
<?define msierrIISFailedWriteData = 26104?>
<?define msierrIISFailedCreateApp = 26105?>
<?define msierrIISFailedDeleteKey = 26106?>
<?define msierrIISFailedDeleteApp = 26107?>
<?define msierrIISFailedDeleteValue = 26108?>
<?define msierrIISFailedCommitInUse = 26109?>
<?define msierrSQLFailedCreateDatabase = 26201?>
<?define msierrSQLFailedDropDatabase = 26202?>
<?define msierrSQLFailedConnectDatabase = 26203?>
<?define msierrSQLFailedExecString = 26204?>
<?define msierrSQLDatabaseAlreadyExists = 26205?>
<?define msierrPERFMONFailedRegisterDLL = 26251?>
<?define msierrPERFMONFailedUnregisterDLL = 26252?>
<?define msierrInstallPerfCounterData = 26253?>
<?define msierrUninstallPerfCounterData = 26254?>
<?define msierrSMBFailedCreate = 26301?>
<?define msierrSMBFailedDrop = 26302?>
<?define msierrCERTFailedOpen = 26351?>
<?define msierrCERTFailedAdd = 26352?>
<?define msierrUSRFailedUserCreate = 26401?>
<?define msierrUSRFailedUserCreatePswd = 26402?>
<?define msierrUSRFailedUserGroupAdd = 26403?>
<?define msierrUSRFailedUserCreateExists = 26404?>
<?define msierrUSRFailedGrantLogonAsService = 26405?>
<?define msierrDependencyMissingDependencies = 26451?>
<?define msierrDependencyHasDependents = 26452?>
<?define msierrDotNetRuntimeRequired = 27000?>
<?define msierrComPlusCannotConnect = 28001?>
<?define msierrComPlusPartitionReadFailed = 28002?>
<?define msierrComPlusPartitionRoleReadFailed = 28003?>
<?define msierrComPlusUserInPartitionRoleReadFailed = 28004?>
<?define msierrComPlusPartitionUserReadFailed = 28005?>
<?define msierrComPlusApplicationReadFailed = 28006?>
<?define msierrComPlusApplicationRoleReadFailed = 28007?>
<?define msierrComPlusUserInApplicationRoleReadFailed = 28008?>
<?define msierrComPlusAssembliesReadFailed = 28009?>
<?define msierrComPlusSubscriptionReadFailed = 28010?>
<?define msierrComPlusPartitionDependency = 28011?>
<?define msierrComPlusPartitionNotFound = 28012?>
<?define msierrComPlusPartitionIdConflict = 28013?>
<?define msierrComPlusPartitionNameConflict = 28014?>
<?define msierrComPlusApplicationDependency = 28015?>
<?define msierrComPlusApplicationNotFound = 28016?>
<?define msierrComPlusApplicationIdConflict = 28017?>
<?define msierrComPlusApplicationNameConflict = 28018?>
<?define msierrComPlusApplicationRoleDependency = 28019?>
<?define msierrComPlusApplicationRoleNotFound = 28020?>
<?define msierrComPlusApplicationRoleConflict = 28021?>
<?define msierrComPlusAssemblyDependency = 28022?>
<?define msierrComPlusSubscriptionIdConflict = 28023?>
<?define msierrComPlusSubscriptionNameConflict = 28024?>
<?define msierrComPlusFailedLookupNames = 28025?>
<?define msierrMsmqCannotConnect = 28101?>
</Include>

33
src/wixlib/de-de.wxl Normal file
Просмотреть файл

@ -0,0 +1,33 @@
<?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. -->
<WixLocalization Culture="de-de" xmlns="http://wixtoolset.org/schemas/v4/wxl">
<String Id="msierrUSRFailedUserCreate" Overridable="yes">Konnte den Benutzer nicht anlegen. ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserCreatePswd" Overridable="yes">Konnte den Benutzer auf Grund eines falschen Passwortes nicht anlegen. ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserGroupAdd" Overridable="yes">Konnte Benutzer nicht zur Gruppe hinzufügen. ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserCreateExists" Overridable="yes">Konnte den Benutzer nicht anlegen, da er bereits existierte. ([2] [3] [4] [5])</String>
<String Id="msierrSMBFailedCreate" Overridable="yes">Konnte Netzwerkfreigabe nicht anlegen. ([2] [3] [4] [5])</String>
<String Id="msierrSMBFailedDrop" Overridable="yes">Konnte Netzwerkfreigabe nicht entfernen. ([2] [3] [4] [5])</String>
<String Id="msierrPERFMONFailedRegisterDLL" Overridable="yes">Konnte die DLL nicht für PerfMon registrieren. ([2] [3] [4] [5])</String>
<String Id="msierrPERFMONFailedUnregisterDLL" Overridable="yes">Konnte die DLL nicht für PerfMon deregistrieren. ([2] [3] [4] [5])</String>
<String Id="msierrInstallPerfCounterData" Overridable="yes">Konnte die Daten der Leistungsüberwachung (performance counters) nicht installieren. ([2] [3] [4] [5])</String>
<String Id="msierrUninstallPerfCounterData" Overridable="yes">Konnte die Daten der Leistungsüberwachung (performance counters) nicht deinstallieren. ([2] [3] [4] [5])</String>
<String Id="msierrSecureObjectsFailedCreateSD" Overridable="yes">Konnte keinen Security Descriptor für [3]\[4] erstellen, System Fehler: [2]</String>
<String Id="msierrSecureObjectsFailedSet" Overridable="yes">Konnte keinen Security Descriptor für das Objekt [3] erstellen, System Fehler: [2]</String>
<String Id="msierrSecureObjectsUnknownType" Overridable="yes">Unbekannter Objekt Typ [3], System Fehler: [2]</String>
<String Id="msierrXmlFileFailedRead" Overridable="yes">Beim Lesen der XML Dateien trat ein Fehler auf.</String>
<String Id="msierrXmlFileFailedOpen" Overridable="yes">Konnte XML Datei [3] nicht öffnen, System Fehler: [2]</String>
<String Id="msierrXmlFileFailedSelect" Overridable="yes">Konnte Knoten [3] in der XML Datei [4] nicht finden, System Fehler: [2]</String>
<String Id="msierrXmlFileFailedSave" Overridable="yes">Beim Speichern der Änderungen an der XML Datei [3] trat ein Fehler auf, System Fehler: [2]</String>
<String Id="msierrXmlConfigFailedRead" Overridable="yes">Bei der Konfiguration der XML Dateien trat ein Fehler auf.</String>
<String Id="msierrXmlConfigFailedOpen" Overridable="yes">Konnte XML Datei [3] nicht öffnen, System Fehler: [2]</String>
<String Id="msierrXmlConfigFailedSelect" Overridable="yes">Konnte Knoten [3] in der XML Datei [4] nicht finden, System Fehler: [2]</String>
<String Id="msierrXmlConfigFailedSave" Overridable="yes">Beim Speichern der Änderungen an der XML Datei [3] trat ein Fehler auf, System Fehler: [2]</String>
</WixLocalization>

33
src/wixlib/en-us.wxl Normal file
Просмотреть файл

@ -0,0 +1,33 @@
<?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. -->
<WixLocalization Culture="en-us" xmlns="http://wixtoolset.org/schemas/v4/wxl">
<String Id="msierrUSRFailedUserCreate" Overridable="yes">Failed to create user. ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserCreatePswd" Overridable="yes">Failed to create user due to invalid password. ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserGroupAdd" Overridable="yes">Failed to add user to group. ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserCreateExists" Overridable="yes">Failed to create user because it already exists. ([2] [3] [4] [5])</String>
<String Id="msierrSMBFailedCreate" Overridable="yes">Failed to create network share. ([2] [3] [4] [5])</String>
<String Id="msierrSMBFailedDrop" Overridable="yes">Failed to drop network share. ([2] [3] [4] [5])</String>
<String Id="msierrPERFMONFailedRegisterDLL" Overridable="yes">Failed to register DLL with PerfMon. ([2] [3] [4] [5])</String>
<String Id="msierrPERFMONFailedUnregisterDLL" Overridable="yes">Failed to unregister DLL with PerfMon. ([2] [3] [4] [5])</String>
<String Id="msierrInstallPerfCounterData" Overridable="yes">Failed to install performance counters. ([2] [3] [4] [5])</String>
<String Id="msierrUninstallPerfCounterData" Overridable="yes">Failed to uninstall performance counters. ([2] [3] [4] [5])</String>
<String Id="msierrSecureObjectsFailedCreateSD" Overridable="yes">Failed to create security descriptor for [3]\[4], system error: [2]</String>
<String Id="msierrSecureObjectsFailedSet" Overridable="yes">Failed to set security descriptor on object [3], system error: [2]</String>
<String Id="msierrSecureObjectsUnknownType" Overridable="yes">Unknown Object Type [3], system error: [2]</String>
<String Id="msierrXmlFileFailedRead" Overridable="yes">There was a failure while configuring XML files.</String>
<String Id="msierrXmlFileFailedOpen" Overridable="yes">Failed to open XML file [3], system error: [2]</String>
<String Id="msierrXmlFileFailedSelect" Overridable="yes">Failed to find node: [3] in XML file: [4], system error: [2]</String>
<String Id="msierrXmlFileFailedSave" Overridable="yes">Failed to save changes to XML file [3], system error: [2]</String>
<String Id="msierrXmlConfigFailedRead" Overridable="yes">There was a failure while configuring XML files.</String>
<String Id="msierrXmlConfigFailedOpen" Overridable="yes">Failed to open XML file [3], system error: [2]</String>
<String Id="msierrXmlConfigFailedSelect" Overridable="yes">Failed to find node: [3] in XML file: [4], system error: [2]</String>
<String Id="msierrXmlConfigFailedSave" Overridable="yes">Failed to save changes to XML file [3], system error: [2]</String>
</WixLocalization>

32
src/wixlib/es-es.wxl Normal file
Просмотреть файл

@ -0,0 +1,32 @@
<?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. -->
<WixLocalization Culture="es-es" xmlns="http://wixtoolset.org/schemas/v4/wxl">
<String Id="msierrUSRFailedUserCreate" Overridable="yes">La creación del usuario ha fracasado. ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserCreatePswd" Overridable="yes">La creación del usuario ha fracasado porque la contraseña es incorrecta. ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserGroupAdd" Overridable="yes">El aditamento del usuario al grupo ha fracasado. ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserCreateExists" Overridable="yes">La creación del usuario ha fracasado porque ya existe. ([2] [3] [4] [5])</String>
<String Id="msierrSMBFailedCreate" Overridable="yes">La creación de la red compartida ha fracasado. ([2] [3] [4] [5])</String>
<String Id="msierrSMBFailedDrop" Overridable="yes">La eliminación de la red compartida ha fracasado. ([2] [3] [4] [5])</String>
<String Id="msierrPERFMONFailedRegisterDLL" Overridable="yes">La inscripción al registro de la DLL con PerfMon ha fracasado. ([2] [3] [4] [5])</String>
<String Id="msierrPERFMONFailedUnregisterDLL" Overridable="yes">La cancelación de la inscripción al registro de la DLL con PerfMon ha fracasado. ([2] [3] [4] [5])</String>
<String Id="msierrInstallPerfCounterData" Overridable="yes">La instalación de los contadores de rendimiento ha fracasado. ([2] [3] [4] [5])</String>
<String Id="msierrUninstallPerfCounterData" Overridable="yes">La desinstalación de los contadores de rendimiento ha fracasado. ([2] [3] [4] [5])</String>
<String Id="msierrSecureObjectsFailedCreateSD" Overridable="yes">La creación de los ACLs ha fracasado por [3]\[4], error del sistema : [2]</String>
<String Id="msierrSecureObjectsFailedSet" Overridable="yes">El posicionamiento de los ACLs por el objecto [3] ha fracasado, error del sistema: [2]</String>
<String Id="msierrSecureObjectsUnknownType" Overridable="yes">Tipo de objecto no conocido [3], error del sistema: [2]</String>
<String Id="msierrXmlFileFailedRead" Overridable="yes">Un problema ha aparecido durante la configuración de los ficheros XML.</String>
<String Id="msierrXmlFileFailedOpen" Overridable="yes">Fracaso de la apertura de los ficheros XML [3], error del sistema: [2]</String>
<String Id="msierrXmlFileFailedSelect" Overridable="yes">Fracaso de la búsqueda del nodo: [3] en el fichero XML: [4], error del sistema: [2]</String>
<String Id="msierrXmlFileFailedSave" Overridable="yes">Fracaso durante la salvaguardia de las modificaciones en el fichero XML [3], error del sistema: [2]</String>
<String Id="msierrXmlConfigFailedRead" Overridable="yes">Un problema ha aparecido durante la configuración de los ficheros XML.</String>
<String Id="msierrXmlConfigFailedOpen" Overridable="yes">Fracaso de la apertura de los ficheros XML [3], error del sistema: [2]</String>
<String Id="msierrXmlConfigFailedSelect" Overridable="yes">Fracaso de la búsqueda del nodo: [3] en el fichero XML: [4], error del sistema: [2]</String>
<String Id="msierrXmlConfigFailedSave" Overridable="yes">Fracaso durante la salvaguardia de las modificaciones en el fichero XML [3], error del sistema: [2]</String>
</WixLocalization>

32
src/wixlib/fr-fr.wxl Normal file
Просмотреть файл

@ -0,0 +1,32 @@
<?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. -->
<WixLocalization Culture="fr-fr" xmlns="http://wixtoolset.org/schemas/v4/wxl">
<String Id="msierrUSRFailedUserCreate" Overridable="yes">La création de l'utilisateur a échoué. ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserCreatePswd" Overridable="yes">La création de l'utilisateur a échoué car le mot de passe est invalide. ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserGroupAdd" Overridable="yes">L'ajout de l'utilisateur au groupe a échoué. ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserCreateExists" Overridable="yes">La création de l'utilisateur a échoué car il existe dejà. ([2] [3] [4] [5])</String>
<String Id="msierrSMBFailedCreate" Overridable="yes">La création du partage reseau a échoué. ([2] [3] [4] [5])</String>
<String Id="msierrSMBFailedDrop" Overridable="yes">La suppression du partage reseau a échoué. ([2] [3] [4] [5])</String>
<String Id="msierrPERFMONFailedRegisterDLL" Overridable="yes">L'inscription au registre de la DLL avec PerfMon a échoué. ([2] [3] [4] [5])</String>
<String Id="msierrPERFMONFailedUnregisterDLL" Overridable="yes">La desinscription au registre de la DLL avec PerfMon a échoué. ([2] [3] [4] [5])</String>
<String Id="msierrInstallPerfCounterData" Overridable="yes">L'installation des compteurs de performance a échoué. ([2] [3] [4] [5])</String>
<String Id="msierrUninstallPerfCounterData" Overridable="yes">La desinstallation des compteurs de performance a échoué. ([2] [3] [4] [5])</String>
<String Id="msierrSecureObjectsFailedCreateSD" Overridable="yes">La création des ACLs a échoué pour [3]\[4], erreur systeme: [2]</String>
<String Id="msierrSecureObjectsFailedSet" Overridable="yes">Le positionnement des ACLs pour l'objet [3] a échoué, erreur systeme: [2]</String>
<String Id="msierrSecureObjectsUnknownType" Overridable="yes">Type d'objet inconnu [3], erreur systeme: [2]</String>
<String Id="msierrXmlFileFailedRead" Overridable="yes">Un problème est survenu lors de la configuration des fichiers XML.</String>
<String Id="msierrXmlFileFailedOpen" Overridable="yes">Echec de l'ouverture des fichiers XML [3], erreur systeme: [2]</String>
<String Id="msierrXmlFileFailedSelect" Overridable="yes">Echec de la recherche du noeud: [3] dans le fichier XML: [4], erreur systeme: [2]</String>
<String Id="msierrXmlFileFailedSave" Overridable="yes">Echec lors de la sauvegarde des modifications dans le fichier XML [3], erreur systeme: [2]</String>
<String Id="msierrXmlConfigFailedRead" Overridable="yes">Un problème est survenu lors de la configuration des fichiers XML.</String>
<String Id="msierrXmlConfigFailedOpen" Overridable="yes">Echec de l'ouverture des fichiers XML [3], erreur systeme: [2]</String>
<String Id="msierrXmlConfigFailedSelect" Overridable="yes">Echec de la recherche du noeud: [3] dans le fichier XML: [4], erreur systeme: [2]</String>
<String Id="msierrXmlConfigFailedSave" Overridable="yes">Echec lors de la sauvegarde des modifications dans le fichier XML [3], erreur systeme: [2]</String>
</WixLocalization>

33
src/wixlib/it-it.wxl Normal file
Просмотреть файл

@ -0,0 +1,33 @@
<?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. -->
<WixLocalization Culture="it-it" xmlns="http://wixtoolset.org/schemas/v4/wxl">
<String Id="msierrUSRFailedUserCreate" Overridable="yes">Impossibile creare l'utente. ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserCreatePswd" Overridable="yes">Impossibile creare l'utente perchè la password è errata. ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserGroupAdd" Overridable="yes">Impossibile aggiungere l'utente al gruppo. ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserCreateExists" Overridable="yes">Impossibile creare l'utente perchè già esistente. ([2] [3] [4] [5])</String>
<String Id="msierrSMBFailedCreate" Overridable="yes">Impossibile creare la risorsa di rete. ([2] [3] [4] [5])</String>
<String Id="msierrSMBFailedDrop" Overridable="yes">Impossibile eliminare la risorsa di rete. ([2] [3] [4] [5])</String>
<String Id="msierrPERFMONFailedRegisterDLL" Overridable="yes">Impossibile registrare la DLL con PerfMon. ([2] [3] [4] [5])</String>
<String Id="msierrPERFMONFailedUnregisterDLL" Overridable="yes">Impossibile rimuovere la registrazione della DLL con PerfMon. ([2] [3] [4] [5])</String>
<String Id="msierrInstallPerfCounterData" Overridable="yes">Impossibile installare i contatori delle prestazioni. ([2] [3] [4] [5])</String>
<String Id="msierrUninstallPerfCounterData" Overridable="yes">Impossibile rimuovere i contatori delle prestazioni. ([2] [3] [4] [5])</String>
<String Id="msierrSecureObjectsFailedCreateSD" Overridable="yes">Impossibile creare i descrittori di sicurezza per [3]\[4], errore di sistema: [2]</String>
<String Id="msierrSecureObjectsFailedSet" Overridable="yes">Impossibile impostare i descrittori di sicurezza sull'oggetto [3], errore di sistema: [2]</String>
<String Id="msierrSecureObjectsUnknownType" Overridable="yes">Tipo di oggetto sconosciuto [3], errore di sistema: [2]</String>
<String Id="msierrXmlFileFailedRead" Overridable="yes">Si è verificato un errore durante la configurazione dei file XML.</String>
<String Id="msierrXmlFileFailedOpen" Overridable="yes">Impossibile aprire il file XML [3], errore di sistema: [2]</String>
<String Id="msierrXmlFileFailedSelect" Overridable="yes">Impossibile trovare il nodo: [3] nel file XML: [4], errore di sistema: [2]</String>
<String Id="msierrXmlFileFailedSave" Overridable="yes">Impossible salvare le modifiche al file XML [3], errore di sistema: [2]</String>
<String Id="msierrXmlConfigFailedRead" Overridable="yes">Si è verificato un errore durante la configurazione dei file XML.</String>
<String Id="msierrXmlConfigFailedOpen" Overridable="yes">Impossibile aprire il file XML [3], errore di sistema: [2]</String>
<String Id="msierrXmlConfigFailedSelect" Overridable="yes">Impossibile trovare il nodo: [3] nel file XML: [4], errore di sistema: [2]</String>
<String Id="msierrXmlConfigFailedSave" Overridable="yes">Impossibile salvare le modifiche al file XML [3], errore di sitema: [2]</String>
</WixLocalization>

33
src/wixlib/ja-jp.wxl Normal file
Просмотреть файл

@ -0,0 +1,33 @@
<?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. -->
<WixLocalization Culture="ja-jp" xmlns="http://wixtoolset.org/schemas/v4/wxl">
<String Id="msierrUSRFailedUserCreate" Overridable="yes">ユーザー作成に失敗しました。 ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserCreatePswd" Overridable="yes">パスワードが無効のためユーザー作成に失敗しました。 ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserGroupAdd" Overridable="yes">ユーザーをグループに追加でいませんでした。 ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserCreateExists" Overridable="yes">ユーザーが既に存在するため作成できませんでした。 ([2] [3] [4] [5])</String>
<String Id="msierrSMBFailedCreate" Overridable="yes">ネットワーク共有の作成に失敗しました。 ([2] [3] [4] [5])</String>
<String Id="msierrSMBFailedDrop" Overridable="yes">ネットワーク共有の削除に失敗しました。 ([2] [3] [4] [5])</String>
<String Id="msierrPERFMONFailedRegisterDLL" Overridable="yes">DLL を PerfMon に登録でいませんでした。 ([2] [3] [4] [5])</String>
<String Id="msierrPERFMONFailedUnregisterDLL" Overridable="yes">DLL を PerfMon より登録解除できませんでした。 ([2] [3] [4] [5])</String>
<String Id="msierrInstallPerfCounterData" Overridable="yes">パフォーマンス カウンタをインストールできませんでした。 ([2] [3] [4] [5])</String>
<String Id="msierrUninstallPerfCounterData" Overridable="yes">パフォーマンス カウンタをアンインストールできませんでした。 ([2] [3] [4] [5])</String>
<String Id="msierrSecureObjectsFailedCreateSD" Overridable="yes">[3]\[4] 用セキュリティ ディスクリプターを作成できませんでした、システム エラー: [2]</String>
<String Id="msierrSecureObjectsFailedSet" Overridable="yes">オブジェクト [3] 上のセキュリティ ディスクリプターを設定できませんでした、システム エラー: [2]</String>
<String Id="msierrSecureObjectsUnknownType" Overridable="yes">不明なオブジェクト種別 [3]、システム エラー: [2]</String>
<String Id="msierrXmlFileFailedRead" Overridable="yes">XML ファイル構成中に失敗しました。</String>
<String Id="msierrXmlFileFailedOpen" Overridable="yes">XML ファイル [3] を開けませんでした、システム エラー: [2]</String>
<String Id="msierrXmlFileFailedSelect" Overridable="yes">XML ファイル [4] 内にノード [3] が見つかりませんでした、システム エラー: [2]</String>
<String Id="msierrXmlFileFailedSave" Overridable="yes">XML ファイル [3] へ変更を保存できませんでした、システム エラー: [2]</String>
<String Id="msierrXmlConfigFailedRead" Overridable="yes">XML ファイル構成中に失敗しました。</String>
<String Id="msierrXmlConfigFailedOpen" Overridable="yes">XML ファイル [3] を開けませんでした、システム エラー: [2]</String>
<String Id="msierrXmlConfigFailedSelect" Overridable="yes">XML ファイル [4] 内にノード [3] が見つかりませんでした、システム エラー: [2]</String>
<String Id="msierrXmlConfigFailedSave" Overridable="yes">XML ファイル [3] へ変更を保存できませんでした、システム エラー: [2]</String>
</WixLocalization>

Просмотреть файл

@ -0,0 +1,5 @@
<?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.60" targetFramework="net40" developmentDependency="true" />
</packages>

27
src/wixlib/pt-br.wxl Normal file
Просмотреть файл

@ -0,0 +1,27 @@
<?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. -->
<WixLocalization Culture="pt-br" xmlns="http://wixtoolset.org/schemas/v4/wxl">
<String Id="msierrUSRFailedUserCreate" Overridable="yes">Falha ao criar usuário. ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserCreatePswd" Overridable="yes">Falha ao criar usuário devido a senha inválida. ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserGroupAdd" Overridable="yes">Falha ao adicionar o usuário ao grupo. ([2] [3] [4] [5])</String>
<String Id="msierrUSRFailedUserCreateExists" Overridable="yes">Falha ao criar o usuário, porque ele já existe. ([2] [3] [4] [5])</String>
<String Id="msierrSMBFailedCreate" Overridable="yes">Falha ao criar o compartilhamento de rede. ([2] [3] [4] [5])</String>
<String Id="msierrSMBFailedDrop" Overridable="yes">Falha ao cair compartilhamento de rede. ([2] [3] [4] [5])</String>
<String Id="msierrPERFMONFailedRegisterDLL" Overridable="yes">Falha ao registrar DLL com PerfMon. ([2] [3] [4] [5])</String>
<String Id="msierrPERFMONFailedUnregisterDLL" Overridable="yes">Falha ao cancelar o registro de DLL com PerfMon. ([2] [3] [4] [5])</String>
<String Id="msierrInstallPerfCounterData" Overridable="yes">Falha ao instalar contadores de desempenho. ([2] [3] [4] [5])</String>
<String Id="msierrUninstallPerfCounterData" Overridable="yes">Falha ao desinstalar contadores de desempenho. ([2] [3] [4] [5])</String>
<String Id="msierrSecureObjectsFailedCreateSD" Overridable="yes">Falha ao criar o descritor de segurança [3] \ [4], erro do sistema: [2]</String>
<String Id="msierrSecureObjectsFailedSet" Overridable="yes">Falha ao definir o descritor de segurança sobre o objeto [3], erro do sistema: [2]</String>
<String Id="msierrSecureObjectsUnknownType" Overridable="yes">Objeto Desconhecido Tipo [3], erro do sistema: [2]</String>
<String Id="msierrXmlFileFailedRead" Overridable="yes">Houve uma falha ao configurar arquivos XML.</String>
<String Id="msierrXmlFileFailedOpen" Overridable="yes">Falha ao abrir o arquivo XML [3], erro do sistema: [2]</String>
<String Id="msierrXmlFileFailedSelect" Overridable="yes">Falha ao localizar nó: [3] no arquivo XML: [4], erro do sistema: [2]</String>
<String Id="msierrXmlFileFailedSave" Overridable="yes">Falha ao salvar as alterações para o arquivo XML [3], erro do sistema: [2]</String>
<String Id="msierrXmlConfigFailedRead" Overridable="yes">Houve uma falha ao configurar arquivos XML.</String>
<String Id="msierrXmlConfigFailedOpen" Overridable="yes">Falha ao abrir o arquivo XML [3], erro do sistema: [2]</String>
<String Id="msierrXmlConfigFailedSelect" Overridable="yes">Falha ao localizar nó: [3] no arquivo XML: [4], erro do sistema: [2]</String>
<String Id="msierrXmlConfigFailedSave" Overridable="yes">Falha ao salvar as alterações para o arquivo XML [3], erro do sistema: [2]</String>
</WixLocalization>

52
src/wixlib/util.wixproj Normal file
Просмотреть файл

@ -0,0 +1,52 @@
<?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.60\build\WixToolset.Core.InternalPackage.props" Condition="Exists('..\..\packages\WixToolset.Core.InternalPackage.4.0.60\build\WixToolset.Core.InternalPackage.props')" />
<Import Project="..\FindLocalWix.props" />
<PropertyGroup>
<ProjectGuid>{1ACFFEFD-505A-41A5-ACBF-A02B7B473AA2}</ProjectGuid>
<OutputName>util</OutputName>
<OutputType>Library</OutputType>
<BindFiles>true</BindFiles>
<Pedantic>true</Pedantic>
</PropertyGroup>
<ItemGroup>
<Compile Include="UtilExtension.wxs" />
<Compile Include="UtilExtension_x86.wxs" />
<Compile Include="UtilExtension_x64.wxs" />
<EmbeddedResource Include="en-us.wxl" />
<EmbeddedResource Include="de-de.wxl" />
<EmbeddedResource Include="es-es.wxl" />
<EmbeddedResource Include="fr-fr.wxl" />
<EmbeddedResource Include="ja-jp.wxl" />
<EmbeddedResource Include="pt-br.wxl" />
<EmbeddedResource Include="it-it.wxl" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ca\utilca.vcxproj">
<Name>utilca</Name>
<Project>{076018F7-19BD-423A-ABBF-229273DA08D8}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="caerr.wxi" />
<None Include="caSuffix.wxi" />
<None Include="UtilExtension_Platform.wxi" />
</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.Core.InternalPackage.4.0.60\build\WixToolset.Core.InternalPackage.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.Core.InternalPackage.4.0.60\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')" />
</Project>

11
version.json Normal file
Просмотреть файл

@ -0,0 +1,11 @@
{
"version": "4.0",
"publicReleaseRefSpec": [
"^refs/heads/master$"
],
"cloudBuild": {
"buildNumber": {
"enabled": true
}
}
}