winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 409ce766b067e0916f7a54c73d932020b1aedc7f
parent 49c0ddbd9bccb579292ec0da723911ac2310e4a0
Author: JohnMcPMS <johnmcp@microsoft.com>
Date:   Tue, 21 Apr 2020 15:17:15 -0700

Rename utility binary and add download function (#90)


Diffstat:
Mazure-pipelines.yml | 13++++++++++---
Msrc/AppInstallerCLI.sln | 2+-
Msrc/AppInstallerCommonCore/Deployment.cpp | 29++++++++++++++++-------------
Dsrc/AppInstallerSQLiteIndexUtil/AppInstallerSQLiteIndexUtil.h | 77-----------------------------------------------------------------------------
Dsrc/AppInstallerSQLiteIndexUtil/AppInstallerSQLiteIndexUtil.vcxproj | 256-------------------------------------------------------------------------------
Dsrc/AppInstallerSQLiteIndexUtil/AppInstallerSQLiteIndexUtil.vcxproj.filters | 41-----------------------------------------
Dsrc/AppInstallerSQLiteIndexUtil/Exports.cpp | 177-------------------------------------------------------------------------------
Dsrc/AppInstallerSQLiteIndexUtil/Source.def | 12------------
Dsrc/AppInstallerSQLiteIndexUtil/pch.h | 23-----------------------
Asrc/WinGetUtil/Exports.cpp | 215+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Rsrc/AppInstallerSQLiteIndexUtil/PropertySheet.props -> src/WinGetUtil/PropertySheet.props | 0
Asrc/WinGetUtil/Source.def | 13+++++++++++++
Asrc/WinGetUtil/WinGetUtil.h | 84+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/WinGetUtil/WinGetUtil.vcxproj | 256+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/WinGetUtil/WinGetUtil.vcxproj.filters | 41+++++++++++++++++++++++++++++++++++++++++
Rsrc/AppInstallerSQLiteIndexUtil/packages.config -> src/WinGetUtil/packages.config | 0
Rsrc/AppInstallerSQLiteIndexUtil/pch.cpp -> src/WinGetUtil/pch.cpp | 0
Asrc/WinGetUtil/pch.h | 16++++++++++++++++
18 files changed, 652 insertions(+), 603 deletions(-)

diff --git a/azure-pipelines.yml b/azure-pipelines.yml @@ -134,10 +134,17 @@ jobs: publishLocation: 'Container' - task: PublishBuildArtifacts@1 - displayName: Publish SQLite Util Binary + displayName: Publish Util Binary inputs: - PathtoPublish: 'src\x64\Release\AppInstallerSQLiteIndexUtil\AppInstallerSQLiteIndexUtil.dll' - ArtifactName: 'AppInstallerSQLiteIndexUtil.dll' + PathtoPublish: 'src\x64\Release\WinGetUtil\WinGetUtil.dll' + ArtifactName: 'WinGetUtil.dll' + publishLocation: 'Container' + + - task: PublishBuildArtifacts@1 + displayName: Publish Util Symbols + inputs: + PathtoPublish: 'src\x64\Release\WinGetUtil\WinGetUtil.pdb' + ArtifactName: 'WinGetUtil.pdb' publishLocation: 'Container' - task: ComponentGovernanceComponentDetection@0 diff --git a/src/AppInstallerCLI.sln b/src/AppInstallerCLI.sln @@ -27,7 +27,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "YamlCppLib", "YamlCppLib\Ya EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AppInstallerCommonCore", "AppInstallerCommonCore\AppInstallerCommonCore.vcxproj", "{5890D6ED-7C3B-40F3-B436-B54F640D9E65}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AppInstallerSQLiteIndexUtil", "AppInstallerSQLiteIndexUtil\AppInstallerSQLiteIndexUtil.vcxproj", "{FB313532-38B0-4676-9303-AB200AA13576}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinGetUtil", "WinGetUtil\WinGetUtil.vcxproj", "{FB313532-38B0-4676-9303-AB200AA13576}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AppInstallerTestExeInstaller", "AppInstallerTestExeInstaller\AppInstallerTestExeInstaller.vcxproj", "{6CB84692-5994-407D-B9BD-9216AF77FE83}" EndProject diff --git a/src/AppInstallerCommonCore/Deployment.cpp b/src/AppInstallerCommonCore/Deployment.cpp @@ -57,20 +57,23 @@ namespace AppInstaller::Deployment ~DelayRegisterStorage() { - PackageManager packageManager; - - for (const auto& fn : m_familyNames) + if (!m_familyNames.empty()) { - size_t id = GetDeploymentOperationId(); - AICLI_LOG(Core, Info, << "Starting RegisterPackageByFamilyName operation #" << id << ": " << fn); - - winrt::hstring familyName = Utility::ConvertToUTF16(fn).c_str(); - (void)packageManager.RegisterPackageByFamilyNameAsync( - familyName, - nullptr, - winrt::Windows::Management::Deployment::DeploymentOptions::None, - nullptr, - nullptr); + PackageManager packageManager; + + for (const auto& fn : m_familyNames) + { + size_t id = GetDeploymentOperationId(); + AICLI_LOG(Core, Info, << "Starting RegisterPackageByFamilyName operation #" << id << ": " << fn); + + winrt::hstring familyName = Utility::ConvertToUTF16(fn).c_str(); + (void)packageManager.RegisterPackageByFamilyNameAsync( + familyName, + nullptr, + winrt::Windows::Management::Deployment::DeploymentOptions::None, + nullptr, + nullptr); + } } } diff --git a/src/AppInstallerSQLiteIndexUtil/AppInstallerSQLiteIndexUtil.h b/src/AppInstallerSQLiteIndexUtil/AppInstallerSQLiteIndexUtil.h @@ -1,77 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -#pragma once - -extern "C" -{ - // A handle to the index. - typedef void* APPINSTALLER_SQLITE_INDEX_HANDLE; - - // A string taken in by the utility; in UTF16. - typedef wchar_t const* const APPINSTALLER_SQLITE_INDEX_STRING; - - // A string returned by the utility; in UTF16. - typedef BSTR APPINSTALLER_SQLITE_INDEX_STRING_OUT; - -#define APPINSTALLER_SQLITE_INDEX_API HRESULT __stdcall - -#define APPINSTALLER_SQLITE_INDEX_VERSION_LATEST ((UINT32)-1) - - // Initializes the logging infrastructure. - APPINSTALLER_SQLITE_INDEX_API AppInstallerLoggingInit( - APPINSTALLER_SQLITE_INDEX_STRING logPath); - - // Removes the given log file from the logging infrastructure. - // If logPath is nullptr, then remove all loggers. - APPINSTALLER_SQLITE_INDEX_API AppInstallerLoggingTerm( - APPINSTALLER_SQLITE_INDEX_STRING logPath); - - // Creates a new index file at filePath with the given version. - APPINSTALLER_SQLITE_INDEX_API AppInstallerSQLiteIndexCreate( - APPINSTALLER_SQLITE_INDEX_STRING filePath, - UINT32 majorVersion, - UINT32 minorVersion, - APPINSTALLER_SQLITE_INDEX_HANDLE* index); - - // Opens an existing index at filePath. - APPINSTALLER_SQLITE_INDEX_API AppInstallerSQLiteIndexOpen( - APPINSTALLER_SQLITE_INDEX_STRING filePath, - APPINSTALLER_SQLITE_INDEX_HANDLE* index); - - // Closes the index. - APPINSTALLER_SQLITE_INDEX_API AppInstallerSQLiteIndexClose( - APPINSTALLER_SQLITE_INDEX_HANDLE index); - - // Adds the manifest at the repository relative path to the index. - // If the function succeeds, the manifest has been added. - APPINSTALLER_SQLITE_INDEX_API AppInstallerSQLiteIndexAddManifest( - APPINSTALLER_SQLITE_INDEX_HANDLE index, - APPINSTALLER_SQLITE_INDEX_STRING manifestPath, - APPINSTALLER_SQLITE_INDEX_STRING relativePath); - - // Updates the manifest with matching { Id, Version, Channel } in the index. - // The return value indicates whether the index was modified by the function. - APPINSTALLER_SQLITE_INDEX_API AppInstallerSQLiteIndexUpdateManifest( - APPINSTALLER_SQLITE_INDEX_HANDLE index, - APPINSTALLER_SQLITE_INDEX_STRING manifestPath, - APPINSTALLER_SQLITE_INDEX_STRING relativePath, - bool* indexModified); - - // Removes the manifest with matching { Id, Version, Channel } from the index. - // Path is currently ignored. - APPINSTALLER_SQLITE_INDEX_API AppInstallerSQLiteIndexRemoveManifest( - APPINSTALLER_SQLITE_INDEX_HANDLE index, - APPINSTALLER_SQLITE_INDEX_STRING manifestPath, - APPINSTALLER_SQLITE_INDEX_STRING relativePath); - - // Removes data that is no longer needed for an index that is to be published. - APPINSTALLER_SQLITE_INDEX_API AppInstallerSQLiteIndexPrepareForPackaging( - APPINSTALLER_SQLITE_INDEX_HANDLE index); - - // Validates a given manifest. Returns a bool for validation result and - // a string representing validation errors if validation failed. - APPINSTALLER_SQLITE_INDEX_API AppInstallerValidateManifest( - APPINSTALLER_SQLITE_INDEX_STRING manifestPath, - bool* succeeded, - APPINSTALLER_SQLITE_INDEX_STRING_OUT* failureMessage); -} diff --git a/src/AppInstallerSQLiteIndexUtil/AppInstallerSQLiteIndexUtil.vcxproj b/src/AppInstallerSQLiteIndexUtil/AppInstallerSQLiteIndexUtil.vcxproj @@ -1,255 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <Import Project="$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.191111.2\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.191111.2\build\native\Microsoft.Windows.CppWinRT.props')" /> - <PropertyGroup Label="Globals"> - <CppWinRTOptimized>true</CppWinRTOptimized> - <CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge> - <MinimalCoreWin>true</MinimalCoreWin> - <VCProjectVersion>15.0</VCProjectVersion> - <ProjectGuid>{FB313532-38B0-4676-9303-AB200AA13576}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>AppInstallerSQLiteIndexUtil</RootNamespace> - <WindowsTargetPlatformVersion Condition=" '$(WindowsTargetPlatformVersion)' == '' ">10.0.18362.0</WindowsTargetPlatformVersion> - <WindowsTargetPlatformMinVersion>10.0.16299.0</WindowsTargetPlatformMinVersion> - <WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport> - <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|ARM"> - <Configuration>Debug</Configuration> - <Platform>ARM</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|ARM64"> - <Configuration>Debug</Configuration> - <Platform>ARM64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|ARM"> - <Configuration>Release</Configuration> - <Platform>ARM</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|ARM64"> - <Configuration>Release</Configuration> - <Platform>ARM64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <PlatformToolset>v140</PlatformToolset> - <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset> - <PlatformToolset Condition="'$(VisualStudioVersion)' == '16.0'">v142</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration"> - <UseDebugLibraries>true</UseDebugLibraries> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration"> - <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <LinkIncremental>false</LinkIncremental> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - <Import Project="..\binver\binver.vcxitems" Label="Shared" /> - </ImportGroup> - <ImportGroup Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets"> - <Import Project="PropertySheet.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)x86\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(SolutionDir)x86\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> - </PropertyGroup> - <ItemDefinitionGroup> - <ClCompile> - <PrecompiledHeader>Use</PrecompiledHeader> - <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> - <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile> - <PreprocessorDefinitions>_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <WarningLevel>Level4</WarningLevel> - <AdditionalOptions>%(AdditionalOptions) /permissive- /bigobj /D _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING</AdditionalOptions> - </ClCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD</PreprocessorDefinitions> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">$(ProjectDir);$(ProjectDir)..\AppInstallerCommonCore;$(ProjectDir)..\AppInstallerRepositoryCore;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\YamlCppLib\yaml-cpp\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">$(ProjectDir);$(ProjectDir)..\AppInstallerCommonCore;$(ProjectDir)..\AppInstallerRepositoryCore;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\YamlCppLib\yaml-cpp\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir);$(ProjectDir)..\AppInstallerCommonCore;$(ProjectDir)..\AppInstallerRepositoryCore;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\YamlCppLib\yaml-cpp\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</TreatWarningAsError> - <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">true</TreatWarningAsError> - <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</TreatWarningAsError> - </ClCompile> - <Link> - <GenerateWindowsMetadata>false</GenerateWindowsMetadata> - <SubSystem Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">Windows</SubSystem> - <SubSystem Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">Windows</SubSystem> - <SubSystem Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Windows</SubSystem> - <ModuleDefinitionFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Source.def</ModuleDefinitionFile> - <ModuleDefinitionFile Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">Source.def</ModuleDefinitionFile> - <ModuleDefinitionFile Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">Source.def</ModuleDefinitionFile> - <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies> - </Link> - <Manifest> - <AdditionalManifestFiles Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">$(ProjectDir)..\manifest\shared.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles> - </Manifest> - <Manifest> - <AdditionalManifestFiles Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">$(ProjectDir)..\manifest\shared.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles> - </Manifest> - <Manifest> - <AdditionalManifestFiles Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)..\manifest\shared.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles> - </Manifest> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Platform)'=='Win32'"> - <ClCompile> - <PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions);CLICOREDLLBUILD</PreprocessorDefinitions> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir);$(ProjectDir)..\AppInstallerCommonCore;$(ProjectDir)..\AppInstallerRepositoryCore;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\YamlCppLib\yaml-cpp\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</TreatWarningAsError> - </ClCompile> - <Link> - <SubSystem Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Windows</SubSystem> - <ModuleDefinitionFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Source.def</ModuleDefinitionFile> - <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies> - </Link> - <Manifest> - <AdditionalManifestFiles Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)..\manifest\shared.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles> - </Manifest> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD</PreprocessorDefinitions> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">$(ProjectDir);$(ProjectDir)..\AppInstallerCommonCore;$(ProjectDir)..\AppInstallerRepositoryCore;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\YamlCppLib\yaml-cpp\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">$(ProjectDir);$(ProjectDir)..\AppInstallerCommonCore;$(ProjectDir)..\AppInstallerRepositoryCore;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\YamlCppLib\yaml-cpp\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir);$(ProjectDir)..\AppInstallerCommonCore;$(ProjectDir)..\AppInstallerRepositoryCore;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\YamlCppLib\yaml-cpp\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir);$(ProjectDir)..\AppInstallerCommonCore;$(ProjectDir)..\AppInstallerRepositoryCore;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\YamlCppLib\yaml-cpp\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</TreatWarningAsError> - <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">true</TreatWarningAsError> - <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</TreatWarningAsError> - <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</TreatWarningAsError> - </ClCompile> - <Link> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <GenerateWindowsMetadata>false</GenerateWindowsMetadata> - <SubSystem Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">Windows</SubSystem> - <SubSystem Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">Windows</SubSystem> - <SubSystem Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Windows</SubSystem> - <SubSystem Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Windows</SubSystem> - <ModuleDefinitionFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Source.def</ModuleDefinitionFile> - <ModuleDefinitionFile Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">Source.def</ModuleDefinitionFile> - <ModuleDefinitionFile Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">Source.def</ModuleDefinitionFile> - <ModuleDefinitionFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Source.def</ModuleDefinitionFile> - <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|x64'">wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies> - </Link> - <Manifest> - <AdditionalManifestFiles Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">$(ProjectDir)..\manifest\shared.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles> - </Manifest> - <Manifest> - <AdditionalManifestFiles Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">$(ProjectDir)..\manifest\shared.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles> - </Manifest> - <Manifest> - <AdditionalManifestFiles Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)..\manifest\shared.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles> - </Manifest> - <Manifest> - <AdditionalManifestFiles Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)..\manifest\shared.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles> - </Manifest> - </ItemDefinitionGroup> - <ItemGroup> - <ClInclude Include="AppInstallerSQLiteIndexUtil.h" /> - <ClInclude Include="pch.h" /> - </ItemGroup> - <ItemGroup> - <ClCompile Include="Exports.cpp" /> - <ClCompile Include="pch.cpp"> - <PrecompiledHeader>Create</PrecompiledHeader> - </ClCompile> - </ItemGroup> - <ItemGroup> - <None Include="packages.config" /> - <None Include="PropertySheet.props" /> - <None Include="Source.def" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\AppInstallerCommonCore\AppInstallerCommonCore.vcxproj"> - <Project>{5890d6ed-7c3b-40f3-b436-b54f640d9e65}</Project> - </ProjectReference> - <ProjectReference Include="..\AppInstallerRepositoryCore\AppInstallerRepositoryCore.vcxproj"> - <Project>{5eb88068-5fb9-4e69-89b2-72dbc5e068f9}</Project> - </ProjectReference> - <ProjectReference Include="..\YamlCppLib\YamlCppLib.vcxproj"> - <Project>{8bb94bb8-374f-4294-bca1-c7811514a6b7}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - <Import Project="$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.191111.2\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.191111.2\build\native\Microsoft.Windows.CppWinRT.targets')" /> - <Import Project="$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.191107.2\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.191107.2\build\native\Microsoft.Windows.ImplementationLibrary.targets')" /> - </ImportGroup> - <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('$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.191111.2\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.191111.2\build\native\Microsoft.Windows.CppWinRT.props'))" /> - <Error Condition="!Exists('$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.191111.2\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.191111.2\build\native\Microsoft.Windows.CppWinRT.targets'))" /> - <Error Condition="!Exists('$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.191107.2\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.191107.2\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" /> - </Target> -</Project>- \ No newline at end of file diff --git a/src/AppInstallerSQLiteIndexUtil/AppInstallerSQLiteIndexUtil.vcxproj.filters b/src/AppInstallerSQLiteIndexUtil/AppInstallerSQLiteIndexUtil.vcxproj.filters @@ -1,40 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <Filter Include="Source Files"> - <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> - <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> - </Filter> - <Filter Include="Header Files"> - <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> - <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions> - </Filter> - <Filter Include="Resource Files"> - <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> - </Filter> - </ItemGroup> - <ItemGroup> - <ClInclude Include="pch.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="AppInstallerSQLiteIndexUtil.h"> - <Filter>Header Files</Filter> - </ClInclude> - </ItemGroup> - <ItemGroup> - <ClCompile Include="pch.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="Exports.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - </ItemGroup> - <ItemGroup> - <None Include="PropertySheet.props" /> - <None Include="packages.config" /> - <None Include="Source.def"> - <Filter>Source Files</Filter> - </None> - </ItemGroup> -</Project>- \ No newline at end of file diff --git a/src/AppInstallerSQLiteIndexUtil/Exports.cpp b/src/AppInstallerSQLiteIndexUtil/Exports.cpp @@ -1,177 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -#include "pch.h" -#include "AppInstallerSQLiteIndexUtil.h" - -using namespace AppInstaller::Utility; -using namespace AppInstaller::Manifest; -using namespace AppInstaller::Repository::Microsoft; - -extern "C" -{ - APPINSTALLER_SQLITE_INDEX_API AppInstallerLoggingInit(APPINSTALLER_SQLITE_INDEX_STRING logPath) try - { - THROW_HR_IF(E_INVALIDARG, !logPath); - - static std::once_flag s_initLogging; - std::call_once(s_initLogging, []() { - // Enable all logs for now. - AppInstaller::Logging::Log().EnableChannel(AppInstaller::Logging::Channel::All); - AppInstaller::Logging::Log().SetLevel(AppInstaller::Logging::Level::Verbose); - AppInstaller::Logging::EnableWilFailureTelemetry(); - }); - - std::filesystem::path pathAsPath = logPath; - std::string loggerName = AppInstaller::Logging::FileLogger::GetNameForPath(pathAsPath); - - if (!AppInstaller::Logging::Log().ContainsLogger(loggerName)) - { - AppInstaller::Logging::AddFileLogger(pathAsPath); - } - - return S_OK; - } - CATCH_RETURN() - - APPINSTALLER_SQLITE_INDEX_API AppInstallerLoggingTerm(APPINSTALLER_SQLITE_INDEX_STRING logPath) try - { - if (logPath) - { - std::string loggerName = AppInstaller::Logging::FileLogger::GetNameForPath(logPath); - (void)AppInstaller::Logging::Log().RemoveLogger(loggerName); - } - else - { - AppInstaller::Logging::Log().RemoveAllLoggers(); - } - - return S_OK; - } - CATCH_RETURN() - - APPINSTALLER_SQLITE_INDEX_API AppInstallerSQLiteIndexCreate(APPINSTALLER_SQLITE_INDEX_STRING filePath, UINT32 majorVersion, UINT32 minorVersion, APPINSTALLER_SQLITE_INDEX_HANDLE* index) try - { - THROW_HR_IF(E_INVALIDARG, !filePath); - THROW_HR_IF(E_INVALIDARG, !index); - THROW_HR_IF(E_INVALIDARG, !!*index); - - std::string filePathUtf8 = ConvertToUTF8(filePath); - Schema::Version internalVersion{ majorVersion, minorVersion }; - - std::unique_ptr<SQLiteIndex> result = std::make_unique<SQLiteIndex>(SQLiteIndex::CreateNew(filePathUtf8, internalVersion)); - - *index = static_cast<APPINSTALLER_SQLITE_INDEX_HANDLE>(result.release()); - - return S_OK; - } - CATCH_RETURN() - - APPINSTALLER_SQLITE_INDEX_API AppInstallerSQLiteIndexOpen(APPINSTALLER_SQLITE_INDEX_STRING filePath, APPINSTALLER_SQLITE_INDEX_HANDLE* index) try - { - THROW_HR_IF(E_INVALIDARG, !filePath); - THROW_HR_IF(E_INVALIDARG, !index); - THROW_HR_IF(E_INVALIDARG, !!*index); - - std::string filePathUtf8 = ConvertToUTF8(filePath); - - std::unique_ptr<SQLiteIndex> result = std::make_unique<SQLiteIndex>(SQLiteIndex::Open(filePathUtf8, SQLiteIndex::OpenDisposition::ReadWrite)); - - *index = static_cast<APPINSTALLER_SQLITE_INDEX_HANDLE>(result.release()); - - return S_OK; - } - CATCH_RETURN() - - APPINSTALLER_SQLITE_INDEX_API AppInstallerSQLiteIndexClose(APPINSTALLER_SQLITE_INDEX_HANDLE index) try - { - std::unique_ptr<SQLiteIndex> toClose(reinterpret_cast<SQLiteIndex*>(index)); - - return S_OK; - } - CATCH_RETURN() - - APPINSTALLER_SQLITE_INDEX_API AppInstallerSQLiteIndexAddManifest( - APPINSTALLER_SQLITE_INDEX_HANDLE index, - APPINSTALLER_SQLITE_INDEX_STRING manifestPath, APPINSTALLER_SQLITE_INDEX_STRING relativePath) try - { - THROW_HR_IF(E_INVALIDARG, !index); - THROW_HR_IF(E_INVALIDARG, !manifestPath); - THROW_HR_IF(E_INVALIDARG, !relativePath); - - reinterpret_cast<SQLiteIndex*>(index)->AddManifest(manifestPath, relativePath); - - return S_OK; - } - CATCH_RETURN() - - APPINSTALLER_SQLITE_INDEX_API AppInstallerSQLiteIndexUpdateManifest( - APPINSTALLER_SQLITE_INDEX_HANDLE index, - APPINSTALLER_SQLITE_INDEX_STRING manifestPath, - APPINSTALLER_SQLITE_INDEX_STRING relativePath, - bool* indexModified) try - { - THROW_HR_IF(E_INVALIDARG, !index); - THROW_HR_IF(E_INVALIDARG, !manifestPath); - THROW_HR_IF(E_INVALIDARG, !relativePath); - - bool result = reinterpret_cast<SQLiteIndex*>(index)->UpdateManifest(manifestPath, relativePath); - if (indexModified) - { - *indexModified = result; - } - - return S_OK; - } - CATCH_RETURN() - - APPINSTALLER_SQLITE_INDEX_API AppInstallerSQLiteIndexRemoveManifest( - APPINSTALLER_SQLITE_INDEX_HANDLE index, - APPINSTALLER_SQLITE_INDEX_STRING manifestPath, APPINSTALLER_SQLITE_INDEX_STRING relativePath) try - { - THROW_HR_IF(E_INVALIDARG, !index); - THROW_HR_IF(E_INVALIDARG, !manifestPath); - THROW_HR_IF(E_INVALIDARG, !relativePath); - - reinterpret_cast<SQLiteIndex*>(index)->RemoveManifest(manifestPath, relativePath); - - return S_OK; - } - CATCH_RETURN() - - APPINSTALLER_SQLITE_INDEX_API AppInstallerSQLiteIndexPrepareForPackaging( - APPINSTALLER_SQLITE_INDEX_HANDLE index) try - { - THROW_HR_IF(E_INVALIDARG, !index); - - reinterpret_cast<SQLiteIndex*>(index)->PrepareForPackaging(); - - return S_OK; - } - CATCH_RETURN() - - APPINSTALLER_SQLITE_INDEX_API AppInstallerValidateManifest( - APPINSTALLER_SQLITE_INDEX_STRING manifestPath, - bool* succeeded, - APPINSTALLER_SQLITE_INDEX_STRING_OUT* failureMessage) try - { - THROW_HR_IF(E_INVALIDARG, !manifestPath); - THROW_HR_IF(E_INVALIDARG, !succeeded); - - try - { - (void)Manifest::CreateFromPath(manifestPath, true); - *succeeded = true; - } - catch (const ManifestException& e) - { - *succeeded = false; - if (failureMessage) - { - *failureMessage = ::SysAllocString(ConvertToUTF16(e.GetManifestErrorMessage()).c_str()); - } - } - - return S_OK; - } - CATCH_RETURN() -} diff --git a/src/AppInstallerSQLiteIndexUtil/Source.def b/src/AppInstallerSQLiteIndexUtil/Source.def @@ -1,12 +0,0 @@ -LIBRARY AppInstallerSQLiteIndexUtil -EXPORTS - AppInstallerLoggingInit - AppInstallerLoggingTerm - AppInstallerSQLiteIndexCreate - AppInstallerSQLiteIndexOpen - AppInstallerSQLiteIndexClose - AppInstallerSQLiteIndexAddManifest - AppInstallerSQLiteIndexUpdateManifest - AppInstallerSQLiteIndexRemoveManifest - AppInstallerSQLiteIndexPrepareForPackaging - AppInstallerValidateManifest diff --git a/src/AppInstallerSQLiteIndexUtil/pch.h b/src/AppInstallerSQLiteIndexUtil/pch.h @@ -1,22 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -#pragma once - -#define NOMINMAX -#include <Windows.h> - -#include <yaml-cpp/yaml.h> - -#include <Public/AppInstallerFileLogger.h> -#include <Public/AppInstallerStrings.h> -#include <Public/AppInstallerLogging.h> -#include <Public/AppInstallerTelemetry.h> -#include <Microsoft/SQLiteIndex.h> -#include <Manifest/Manifest.h> - -#include <wil/result_macros.h> - -#include <filesystem> -#include <memory> -#include <mutex> -#include <string>- \ No newline at end of file diff --git a/src/WinGetUtil/Exports.cpp b/src/WinGetUtil/Exports.cpp @@ -0,0 +1,215 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +#include "pch.h" +#include "WinGetUtil.h" + +#include <AppInstallerDownloader.h> +#include <AppInstallerFileLogger.h> +#include <AppInstallerLogging.h> +#include <AppInstallerStrings.h> +#include <AppInstallerTelemetry.h> +#include <Manifest/Manifest.h> +#include <Microsoft/SQLiteIndex.h> + +using namespace AppInstaller::Utility; +using namespace AppInstaller::Manifest; +using namespace AppInstaller::Repository::Microsoft; + +extern "C" +{ + WINGET_UTIL_API WinGetLoggingInit(WINGET_STRING logPath) try + { + THROW_HR_IF(E_INVALIDARG, !logPath); + + static std::once_flag s_initLogging; + std::call_once(s_initLogging, []() { + // Enable all logs for now. + AppInstaller::Logging::Log().EnableChannel(AppInstaller::Logging::Channel::All); + AppInstaller::Logging::Log().SetLevel(AppInstaller::Logging::Level::Verbose); + AppInstaller::Logging::EnableWilFailureTelemetry(); + }); + + std::filesystem::path pathAsPath = logPath; + std::string loggerName = AppInstaller::Logging::FileLogger::GetNameForPath(pathAsPath); + + if (!AppInstaller::Logging::Log().ContainsLogger(loggerName)) + { + AppInstaller::Logging::AddFileLogger(pathAsPath); + } + + return S_OK; + } + CATCH_RETURN() + + WINGET_UTIL_API WinGetLoggingTerm(WINGET_STRING logPath) try + { + if (logPath) + { + std::string loggerName = AppInstaller::Logging::FileLogger::GetNameForPath(logPath); + (void)AppInstaller::Logging::Log().RemoveLogger(loggerName); + } + else + { + AppInstaller::Logging::Log().RemoveAllLoggers(); + } + + return S_OK; + } + CATCH_RETURN() + + WINGET_UTIL_API WinGetSQLiteIndexCreate(WINGET_STRING filePath, UINT32 majorVersion, UINT32 minorVersion, WINGET_SQLITE_INDEX_HANDLE* index) try + { + THROW_HR_IF(E_INVALIDARG, !filePath); + THROW_HR_IF(E_INVALIDARG, !index); + THROW_HR_IF(E_INVALIDARG, !!*index); + + std::string filePathUtf8 = ConvertToUTF8(filePath); + Schema::Version internalVersion{ majorVersion, minorVersion }; + + std::unique_ptr<SQLiteIndex> result = std::make_unique<SQLiteIndex>(SQLiteIndex::CreateNew(filePathUtf8, internalVersion)); + + *index = static_cast<WINGET_SQLITE_INDEX_HANDLE>(result.release()); + + return S_OK; + } + CATCH_RETURN() + + WINGET_UTIL_API WinGetSQLiteIndexOpen(WINGET_STRING filePath, WINGET_SQLITE_INDEX_HANDLE* index) try + { + THROW_HR_IF(E_INVALIDARG, !filePath); + THROW_HR_IF(E_INVALIDARG, !index); + THROW_HR_IF(E_INVALIDARG, !!*index); + + std::string filePathUtf8 = ConvertToUTF8(filePath); + + std::unique_ptr<SQLiteIndex> result = std::make_unique<SQLiteIndex>(SQLiteIndex::Open(filePathUtf8, SQLiteIndex::OpenDisposition::ReadWrite)); + + *index = static_cast<WINGET_SQLITE_INDEX_HANDLE>(result.release()); + + return S_OK; + } + CATCH_RETURN() + + WINGET_UTIL_API WinGetSQLiteIndexClose(WINGET_SQLITE_INDEX_HANDLE index) try + { + std::unique_ptr<SQLiteIndex> toClose(reinterpret_cast<SQLiteIndex*>(index)); + + return S_OK; + } + CATCH_RETURN() + + WINGET_UTIL_API WinGetSQLiteIndexAddManifest( + WINGET_SQLITE_INDEX_HANDLE index, + WINGET_STRING manifestPath, WINGET_STRING relativePath) try + { + THROW_HR_IF(E_INVALIDARG, !index); + THROW_HR_IF(E_INVALIDARG, !manifestPath); + THROW_HR_IF(E_INVALIDARG, !relativePath); + + reinterpret_cast<SQLiteIndex*>(index)->AddManifest(manifestPath, relativePath); + + return S_OK; + } + CATCH_RETURN() + + WINGET_UTIL_API WinGetSQLiteIndexUpdateManifest( + WINGET_SQLITE_INDEX_HANDLE index, + WINGET_STRING manifestPath, + WINGET_STRING relativePath, + BOOL* indexModified) try + { + THROW_HR_IF(E_INVALIDARG, !index); + THROW_HR_IF(E_INVALIDARG, !manifestPath); + THROW_HR_IF(E_INVALIDARG, !relativePath); + + bool result = reinterpret_cast<SQLiteIndex*>(index)->UpdateManifest(manifestPath, relativePath); + if (indexModified) + { + *indexModified = (result ? TRUE : FALSE); + } + + return S_OK; + } + CATCH_RETURN() + + WINGET_UTIL_API WinGetSQLiteIndexRemoveManifest( + WINGET_SQLITE_INDEX_HANDLE index, + WINGET_STRING manifestPath, WINGET_STRING relativePath) try + { + THROW_HR_IF(E_INVALIDARG, !index); + THROW_HR_IF(E_INVALIDARG, !manifestPath); + THROW_HR_IF(E_INVALIDARG, !relativePath); + + reinterpret_cast<SQLiteIndex*>(index)->RemoveManifest(manifestPath, relativePath); + + return S_OK; + } + CATCH_RETURN() + + WINGET_UTIL_API WinGetSQLiteIndexPrepareForPackaging( + WINGET_SQLITE_INDEX_HANDLE index) try + { + THROW_HR_IF(E_INVALIDARG, !index); + + reinterpret_cast<SQLiteIndex*>(index)->PrepareForPackaging(); + + return S_OK; + } + CATCH_RETURN() + + WINGET_UTIL_API WinGetValidateManifest( + WINGET_STRING manifestPath, + BOOL* succeeded, + WINGET_STRING_OUT* failureMessage) try + { + THROW_HR_IF(E_INVALIDARG, !manifestPath); + THROW_HR_IF(E_INVALIDARG, !succeeded); + + try + { + (void)Manifest::CreateFromPath(manifestPath, true); + *succeeded = TRUE; + } + catch (const ManifestException& e) + { + *succeeded = FALSE; + if (failureMessage) + { + *failureMessage = ::SysAllocString(ConvertToUTF16(e.GetManifestErrorMessage()).c_str()); + } + } + + return S_OK; + } + CATCH_RETURN() + + WINGET_UTIL_API WinGetDownload( + WINGET_STRING url, + WINGET_STRING filePath, + BYTE* sha256Hash, + UINT32 sha256HashLength) try + { + THROW_HR_IF(E_INVALIDARG, !url); + THROW_HR_IF(E_INVALIDARG, !filePath); + + bool computeHash = sha256Hash != nullptr && sha256HashLength != 0; + THROW_HR_IF(E_INVALIDARG, !computeHash && (sha256Hash != nullptr || sha256HashLength != 0)); + THROW_HR_IF(E_INVALIDARG, computeHash && sha256HashLength != 32); + + AppInstaller::ProgressCallback callback; + auto hashValue = Download(ConvertToUTF8(url), filePath, callback, computeHash); + + // At this point, if computeHash is set we have verified that the buffer is valid and 32 bytes. + if (computeHash) + { + const auto& hash = hashValue.value(); + + // The SHA 256 hash length should always be 32 bytes. + THROW_HR_IF(E_UNEXPECTED, hash.size() != sha256HashLength); + std::copy(hash.begin(), hash.end(), sha256Hash); + } + + return S_OK; + } + CATCH_RETURN() +} diff --git a/src/AppInstallerSQLiteIndexUtil/PropertySheet.props b/src/WinGetUtil/PropertySheet.props diff --git a/src/WinGetUtil/Source.def b/src/WinGetUtil/Source.def @@ -0,0 +1,13 @@ +LIBRARY WinGetUtil +EXPORTS + WinGetLoggingInit + WinGetLoggingTerm + WinGetSQLiteIndexCreate + WinGetSQLiteIndexOpen + WinGetSQLiteIndexClose + WinGetSQLiteIndexAddManifest + WinGetSQLiteIndexUpdateManifest + WinGetSQLiteIndexRemoveManifest + WinGetSQLiteIndexPrepareForPackaging + WinGetValidateManifest + WinGetDownload diff --git a/src/WinGetUtil/WinGetUtil.h b/src/WinGetUtil/WinGetUtil.h @@ -0,0 +1,84 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +#pragma once + +extern "C" +{ + // A handle to the index. + typedef void* WINGET_SQLITE_INDEX_HANDLE; + + // A string taken in by the utility; in UTF16. + typedef wchar_t const* const WINGET_STRING; + + // A string returned by the utility; in UTF16. + typedef BSTR WINGET_STRING_OUT; + +#define WINGET_UTIL_API HRESULT __stdcall + +#define WINGET_SQLITE_INDEX_VERSION_LATEST ((UINT32)-1) + + // Initializes the logging infrastructure. + WINGET_UTIL_API WinGetLoggingInit( + WINGET_STRING logPath); + + // Removes the given log file from the logging infrastructure. + // If logPath is nullptr, then remove all loggers. + WINGET_UTIL_API WinGetLoggingTerm( + WINGET_STRING logPath); + + // Creates a new index file at filePath with the given version. + WINGET_UTIL_API WinGetSQLiteIndexCreate( + WINGET_STRING filePath, + UINT32 majorVersion, + UINT32 minorVersion, + WINGET_SQLITE_INDEX_HANDLE* index); + + // Opens an existing index at filePath. + WINGET_UTIL_API WinGetSQLiteIndexOpen( + WINGET_STRING filePath, + WINGET_SQLITE_INDEX_HANDLE* index); + + // Closes the index. + WINGET_UTIL_API WinGetSQLiteIndexClose( + WINGET_SQLITE_INDEX_HANDLE index); + + // Adds the manifest at the repository relative path to the index. + // If the function succeeds, the manifest has been added. + WINGET_UTIL_API WinGetSQLiteIndexAddManifest( + WINGET_SQLITE_INDEX_HANDLE index, + WINGET_STRING manifestPath, + WINGET_STRING relativePath); + + // Updates the manifest with matching { Id, Version, Channel } in the index. + // The return value indicates whether the index was modified by the function. + WINGET_UTIL_API WinGetSQLiteIndexUpdateManifest( + WINGET_SQLITE_INDEX_HANDLE index, + WINGET_STRING manifestPath, + WINGET_STRING relativePath, + BOOL* indexModified); + + // Removes the manifest with matching { Id, Version, Channel } from the index. + // Path is currently ignored. + WINGET_UTIL_API WinGetSQLiteIndexRemoveManifest( + WINGET_SQLITE_INDEX_HANDLE index, + WINGET_STRING manifestPath, + WINGET_STRING relativePath); + + // Removes data that is no longer needed for an index that is to be published. + WINGET_UTIL_API WinGetSQLiteIndexPrepareForPackaging( + WINGET_SQLITE_INDEX_HANDLE index); + + // Validates a given manifest. Returns a bool for validation result and + // a string representing validation errors if validation failed. + WINGET_UTIL_API WinGetValidateManifest( + WINGET_STRING manifestPath, + BOOL* succeeded, + WINGET_STRING_OUT* failureMessage); + + // Downloads a file to the given path, returning the SHA 256 hash of the file. + WINGET_UTIL_API WinGetDownload( + WINGET_STRING url, + WINGET_STRING filePath, + BYTE* sha256Hash, + UINT32 sha256HashLength); +} diff --git a/src/WinGetUtil/WinGetUtil.vcxproj b/src/WinGetUtil/WinGetUtil.vcxproj @@ -0,0 +1,255 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.191111.2\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.191111.2\build\native\Microsoft.Windows.CppWinRT.props')" /> + <PropertyGroup Label="Globals"> + <CppWinRTOptimized>true</CppWinRTOptimized> + <CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge> + <MinimalCoreWin>true</MinimalCoreWin> + <VCProjectVersion>15.0</VCProjectVersion> + <ProjectGuid>{FB313532-38B0-4676-9303-AB200AA13576}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + <RootNamespace>WinGetUtil</RootNamespace> + <WindowsTargetPlatformVersion Condition=" '$(WindowsTargetPlatformVersion)' == '' ">10.0.18362.0</WindowsTargetPlatformVersion> + <WindowsTargetPlatformMinVersion>10.0.16299.0</WindowsTargetPlatformMinVersion> + <WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport> + <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|ARM"> + <Configuration>Debug</Configuration> + <Platform>ARM</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|ARM64"> + <Configuration>Debug</Configuration> + <Platform>ARM64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|ARM"> + <Configuration>Release</Configuration> + <Platform>ARM</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|ARM64"> + <Configuration>Release</Configuration> + <Platform>ARM64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <PlatformToolset>v140</PlatformToolset> + <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset> + <PlatformToolset Condition="'$(VisualStudioVersion)' == '16.0'">v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration"> + <UseDebugLibraries>true</UseDebugLibraries> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration"> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <LinkIncremental>false</LinkIncremental> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + <Import Project="..\binver\binver.vcxitems" Label="Shared" /> + </ImportGroup> + <ImportGroup Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets"> + <Import Project="PropertySheet.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>$(SolutionDir)x86\$(Configuration)\$(ProjectName)\</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>$(SolutionDir)x86\$(Configuration)\$(ProjectName)\</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\</OutDir> + </PropertyGroup> + <ItemDefinitionGroup> + <ClCompile> + <PrecompiledHeader>Use</PrecompiledHeader> + <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> + <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile> + <PreprocessorDefinitions>_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <WarningLevel>Level4</WarningLevel> + <AdditionalOptions>%(AdditionalOptions) /permissive- /bigobj /D _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING</AdditionalOptions> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD</PreprocessorDefinitions> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">$(ProjectDir);$(ProjectDir)..\AppInstallerCommonCore;$(ProjectDir)..\AppInstallerRepositoryCore;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\YamlCppLib\yaml-cpp\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">$(ProjectDir);$(ProjectDir)..\AppInstallerCommonCore;$(ProjectDir)..\AppInstallerRepositoryCore;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\YamlCppLib\yaml-cpp\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir);$(ProjectDir)..\AppInstallerCommonCore;$(ProjectDir)..\AppInstallerRepositoryCore;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\YamlCppLib\yaml-cpp\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</TreatWarningAsError> + <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">true</TreatWarningAsError> + <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</TreatWarningAsError> + </ClCompile> + <Link> + <GenerateWindowsMetadata>false</GenerateWindowsMetadata> + <SubSystem Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">Windows</SubSystem> + <SubSystem Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">Windows</SubSystem> + <SubSystem Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Windows</SubSystem> + <ModuleDefinitionFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Source.def</ModuleDefinitionFile> + <ModuleDefinitionFile Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">Source.def</ModuleDefinitionFile> + <ModuleDefinitionFile Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">Source.def</ModuleDefinitionFile> + <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + <Manifest> + <AdditionalManifestFiles Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">$(ProjectDir)..\manifest\shared.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles> + </Manifest> + <Manifest> + <AdditionalManifestFiles Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">$(ProjectDir)..\manifest\shared.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles> + </Manifest> + <Manifest> + <AdditionalManifestFiles Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)..\manifest\shared.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles> + </Manifest> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Platform)'=='Win32'"> + <ClCompile> + <PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions);CLICOREDLLBUILD</PreprocessorDefinitions> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir);$(ProjectDir)..\AppInstallerCommonCore;$(ProjectDir)..\AppInstallerRepositoryCore;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\YamlCppLib\yaml-cpp\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</TreatWarningAsError> + </ClCompile> + <Link> + <SubSystem Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Windows</SubSystem> + <ModuleDefinitionFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Source.def</ModuleDefinitionFile> + <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + <Manifest> + <AdditionalManifestFiles Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)..\manifest\shared.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles> + </Manifest> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'"> + <ClCompile> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD</PreprocessorDefinitions> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">$(ProjectDir);$(ProjectDir)..\AppInstallerCommonCore;$(ProjectDir)..\AppInstallerRepositoryCore;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\YamlCppLib\yaml-cpp\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">$(ProjectDir);$(ProjectDir)..\AppInstallerCommonCore;$(ProjectDir)..\AppInstallerRepositoryCore;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\YamlCppLib\yaml-cpp\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir);$(ProjectDir)..\AppInstallerCommonCore;$(ProjectDir)..\AppInstallerRepositoryCore;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\YamlCppLib\yaml-cpp\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir);$(ProjectDir)..\AppInstallerCommonCore;$(ProjectDir)..\AppInstallerRepositoryCore;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\YamlCppLib\yaml-cpp\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</TreatWarningAsError> + <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">true</TreatWarningAsError> + <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</TreatWarningAsError> + <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</TreatWarningAsError> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <GenerateWindowsMetadata>false</GenerateWindowsMetadata> + <SubSystem Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">Windows</SubSystem> + <SubSystem Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">Windows</SubSystem> + <SubSystem Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Windows</SubSystem> + <SubSystem Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Windows</SubSystem> + <ModuleDefinitionFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Source.def</ModuleDefinitionFile> + <ModuleDefinitionFile Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">Source.def</ModuleDefinitionFile> + <ModuleDefinitionFile Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">Source.def</ModuleDefinitionFile> + <ModuleDefinitionFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Source.def</ModuleDefinitionFile> + <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|x64'">wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + <Manifest> + <AdditionalManifestFiles Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">$(ProjectDir)..\manifest\shared.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles> + </Manifest> + <Manifest> + <AdditionalManifestFiles Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">$(ProjectDir)..\manifest\shared.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles> + </Manifest> + <Manifest> + <AdditionalManifestFiles Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)..\manifest\shared.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles> + </Manifest> + <Manifest> + <AdditionalManifestFiles Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)..\manifest\shared.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles> + </Manifest> + </ItemDefinitionGroup> + <ItemGroup> + <ClInclude Include="WinGetUtil.h" /> + <ClInclude Include="pch.h" /> + </ItemGroup> + <ItemGroup> + <ClCompile Include="Exports.cpp" /> + <ClCompile Include="pch.cpp"> + <PrecompiledHeader>Create</PrecompiledHeader> + </ClCompile> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + <None Include="PropertySheet.props" /> + <None Include="Source.def" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\AppInstallerCommonCore\AppInstallerCommonCore.vcxproj"> + <Project>{5890d6ed-7c3b-40f3-b436-b54f640d9e65}</Project> + </ProjectReference> + <ProjectReference Include="..\AppInstallerRepositoryCore\AppInstallerRepositoryCore.vcxproj"> + <Project>{5eb88068-5fb9-4e69-89b2-72dbc5e068f9}</Project> + </ProjectReference> + <ProjectReference Include="..\YamlCppLib\YamlCppLib.vcxproj"> + <Project>{8bb94bb8-374f-4294-bca1-c7811514a6b7}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + <Import Project="$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.191111.2\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.191111.2\build\native\Microsoft.Windows.CppWinRT.targets')" /> + <Import Project="$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.191107.2\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.191107.2\build\native\Microsoft.Windows.ImplementationLibrary.targets')" /> + </ImportGroup> + <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('$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.191111.2\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.191111.2\build\native\Microsoft.Windows.CppWinRT.props'))" /> + <Error Condition="!Exists('$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.191111.2\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.191111.2\build\native\Microsoft.Windows.CppWinRT.targets'))" /> + <Error Condition="!Exists('$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.191107.2\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.191107.2\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" /> + </Target> +</Project>+ \ No newline at end of file diff --git a/src/WinGetUtil/WinGetUtil.vcxproj.filters b/src/WinGetUtil/WinGetUtil.vcxproj.filters @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="Source Files"> + <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> + <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> + </Filter> + <Filter Include="Header Files"> + <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> + <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions> + </Filter> + <Filter Include="Resource Files"> + <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> + <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + </Filter> + </ItemGroup> + <ItemGroup> + <ClInclude Include="pch.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="WinGetUtil.h"> + <Filter>Header Files</Filter> + </ClInclude> + </ItemGroup> + <ItemGroup> + <ClCompile Include="pch.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="Exports.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <None Include="PropertySheet.props" /> + <None Include="packages.config" /> + <None Include="Source.def"> + <Filter>Source Files</Filter> + </None> + </ItemGroup> +</Project>+ \ No newline at end of file diff --git a/src/AppInstallerSQLiteIndexUtil/packages.config b/src/WinGetUtil/packages.config diff --git a/src/AppInstallerSQLiteIndexUtil/pch.cpp b/src/WinGetUtil/pch.cpp diff --git a/src/WinGetUtil/pch.h b/src/WinGetUtil/pch.h @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +#pragma once + +#define NOMINMAX +#include <Windows.h> + +#include <yaml-cpp/yaml.h> + +#include <wil/result_macros.h> + +#include <algorithm> +#include <filesystem> +#include <memory> +#include <mutex> +#include <string>