From c7d9a92de78d635316ffacc8ee6c617005452382 Mon Sep 17 00:00:00 2001 From: Matthijs Lavrijsen Date: Tue, 9 Feb 2021 10:25:00 +0100 Subject: [PATCH 01/12] Add ARM64 build configurations to projects --- .gitignore | 3 + Src/ClassicExplorer/ClassicExplorer.vcxproj | 178 ++++++++++++++++++ .../ClassicExplorer.vcxproj.filters | 5 +- Src/ClassicExplorer/ClassicExplorerARM64.def | 13 ++ Src/Lib/Lib.vcxproj | 64 +++++++ Src/OpenShell.sln | 150 +++++++++++++++ Src/Setup/Utility/Utility.vcxproj | 85 +++++++++ Src/StartMenu/StartMenu.vcxproj | 130 +++++++++++++ .../StartMenuDLL/StartMenuDLL.vcxproj | 136 +++++++++++++ .../StartMenuHelper/StartMenuHelper.vcxproj | 171 +++++++++++++++++ .../StartMenuHelper/StartMenuHelperARM64.def | 10 + 11 files changed, 944 insertions(+), 1 deletion(-) create mode 100644 Src/ClassicExplorer/ClassicExplorerARM64.def create mode 100644 Src/StartMenu/StartMenuHelper/StartMenuHelperARM64.def diff --git a/.gitignore b/.gitignore index 363b43464..b74cf84ed 100644 --- a/.gitignore +++ b/.gitignore @@ -20,12 +20,15 @@ # Build results [Dd]ebug/ [Dd]ebug64/ +[Dd]ebugARM64/ [Dd]ebugPublic/ [Rr]elease/ [Rr]elease64/ +[Rr]eleaseARM64/ [Rr]eleases/ x64/ x86/ +ARM64/ bld/ [Bb]in/ [Oo]bj/ diff --git a/Src/ClassicExplorer/ClassicExplorer.vcxproj b/Src/ClassicExplorer/ClassicExplorer.vcxproj index d53ba9d65..c001472e7 100644 --- a/Src/ClassicExplorer/ClassicExplorer.vcxproj +++ b/Src/ClassicExplorer/ClassicExplorer.vcxproj @@ -1,6 +1,10 @@ + + Debug + ARM64 + Debug Win32 @@ -9,6 +13,10 @@ Debug x64 + + Release + ARM64 + Release Win32 @@ -17,6 +25,10 @@ Release x64 + + Setup + ARM64 + Setup Win32 @@ -60,6 +72,13 @@ Unicode true + + DynamicLibrary + v142 + Static + Unicode + true + DynamicLibrary v142 @@ -67,12 +86,25 @@ Unicode true + + DynamicLibrary + v142 + Static + Unicode + true + DynamicLibrary v142 Static Unicode + + DynamicLibrary + v142 + Static + Unicode + @@ -92,14 +124,26 @@ + + + + + + + + + + + + $(Configuration)\ @@ -115,6 +159,13 @@ true $(ProjectName)64 + + true + true + $(ProjectName)ARM64 + $(Configuration)ARM64\ + $(Configuration)ARM64\ + $(Configuration)\ $(Configuration)\ @@ -129,6 +180,13 @@ false $(ProjectName)64 + + true + false + $(ProjectName)ARM64 + $(Configuration)ARM64\ + $(Configuration)ARM64\ + $(Configuration)\ $(Configuration)\ @@ -143,6 +201,13 @@ false $(ProjectName)64 + + true + false + $(ProjectName)ARM64 + $(Configuration)ARM64\ + $(Configuration)ARM64\ + _DEBUG;%(PreprocessorDefinitions) @@ -216,6 +281,43 @@ true + + + _DEBUG;%(PreprocessorDefinitions) + false + true + ClassicExplorer_i.h + + + ClassicExplorer_i.c + ClassicExplorer_p.c + + + Disabled + ..\Lib;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;_DEBUG;_USRDLL;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Use + Level3 + ProgramDatabase + true + true + stdcpp17 + + + _DEBUG;%(PreprocessorDefinitions) + $(IntDir);..\Lib;%(AdditionalIncludeDirectories) + + + true + oleacc.lib;comctl32.lib;uxtheme.lib;dwmapi.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;Netapi32.lib;%(AdditionalDependencies) + .\$(TargetName).def + true + Windows + true + + NDEBUG;%(PreprocessorDefinitions) @@ -291,6 +393,44 @@ true + + + NDEBUG;%(PreprocessorDefinitions) + false + true + ClassicExplorer_i.h + + + ClassicExplorer_i.c + ClassicExplorer_p.c + + + MaxSpeed + ..\Lib;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;NDEBUG;_USRDLL;%(PreprocessorDefinitions) + MultiThreaded + Use + Level3 + ProgramDatabase + true + true + stdcpp17 + + + NDEBUG;%(PreprocessorDefinitions) + $(IntDir);..\Lib;%(AdditionalIncludeDirectories) + + + true + oleacc.lib;comctl32.lib;uxtheme.lib;dwmapi.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;Netapi32.lib;%(AdditionalDependencies) + .\$(TargetName).def + true + Windows + true + true + true + + NDEBUG;%(PreprocessorDefinitions) @@ -364,6 +504,43 @@ true + + + NDEBUG;%(PreprocessorDefinitions) + false + true + ClassicExplorer_i.h + + + ClassicExplorer_i.c + ClassicExplorer_p.c + + + MaxSpeed + ..\Lib;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;NDEBUG;_USRDLL;BUILD_SETUP;%(PreprocessorDefinitions) + MultiThreaded + Use + Level3 + true + ProgramDatabase + true + true + stdcpp17 + + + NDEBUG;%(PreprocessorDefinitions) + $(IntDir);..\Lib;%(AdditionalIncludeDirectories) + + + oleacc.lib;comctl32.lib;uxtheme.lib;dwmapi.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;Netapi32.lib;%(AdditionalDependencies) + .\$(TargetName).def + true + Windows + true + true + + @@ -388,6 +565,7 @@ + diff --git a/Src/ClassicExplorer/ClassicExplorer.vcxproj.filters b/Src/ClassicExplorer/ClassicExplorer.vcxproj.filters index b6c1eadd8..dbfd18a79 100644 --- a/Src/ClassicExplorer/ClassicExplorer.vcxproj.filters +++ b/Src/ClassicExplorer/ClassicExplorer.vcxproj.filters @@ -80,6 +80,9 @@ Resource Files + + Source Files + @@ -146,4 +149,4 @@ Resource Files - + \ No newline at end of file diff --git a/Src/ClassicExplorer/ClassicExplorerARM64.def b/Src/ClassicExplorer/ClassicExplorerARM64.def new file mode 100644 index 000000000..5b878efbb --- /dev/null +++ b/Src/ClassicExplorer/ClassicExplorerARM64.def @@ -0,0 +1,13 @@ +; ClassicExplorer.def : Declares the module parameters. + +LIBRARY "ClassicExplorerARM64.DLL" + +EXPORTS + DllCanUnloadNow PRIVATE + DllGetClassObject PRIVATE + DllRegisterServer PRIVATE + DllUnregisterServer PRIVATE + DllInstall PRIVATE + ShowExplorerSettings + DllImportSettingsXml + DllExportSettingsXml diff --git a/Src/Lib/Lib.vcxproj b/Src/Lib/Lib.vcxproj index ac8a4d84a..641a7924b 100644 --- a/Src/Lib/Lib.vcxproj +++ b/Src/Lib/Lib.vcxproj @@ -1,6 +1,10 @@ + + Debug + ARM64 + Debug Win32 @@ -9,6 +13,10 @@ Debug x64 + + Release + ARM64 + Release Win32 @@ -45,12 +53,25 @@ Unicode true + + StaticLibrary + v142 + Static + Unicode + true + StaticLibrary v142 Static Unicode + + StaticLibrary + v142 + Static + Unicode + @@ -63,9 +84,15 @@ + + + + + + $(Configuration)\ @@ -75,6 +102,10 @@ $(Configuration)64\ $(Configuration)64\ + + $(Configuration)ARM64\ + $(Configuration)ARM64\ + $(Configuration)\ $(Configuration)\ @@ -83,6 +114,10 @@ $(Configuration)64\ $(Configuration)64\ + + $(Configuration)ARM64\ + $(Configuration)ARM64\ + APPVEYOR_REPO_COMMIT="$(APPVEYOR_REPO_COMMIT)";%(PreprocessorDefinitions) @@ -116,6 +151,20 @@ stdcpp17 + + + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Use + Level3 + ProgramDatabase + true + true + stdcpp17 + + MaxSpeed @@ -149,6 +198,21 @@ stdcpp17 + + + MaxSpeed + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + MultiThreaded + true + Use + Level3 + true + ProgramDatabase + true + true + stdcpp17 + + diff --git a/Src/OpenShell.sln b/Src/OpenShell.sln index 320903968..8049581e6 100644 --- a/Src/OpenShell.sln +++ b/Src/OpenShell.sln @@ -70,321 +70,471 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DesktopToasts", "Update\Des EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM64 = Debug|ARM64 Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 + Release|ARM64 = Release|ARM64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 + Setup|ARM64 = Setup|ARM64 Setup|Win32 = Setup|Win32 Setup|x64 = Setup|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Debug|ARM64.Build.0 = Debug|ARM64 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Debug|Win32.ActiveCfg = Debug|Win32 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Debug|Win32.Build.0 = Debug|Win32 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Debug|x64.ActiveCfg = Debug|x64 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Debug|x64.Build.0 = Debug|x64 + {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Release|ARM64.ActiveCfg = Release|ARM64 + {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Release|ARM64.Build.0 = Release|ARM64 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Release|Win32.ActiveCfg = Release|Win32 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Release|Win32.Build.0 = Release|Win32 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Release|x64.ActiveCfg = Release|x64 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Release|x64.Build.0 = Release|x64 + {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Setup|ARM64.ActiveCfg = Setup|ARM64 + {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Setup|ARM64.Build.0 = Setup|ARM64 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Setup|Win32.ActiveCfg = Setup|Win32 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Setup|Win32.Build.0 = Setup|Win32 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Setup|x64.ActiveCfg = Setup|x64 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Setup|x64.Build.0 = Setup|x64 + {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Debug|ARM64.Build.0 = Debug|ARM64 + {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Debug|ARM64.Deploy.0 = Debug|ARM64 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Debug|Win32.ActiveCfg = Debug|Win32 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Debug|Win32.Build.0 = Debug|Win32 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Debug|x64.ActiveCfg = Debug|x64 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Debug|x64.Build.0 = Debug|x64 + {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Release|ARM64.ActiveCfg = Release|ARM64 + {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Release|ARM64.Build.0 = Release|ARM64 + {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Release|ARM64.Deploy.0 = Release|ARM64 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Release|Win32.ActiveCfg = Release|Win32 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Release|Win32.Build.0 = Release|Win32 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Release|x64.ActiveCfg = Release|x64 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Release|x64.Build.0 = Release|x64 + {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Setup|ARM64.ActiveCfg = Setup|ARM64 + {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Setup|ARM64.Build.0 = Setup|ARM64 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Setup|Win32.ActiveCfg = Setup|Win32 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Setup|Win32.Build.0 = Setup|Win32 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Setup|x64.ActiveCfg = Setup|x64 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Setup|x64.Build.0 = Setup|x64 + {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Debug|ARM64.Build.0 = Debug|ARM64 + {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Debug|ARM64.Deploy.0 = Debug|ARM64 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Debug|Win32.ActiveCfg = Debug|Win32 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Debug|Win32.Build.0 = Debug|Win32 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Debug|x64.ActiveCfg = Debug|x64 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Debug|x64.Build.0 = Debug|x64 + {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Release|ARM64.ActiveCfg = Release|ARM64 + {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Release|ARM64.Build.0 = Release|ARM64 + {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Release|ARM64.Deploy.0 = Release|ARM64 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Release|Win32.ActiveCfg = Release|Win32 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Release|Win32.Build.0 = Release|Win32 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Release|x64.ActiveCfg = Release|x64 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Release|x64.Build.0 = Release|x64 + {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Setup|ARM64.ActiveCfg = Setup|ARM64 + {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Setup|ARM64.Build.0 = Setup|ARM64 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Setup|Win32.ActiveCfg = Setup|Win32 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Setup|Win32.Build.0 = Setup|Win32 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Setup|x64.ActiveCfg = Setup|x64 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Setup|x64.Build.0 = Setup|x64 + {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|ARM64.ActiveCfg = Debug|Win32 + {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|ARM64.Build.0 = Debug|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|Win32.ActiveCfg = Debug|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|Win32.Build.0 = Debug|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|x64.ActiveCfg = Debug|Win32 + {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|x64.Build.0 = Debug|Win32 + {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|ARM64.ActiveCfg = Release|Win32 + {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|ARM64.Build.0 = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|Win32.ActiveCfg = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|Win32.Build.0 = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|x64.ActiveCfg = Release|Win32 + {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|x64.Build.0 = Release|Win32 + {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Setup|ARM64.ActiveCfg = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Setup|Win32.ActiveCfg = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Setup|x64.ActiveCfg = Release|Win32 + {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Debug|ARM64.ActiveCfg = Resource|Win32 + {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Debug|ARM64.Build.0 = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Debug|Win32.ActiveCfg = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Debug|Win32.Build.0 = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Debug|x64.ActiveCfg = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Debug|x64.Build.0 = Resource|Win32 + {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Release|ARM64.ActiveCfg = Resource|Win32 + {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Release|ARM64.Build.0 = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Release|Win32.ActiveCfg = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Release|Win32.Build.0 = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Release|x64.ActiveCfg = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Release|x64.Build.0 = Resource|Win32 + {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Setup|ARM64.ActiveCfg = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Setup|Win32.ActiveCfg = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Setup|Win32.Build.0 = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Setup|x64.ActiveCfg = Resource|Win32 + {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Debug|ARM64.ActiveCfg = Resource|Win32 + {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Debug|ARM64.Build.0 = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Debug|Win32.ActiveCfg = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Debug|Win32.Build.0 = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Debug|x64.ActiveCfg = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Debug|x64.Build.0 = Resource|Win32 + {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Release|ARM64.ActiveCfg = Resource|Win32 + {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Release|ARM64.Build.0 = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Release|Win32.ActiveCfg = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Release|Win32.Build.0 = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Release|x64.ActiveCfg = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Release|x64.Build.0 = Resource|Win32 + {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Setup|ARM64.ActiveCfg = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Setup|Win32.ActiveCfg = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Setup|Win32.Build.0 = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Setup|x64.ActiveCfg = Resource|Win32 + {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Debug|ARM64.ActiveCfg = Resource|Win32 + {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Debug|ARM64.Build.0 = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Debug|Win32.ActiveCfg = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Debug|Win32.Build.0 = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Debug|x64.ActiveCfg = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Debug|x64.Build.0 = Resource|Win32 + {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Release|ARM64.ActiveCfg = Resource|Win32 + {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Release|ARM64.Build.0 = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Release|Win32.ActiveCfg = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Release|Win32.Build.0 = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Release|x64.ActiveCfg = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Release|x64.Build.0 = Resource|Win32 + {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Setup|ARM64.ActiveCfg = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Setup|Win32.ActiveCfg = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Setup|Win32.Build.0 = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Setup|x64.ActiveCfg = Resource|Win32 + {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Debug|ARM64.ActiveCfg = Resource|Win32 + {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Debug|ARM64.Build.0 = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Debug|Win32.ActiveCfg = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Debug|Win32.Build.0 = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Debug|x64.ActiveCfg = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Debug|x64.Build.0 = Resource|Win32 + {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Release|ARM64.ActiveCfg = Resource|Win32 + {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Release|ARM64.Build.0 = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Release|Win32.ActiveCfg = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Release|Win32.Build.0 = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Release|x64.ActiveCfg = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Release|x64.Build.0 = Resource|Win32 + {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Setup|ARM64.ActiveCfg = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Setup|Win32.ActiveCfg = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Setup|Win32.Build.0 = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Setup|x64.ActiveCfg = Resource|Win32 + {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Debug|ARM64.ActiveCfg = Resource|Win32 + {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Debug|ARM64.Build.0 = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Debug|Win32.ActiveCfg = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Debug|Win32.Build.0 = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Debug|x64.ActiveCfg = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Debug|x64.Build.0 = Resource|Win32 + {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Release|ARM64.ActiveCfg = Resource|Win32 + {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Release|ARM64.Build.0 = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Release|Win32.ActiveCfg = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Release|Win32.Build.0 = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Release|x64.ActiveCfg = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Release|x64.Build.0 = Resource|Win32 + {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Setup|ARM64.ActiveCfg = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Setup|Win32.ActiveCfg = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Setup|Win32.Build.0 = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Setup|x64.ActiveCfg = Resource|Win32 + {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Debug|ARM64.ActiveCfg = Resource|Win32 + {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Debug|ARM64.Build.0 = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Debug|Win32.ActiveCfg = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Debug|Win32.Build.0 = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Debug|x64.ActiveCfg = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Debug|x64.Build.0 = Resource|Win32 + {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Release|ARM64.ActiveCfg = Resource|Win32 + {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Release|ARM64.Build.0 = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Release|Win32.ActiveCfg = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Release|Win32.Build.0 = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Release|x64.ActiveCfg = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Release|x64.Build.0 = Resource|Win32 + {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Setup|ARM64.ActiveCfg = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Setup|Win32.ActiveCfg = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Setup|Win32.Build.0 = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Setup|x64.ActiveCfg = Resource|Win32 + {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Debug|ARM64.ActiveCfg = Debug|Win32 {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Debug|Win32.ActiveCfg = Debug|Win32 {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Debug|Win32.Build.0 = Debug|Win32 {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Debug|x64.ActiveCfg = Debug|Win32 + {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Release|ARM64.ActiveCfg = Release|Win32 {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Release|Win32.ActiveCfg = Release|Win32 {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Release|Win32.Build.0 = Release|Win32 {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Release|x64.ActiveCfg = Release|Win32 + {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Setup|ARM64.ActiveCfg = Release|Win32 {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Setup|Win32.ActiveCfg = Release|Win32 {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Setup|Win32.Build.0 = Release|Win32 {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Setup|x64.ActiveCfg = Release|Win32 + {E93271C8-0252-4A08-8227-1978C64C2D34}.Debug|ARM64.ActiveCfg = Debug|Win32 {E93271C8-0252-4A08-8227-1978C64C2D34}.Debug|Win32.ActiveCfg = Debug|Win32 {E93271C8-0252-4A08-8227-1978C64C2D34}.Debug|Win32.Build.0 = Debug|Win32 {E93271C8-0252-4A08-8227-1978C64C2D34}.Debug|x64.ActiveCfg = Debug|Win32 + {E93271C8-0252-4A08-8227-1978C64C2D34}.Release|ARM64.ActiveCfg = Release|Win32 {E93271C8-0252-4A08-8227-1978C64C2D34}.Release|Win32.ActiveCfg = Release|Win32 {E93271C8-0252-4A08-8227-1978C64C2D34}.Release|Win32.Build.0 = Release|Win32 {E93271C8-0252-4A08-8227-1978C64C2D34}.Release|x64.ActiveCfg = Release|Win32 + {E93271C8-0252-4A08-8227-1978C64C2D34}.Setup|ARM64.ActiveCfg = Setup|Win32 {E93271C8-0252-4A08-8227-1978C64C2D34}.Setup|Win32.ActiveCfg = Setup|Win32 {E93271C8-0252-4A08-8227-1978C64C2D34}.Setup|Win32.Build.0 = Setup|Win32 {E93271C8-0252-4A08-8227-1978C64C2D34}.Setup|x64.ActiveCfg = Setup|Win32 + {0A60FD06-3A81-4651-A869-9850DBC115EA}.Debug|ARM64.ActiveCfg = Resource|Win32 {0A60FD06-3A81-4651-A869-9850DBC115EA}.Debug|Win32.ActiveCfg = Resource|Win32 {0A60FD06-3A81-4651-A869-9850DBC115EA}.Debug|Win32.Build.0 = Resource|Win32 {0A60FD06-3A81-4651-A869-9850DBC115EA}.Debug|x64.ActiveCfg = Resource|Win32 + {0A60FD06-3A81-4651-A869-9850DBC115EA}.Release|ARM64.ActiveCfg = Resource|Win32 {0A60FD06-3A81-4651-A869-9850DBC115EA}.Release|Win32.ActiveCfg = Resource|Win32 {0A60FD06-3A81-4651-A869-9850DBC115EA}.Release|Win32.Build.0 = Resource|Win32 {0A60FD06-3A81-4651-A869-9850DBC115EA}.Release|x64.ActiveCfg = Resource|Win32 + {0A60FD06-3A81-4651-A869-9850DBC115EA}.Setup|ARM64.ActiveCfg = Resource|Win32 {0A60FD06-3A81-4651-A869-9850DBC115EA}.Setup|Win32.ActiveCfg = Resource|Win32 {0A60FD06-3A81-4651-A869-9850DBC115EA}.Setup|Win32.Build.0 = Resource|Win32 {0A60FD06-3A81-4651-A869-9850DBC115EA}.Setup|x64.ActiveCfg = Resource|Win32 + {D42FE717-485B-492D-884A-1999F6D51154}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {D42FE717-485B-492D-884A-1999F6D51154}.Debug|ARM64.Build.0 = Debug|ARM64 {D42FE717-485B-492D-884A-1999F6D51154}.Debug|Win32.ActiveCfg = Debug|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Debug|Win32.Build.0 = Debug|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Debug|x64.ActiveCfg = Debug|x64 {D42FE717-485B-492D-884A-1999F6D51154}.Debug|x64.Build.0 = Debug|x64 + {D42FE717-485B-492D-884A-1999F6D51154}.Release|ARM64.ActiveCfg = Release|ARM64 + {D42FE717-485B-492D-884A-1999F6D51154}.Release|ARM64.Build.0 = Release|ARM64 {D42FE717-485B-492D-884A-1999F6D51154}.Release|Win32.ActiveCfg = Release|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Release|Win32.Build.0 = Release|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Release|x64.ActiveCfg = Release|x64 {D42FE717-485B-492D-884A-1999F6D51154}.Release|x64.Build.0 = Release|x64 + {D42FE717-485B-492D-884A-1999F6D51154}.Setup|ARM64.ActiveCfg = Release|ARM64 + {D42FE717-485B-492D-884A-1999F6D51154}.Setup|ARM64.Build.0 = Release|ARM64 {D42FE717-485B-492D-884A-1999F6D51154}.Setup|Win32.ActiveCfg = Release|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Setup|Win32.Build.0 = Release|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Setup|x64.ActiveCfg = Release|x64 {D42FE717-485B-492D-884A-1999F6D51154}.Setup|x64.Build.0 = Release|x64 + {65D5C193-E807-4094-AE19-19E6A310A312}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {65D5C193-E807-4094-AE19-19E6A310A312}.Debug|ARM64.Build.0 = Debug|ARM64 {65D5C193-E807-4094-AE19-19E6A310A312}.Debug|Win32.ActiveCfg = Debug|Win32 {65D5C193-E807-4094-AE19-19E6A310A312}.Debug|Win32.Build.0 = Debug|Win32 {65D5C193-E807-4094-AE19-19E6A310A312}.Debug|x64.ActiveCfg = Debug|x64 {65D5C193-E807-4094-AE19-19E6A310A312}.Debug|x64.Build.0 = Debug|x64 + {65D5C193-E807-4094-AE19-19E6A310A312}.Release|ARM64.ActiveCfg = Release|ARM64 + {65D5C193-E807-4094-AE19-19E6A310A312}.Release|ARM64.Build.0 = Release|ARM64 {65D5C193-E807-4094-AE19-19E6A310A312}.Release|Win32.ActiveCfg = Release|Win32 {65D5C193-E807-4094-AE19-19E6A310A312}.Release|Win32.Build.0 = Release|Win32 {65D5C193-E807-4094-AE19-19E6A310A312}.Release|x64.ActiveCfg = Release|x64 {65D5C193-E807-4094-AE19-19E6A310A312}.Release|x64.Build.0 = Release|x64 + {65D5C193-E807-4094-AE19-19E6A310A312}.Setup|ARM64.ActiveCfg = Setup|Win32 {65D5C193-E807-4094-AE19-19E6A310A312}.Setup|Win32.ActiveCfg = Setup|Win32 {65D5C193-E807-4094-AE19-19E6A310A312}.Setup|Win32.Build.0 = Setup|Win32 {65D5C193-E807-4094-AE19-19E6A310A312}.Setup|x64.ActiveCfg = Setup|x64 {65D5C193-E807-4094-AE19-19E6A310A312}.Setup|x64.Build.0 = Setup|x64 + {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Debug|ARM64.Build.0 = Debug|ARM64 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Debug|Win32.ActiveCfg = Debug|Win32 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Debug|Win32.Build.0 = Debug|Win32 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Debug|x64.ActiveCfg = Debug|x64 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Debug|x64.Build.0 = Debug|x64 + {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|ARM64.ActiveCfg = Release|ARM64 + {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|ARM64.Build.0 = Release|ARM64 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|Win32.ActiveCfg = Release|Win32 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|Win32.Build.0 = Release|Win32 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|x64.ActiveCfg = Release|x64 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|x64.Build.0 = Release|x64 + {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|ARM64.ActiveCfg = Setup|Win32 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|Win32.ActiveCfg = Setup|Win32 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|Win32.Build.0 = Setup|Win32 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|x64.ActiveCfg = Setup|x64 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|x64.Build.0 = Setup|x64 + {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Debug|ARM64.ActiveCfg = Debug|Win32 {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Debug|Win32.ActiveCfg = Debug|Win32 {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Debug|Win32.Build.0 = Debug|Win32 {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Debug|x64.ActiveCfg = Debug|Win32 + {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Release|ARM64.ActiveCfg = Release|Win32 {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Release|Win32.ActiveCfg = Release|Win32 {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Release|Win32.Build.0 = Release|Win32 {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Release|x64.ActiveCfg = Release|Win32 + {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Setup|ARM64.ActiveCfg = Release|Win32 {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Setup|Win32.ActiveCfg = Release|Win32 {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Setup|Win32.Build.0 = Release|Win32 {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Setup|x64.ActiveCfg = Release|Win32 + {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Debug|ARM64.ActiveCfg = Resource|Win32 + {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Debug|ARM64.Build.0 = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Debug|Win32.ActiveCfg = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Debug|Win32.Build.0 = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Debug|x64.ActiveCfg = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Debug|x64.Build.0 = Resource|Win32 + {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Release|ARM64.ActiveCfg = Resource|Win32 + {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Release|ARM64.Build.0 = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Release|Win32.ActiveCfg = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Release|Win32.Build.0 = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Release|x64.ActiveCfg = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Release|x64.Build.0 = Resource|Win32 + {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Setup|ARM64.ActiveCfg = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Setup|Win32.ActiveCfg = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Setup|Win32.Build.0 = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Setup|x64.ActiveCfg = Resource|Win32 + {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Debug|ARM64.ActiveCfg = Resource|Win32 + {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Debug|ARM64.Build.0 = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Debug|Win32.ActiveCfg = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Debug|Win32.Build.0 = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Debug|x64.ActiveCfg = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Debug|x64.Build.0 = Resource|Win32 + {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Release|ARM64.ActiveCfg = Resource|Win32 + {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Release|ARM64.Build.0 = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Release|Win32.ActiveCfg = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Release|Win32.Build.0 = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Release|x64.ActiveCfg = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Release|x64.Build.0 = Resource|Win32 + {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Setup|ARM64.ActiveCfg = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Setup|Win32.ActiveCfg = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Setup|Win32.Build.0 = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Setup|x64.ActiveCfg = Resource|Win32 + {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Debug|ARM64.ActiveCfg = Resource|Win32 + {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Debug|ARM64.Build.0 = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Debug|Win32.ActiveCfg = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Debug|Win32.Build.0 = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Debug|x64.ActiveCfg = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Debug|x64.Build.0 = Resource|Win32 + {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Release|ARM64.ActiveCfg = Resource|Win32 + {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Release|ARM64.Build.0 = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Release|Win32.ActiveCfg = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Release|Win32.Build.0 = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Release|x64.ActiveCfg = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Release|x64.Build.0 = Resource|Win32 + {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Setup|ARM64.ActiveCfg = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Setup|Win32.ActiveCfg = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Setup|Win32.Build.0 = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Setup|x64.ActiveCfg = Resource|Win32 + {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Debug|ARM64.ActiveCfg = Resource|Win32 + {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Debug|ARM64.Build.0 = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Debug|Win32.ActiveCfg = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Debug|Win32.Build.0 = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Debug|x64.ActiveCfg = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Debug|x64.Build.0 = Resource|Win32 + {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Release|ARM64.ActiveCfg = Resource|Win32 + {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Release|ARM64.Build.0 = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Release|Win32.ActiveCfg = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Release|Win32.Build.0 = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Release|x64.ActiveCfg = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Release|x64.Build.0 = Resource|Win32 + {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Setup|ARM64.ActiveCfg = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Setup|Win32.ActiveCfg = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Setup|Win32.Build.0 = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Setup|x64.ActiveCfg = Resource|Win32 + {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Debug|ARM64.Build.0 = Debug|ARM64 + {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Debug|ARM64.Deploy.0 = Debug|ARM64 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Debug|Win32.ActiveCfg = Debug|Win32 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Debug|Win32.Build.0 = Debug|Win32 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Debug|x64.ActiveCfg = Debug|x64 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Debug|x64.Build.0 = Debug|x64 + {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Release|ARM64.ActiveCfg = Release|ARM64 + {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Release|ARM64.Build.0 = Release|ARM64 + {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Release|ARM64.Deploy.0 = Release|ARM64 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Release|Win32.ActiveCfg = Release|Win32 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Release|Win32.Build.0 = Release|Win32 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Release|x64.ActiveCfg = Release|x64 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Release|x64.Build.0 = Release|x64 + {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Setup|ARM64.ActiveCfg = Setup|ARM64 + {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Setup|ARM64.Build.0 = Setup|ARM64 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Setup|Win32.ActiveCfg = Setup|Win32 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Setup|Win32.Build.0 = Setup|Win32 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Setup|x64.ActiveCfg = Setup|x64 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Setup|x64.Build.0 = Setup|x64 + {F92A5473-F9E0-412F-923C-6632A66D13C1}.Debug|ARM64.ActiveCfg = update_4.2.1|Win32 {F92A5473-F9E0-412F-923C-6632A66D13C1}.Debug|Win32.ActiveCfg = update_4.3.1|Win32 {F92A5473-F9E0-412F-923C-6632A66D13C1}.Debug|x64.ActiveCfg = update_4.2.7|Win32 + {F92A5473-F9E0-412F-923C-6632A66D13C1}.Release|ARM64.ActiveCfg = update_4.2.4|Win32 {F92A5473-F9E0-412F-923C-6632A66D13C1}.Release|Win32.ActiveCfg = update_4.2.7|Win32 {F92A5473-F9E0-412F-923C-6632A66D13C1}.Release|Win32.Build.0 = update_4.2.7|Win32 {F92A5473-F9E0-412F-923C-6632A66D13C1}.Release|x64.ActiveCfg = update_4.2.7|Win32 + {F92A5473-F9E0-412F-923C-6632A66D13C1}.Setup|ARM64.ActiveCfg = update_4.2.1|Win32 {F92A5473-F9E0-412F-923C-6632A66D13C1}.Setup|Win32.ActiveCfg = update_4.2.7|Win32 {F92A5473-F9E0-412F-923C-6632A66D13C1}.Setup|x64.ActiveCfg = update_4.3.0|Win32 + {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Debug|ARM64.Build.0 = Debug|ARM64 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Debug|Win32.ActiveCfg = Debug|Win32 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Debug|Win32.Build.0 = Debug|Win32 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Debug|x64.ActiveCfg = Debug|x64 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Debug|x64.Build.0 = Debug|x64 + {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Release|ARM64.ActiveCfg = Release|ARM64 + {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Release|ARM64.Build.0 = Release|ARM64 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Release|Win32.ActiveCfg = Release|Win32 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Release|Win32.Build.0 = Release|Win32 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Release|x64.ActiveCfg = Release|x64 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Release|x64.Build.0 = Release|x64 + {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Setup|ARM64.ActiveCfg = Release|ARM64 + {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Setup|ARM64.Build.0 = Release|ARM64 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Setup|Win32.ActiveCfg = Release|Win32 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Setup|Win32.Build.0 = Release|Win32 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Setup|x64.ActiveCfg = Release|x64 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Setup|x64.Build.0 = Release|x64 + {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Debug|ARM64.ActiveCfg = Resource|Win32 + {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Debug|ARM64.Build.0 = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Debug|Win32.ActiveCfg = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Debug|Win32.Build.0 = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Debug|x64.ActiveCfg = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Debug|x64.Build.0 = Resource|Win32 + {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Release|ARM64.ActiveCfg = Resource|Win32 + {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Release|ARM64.Build.0 = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Release|Win32.ActiveCfg = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Release|Win32.Build.0 = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Release|x64.ActiveCfg = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Release|x64.Build.0 = Resource|Win32 + {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Setup|ARM64.ActiveCfg = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Setup|Win32.ActiveCfg = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Setup|Win32.Build.0 = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Setup|x64.ActiveCfg = Resource|Win32 + {598AB4AC-008E-4501-90B3-C5213834C1DA}.Debug|ARM64.ActiveCfg = Resource|Win32 + {598AB4AC-008E-4501-90B3-C5213834C1DA}.Debug|ARM64.Build.0 = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Debug|Win32.ActiveCfg = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Debug|Win32.Build.0 = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Debug|x64.ActiveCfg = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Debug|x64.Build.0 = Resource|Win32 + {598AB4AC-008E-4501-90B3-C5213834C1DA}.Release|ARM64.ActiveCfg = Resource|Win32 + {598AB4AC-008E-4501-90B3-C5213834C1DA}.Release|ARM64.Build.0 = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Release|Win32.ActiveCfg = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Release|Win32.Build.0 = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Release|x64.ActiveCfg = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Release|x64.Build.0 = Resource|Win32 + {598AB4AC-008E-4501-90B3-C5213834C1DA}.Setup|ARM64.ActiveCfg = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Setup|Win32.ActiveCfg = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Setup|Win32.Build.0 = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Setup|x64.ActiveCfg = Resource|Win32 + {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Debug|ARM64.ActiveCfg = Resource|Win32 + {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Debug|ARM64.Build.0 = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Debug|Win32.ActiveCfg = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Debug|Win32.Build.0 = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Debug|x64.ActiveCfg = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Debug|x64.Build.0 = Resource|Win32 + {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Release|ARM64.ActiveCfg = Resource|Win32 + {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Release|ARM64.Build.0 = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Release|Win32.ActiveCfg = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Release|Win32.Build.0 = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Release|x64.ActiveCfg = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Release|x64.Build.0 = Resource|Win32 + {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Setup|ARM64.ActiveCfg = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Setup|Win32.ActiveCfg = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Setup|Win32.Build.0 = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Setup|x64.ActiveCfg = Resource|Win32 + {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Debug|ARM64.ActiveCfg = Resource|Win32 + {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Debug|ARM64.Build.0 = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Debug|Win32.ActiveCfg = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Debug|Win32.Build.0 = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Debug|x64.ActiveCfg = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Debug|x64.Build.0 = Resource|Win32 + {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Release|ARM64.ActiveCfg = Resource|Win32 + {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Release|ARM64.Build.0 = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Release|Win32.ActiveCfg = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Release|Win32.Build.0 = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Release|x64.ActiveCfg = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Release|x64.Build.0 = Resource|Win32 + {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Setup|ARM64.ActiveCfg = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Setup|Win32.ActiveCfg = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Setup|Win32.Build.0 = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Setup|x64.ActiveCfg = Resource|Win32 + {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Debug|ARM64.ActiveCfg = Debug|Win32 {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Debug|Win32.ActiveCfg = Debug|Win32 {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Debug|Win32.Build.0 = Debug|Win32 {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Debug|x64.ActiveCfg = Debug|Win32 + {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Release|ARM64.ActiveCfg = Release|Win32 {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Release|Win32.ActiveCfg = Release|Win32 {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Release|Win32.Build.0 = Release|Win32 {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Release|x64.ActiveCfg = Release|Win32 + {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Setup|ARM64.ActiveCfg = Release|Win32 {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Setup|Win32.ActiveCfg = Release|Win32 {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Setup|Win32.Build.0 = Release|Win32 {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Setup|x64.ActiveCfg = Release|Win32 diff --git a/Src/Setup/Utility/Utility.vcxproj b/Src/Setup/Utility/Utility.vcxproj index c06b734fe..c1d1a671b 100644 --- a/Src/Setup/Utility/Utility.vcxproj +++ b/Src/Setup/Utility/Utility.vcxproj @@ -1,6 +1,10 @@ + + Debug + ARM64 + Debug Win32 @@ -9,6 +13,10 @@ Debug x64 + + Release + ARM64 + Release Win32 @@ -45,12 +53,25 @@ Unicode true + + Application + v142 + Static + Unicode + true + Application v142 Static Unicode + + Application + v142 + Static + Unicode + @@ -63,9 +84,15 @@ + + + + + + $(Configuration)\ @@ -77,6 +104,11 @@ $(Configuration)64\ true + + true + $(Configuration)ARM64\ + $(Configuration)ARM64\ + $(Configuration)\ $(Configuration)\ @@ -87,6 +119,11 @@ $(Configuration)64\ false + + false + $(Configuration)ARM64\ + $(Configuration)ARM64\ + Disabled @@ -128,6 +165,28 @@ Windows + + + Disabled + ..\..\Lib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + NotUsing + Level3 + ProgramDatabase + true + stdcpp17 + + + _UNICODE;UNICODE;_WIN64;%(PreprocessorDefinitions) + + + comctl32.lib;uxtheme.lib;dwmapi.lib;winmm.lib;htmlhelp.lib;psapi.lib;version.lib;Secur32.lib.;%(AdditionalDependencies) + true + Windows + + MaxSpeed @@ -175,6 +234,31 @@ true + + + MaxSpeed + true + ..\..\Lib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + true + NotUsing + Level3 + ProgramDatabase + true + stdcpp17 + + + _UNICODE;UNICODE;_WIN64;%(PreprocessorDefinitions) + + + comctl32.lib;uxtheme.lib;dwmapi.lib;winmm.lib;htmlhelp.lib;psapi.lib;version.lib;Secur32.lib.;%(AdditionalDependencies) + true + Windows + true + true + + @@ -191,6 +275,7 @@ true + true diff --git a/Src/StartMenu/StartMenu.vcxproj b/Src/StartMenu/StartMenu.vcxproj index fa4f31e73..c9750245e 100644 --- a/Src/StartMenu/StartMenu.vcxproj +++ b/Src/StartMenu/StartMenu.vcxproj @@ -1,6 +1,10 @@ + + Debug + ARM64 + Debug Win32 @@ -9,6 +13,10 @@ Debug x64 + + Release + ARM64 + Release Win32 @@ -17,6 +25,10 @@ Release x64 + + Setup + ARM64 + Setup Win32 @@ -60,6 +72,13 @@ Unicode true + + Application + v142 + Static + Unicode + true + Application v142 @@ -67,12 +86,25 @@ Unicode true + + Application + v142 + Static + Unicode + true + Application v142 Static Unicode + + Application + v142 + Static + Unicode + @@ -92,14 +124,26 @@ + + + + + + + + + + + + $(Configuration)\ @@ -111,6 +155,11 @@ $(Configuration)64\ true + + true + $(Configuration)ARM64\ + $(Configuration)ARM64\ + $(Configuration)\ $(Configuration)\ @@ -121,6 +170,11 @@ $(Configuration)64\ false + + false + $(Configuration)ARM64\ + $(Configuration)ARM64\ + $(Configuration)\ $(Configuration)\ @@ -131,6 +185,11 @@ $(Configuration)64\ false + + false + $(Configuration)ARM64\ + $(Configuration)ARM64\ + Disabled @@ -175,6 +234,28 @@ Windows + + + Disabled + ..\Lib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Use + Level3 + ProgramDatabase + true + true + stdcpp17 + + + _DEBUG;%(PreprocessorDefinitions) + + + true + Windows + + MaxSpeed @@ -223,6 +304,30 @@ true + + + MaxSpeed + ..\Lib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + true + Use + Level3 + ProgramDatabase + true + true + stdcpp17 + + + NDEBUG;%(PreprocessorDefinitions) + + + true + Windows + true + true + + MaxSpeed @@ -273,6 +378,31 @@ true + + + MaxSpeed + ..\Lib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;BUILD_SETUP;%(PreprocessorDefinitions) + MultiThreaded + true + Use + Level3 + true + ProgramDatabase + true + true + stdcpp17 + + + NDEBUG;%(PreprocessorDefinitions) + + + true + Windows + true + true + + diff --git a/Src/StartMenu/StartMenuDLL/StartMenuDLL.vcxproj b/Src/StartMenu/StartMenuDLL/StartMenuDLL.vcxproj index 5777b91ae..09ae30b7d 100644 --- a/Src/StartMenu/StartMenuDLL/StartMenuDLL.vcxproj +++ b/Src/StartMenu/StartMenuDLL/StartMenuDLL.vcxproj @@ -1,6 +1,10 @@ + + Debug + ARM64 + Debug Win32 @@ -9,6 +13,10 @@ Debug x64 + + Release + ARM64 + Release Win32 @@ -17,6 +25,10 @@ Release x64 + + Setup + ARM64 + Setup Win32 @@ -60,6 +72,13 @@ Unicode true + + DynamicLibrary + v142 + Static + Unicode + true + DynamicLibrary v142 @@ -67,12 +86,25 @@ Unicode true + + DynamicLibrary + v142 + Static + Unicode + true + DynamicLibrary v142 Static Unicode + + DynamicLibrary + v142 + Static + Unicode + @@ -92,14 +124,26 @@ + + + + + + + + + + + + ..\$(Configuration)\ @@ -111,6 +155,11 @@ $(Configuration)64\ true + + true + $(Configuration)ARM64\ + ..\$(Configuration)ARM64\ + ..\$(Configuration)\ $(Configuration)\ @@ -121,6 +170,11 @@ $(Configuration)64\ false + + false + $(Configuration)ARM64\ + ..\$(Configuration)ARM64\ + ..\$(Configuration)\ $(Configuration)\ @@ -131,6 +185,11 @@ $(Configuration)64\ false + + false + $(Configuration)ARM64\ + ..\$(Configuration)ARM64\ + Disabled @@ -179,6 +238,30 @@ Windows + + + Disabled + ..\..\Lib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;CLASSICSTARTMENUDLL_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Use + Level3 + ProgramDatabase + true + true + stdcpp17 + + + _DEBUG;%(PreprocessorDefinitions) + $(IntDir);..\..\Lib;%(AdditionalIncludeDirectories) + + + comctl32.lib;uxtheme.lib;WtsApi32.lib;Secur32.lib;Msimg32.lib;Netapi32.lib;dwmapi.lib;PowrProf.lib;Oleacc.lib;winmm.lib;htmlhelp.lib;wininet.lib;structuredquery.lib;Propsys.lib;wintrust.lib;crypt32.lib;%(AdditionalDependencies) + true + Windows + + MaxSpeed @@ -231,6 +314,32 @@ true + + + MaxSpeed + ..\..\Lib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;CLASSICSTARTMENUDLL_EXPORTS;%(PreprocessorDefinitions) + MultiThreaded + true + Use + Level3 + ProgramDatabase + true + true + stdcpp17 + + + NDEBUG;%(PreprocessorDefinitions) + $(IntDir);..\..\Lib;%(AdditionalIncludeDirectories) + + + comctl32.lib;uxtheme.lib;WtsApi32.lib;Secur32.lib;Msimg32.lib;Netapi32.lib;dwmapi.lib;PowrProf.lib;Oleacc.lib;winmm.lib;htmlhelp.lib;wininet.lib;structuredquery.lib;Propsys.lib;wintrust.lib;crypt32.lib;%(AdditionalDependencies) + true + Windows + true + true + + MaxSpeed @@ -285,6 +394,33 @@ true + + + MaxSpeed + ..\..\Lib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;CLASSICSTARTMENUDLL_EXPORTS;BUILD_SETUP;%(PreprocessorDefinitions) + MultiThreaded + true + Use + Level3 + true + ProgramDatabase + true + true + stdcpp17 + + + NDEBUG;%(PreprocessorDefinitions) + $(IntDir);..\..\Lib;%(AdditionalIncludeDirectories) + + + comctl32.lib;uxtheme.lib;WtsApi32.lib;Secur32.lib;Msimg32.lib;Netapi32.lib;dwmapi.lib;PowrProf.lib;Oleacc.lib;winmm.lib;htmlhelp.lib;wininet.lib;structuredquery.lib;Propsys.lib;wintrust.lib;crypt32.lib;%(AdditionalDependencies) + true + Windows + true + true + + diff --git a/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj b/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj index 5e9cd3144..eb24be18f 100644 --- a/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj +++ b/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj @@ -1,6 +1,10 @@ + + Debug + ARM64 + Debug Win32 @@ -9,6 +13,10 @@ Debug x64 + + Release + ARM64 + Release Win32 @@ -17,6 +25,10 @@ Release x64 + + Setup + ARM64 + Setup Win32 @@ -60,6 +72,13 @@ Unicode true + + DynamicLibrary + v142 + Static + Unicode + true + DynamicLibrary v142 @@ -67,12 +86,25 @@ Unicode true + + DynamicLibrary + v142 + Static + Unicode + true + DynamicLibrary v142 Static Unicode + + DynamicLibrary + v142 + Static + Unicode + @@ -92,14 +124,26 @@ + + + + + + + + + + + + $(Configuration)\ @@ -115,6 +159,13 @@ true $(ProjectName)64 + + true + true + $(ProjectName)ARM64 + $(Configuration)ARM64\ + $(Configuration)ARM64\ + $(Configuration)\ $(Configuration)\ @@ -129,6 +180,13 @@ false $(ProjectName)64 + + true + false + $(ProjectName)ARM64 + $(Configuration)ARM64\ + $(Configuration)ARM64\ + $(Configuration)\ $(Configuration)\ @@ -143,6 +201,13 @@ false $(ProjectName)64 + + true + false + $(ProjectName)ARM64 + $(Configuration)ARM64\ + $(Configuration)ARM64\ + _DEBUG;%(PreprocessorDefinitions) @@ -214,6 +279,41 @@ true + + + _DEBUG;%(PreprocessorDefinitions) + false + true + StartMenuHelper_i.h + StartMenuHelper_i.c + StartMenuHelper_p.c + + + Disabled + ..\..\Lib;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;_DEBUG;_USRDLL;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Use + Level3 + ProgramDatabase + true + true + stdcpp17 + + + _DEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + true + comctl32.lib;uxtheme.lib;winmm.lib;htmlhelp.lib;wininet.lib;version.lib;%(AdditionalDependencies) + .\$(TargetName).def + true + Windows + true + + NDEBUG;%(PreprocessorDefinitions) @@ -287,6 +387,42 @@ true + + + NDEBUG;%(PreprocessorDefinitions) + false + true + StartMenuHelper_i.h + StartMenuHelper_i.c + StartMenuHelper_p.c + + + MaxSpeed + ..\..\Lib;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;NDEBUG;_USRDLL;%(PreprocessorDefinitions) + MultiThreaded + Use + Level3 + ProgramDatabase + true + true + stdcpp17 + + + NDEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + true + comctl32.lib;uxtheme.lib;winmm.lib;htmlhelp.lib;wininet.lib;version.lib;%(AdditionalDependencies) + .\$(TargetName).def + true + Windows + true + true + true + + NDEBUG;%(PreprocessorDefinitions) @@ -356,6 +492,40 @@ true + + + NDEBUG;%(PreprocessorDefinitions) + false + true + StartMenuHelper_i.h + StartMenuHelper_i.c + StartMenuHelper_p.c + + + MaxSpeed + ..\..\Lib;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;NDEBUG;_USRDLL;BUILD_SETUP;%(PreprocessorDefinitions) + MultiThreaded + Use + Level3 + ProgramDatabase + true + true + stdcpp17 + + + NDEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + comctl32.lib;uxtheme.lib;winmm.lib;htmlhelp.lib;wininet.lib;version.lib;%(AdditionalDependencies) + .\$(TargetName).def + true + Windows + true + true + + @@ -380,6 +550,7 @@ + diff --git a/Src/StartMenu/StartMenuHelper/StartMenuHelperARM64.def b/Src/StartMenu/StartMenuHelper/StartMenuHelperARM64.def new file mode 100644 index 000000000..2dd1d38ff --- /dev/null +++ b/Src/StartMenu/StartMenuHelper/StartMenuHelperARM64.def @@ -0,0 +1,10 @@ +; StartMenuHelper.def : Declares the module parameters. + +LIBRARY "StartMenuHelperARM64.DLL" + +EXPORTS + DllCanUnloadNow PRIVATE + DllGetClassObject PRIVATE + DllRegisterServer PRIVATE + DllUnregisterServer PRIVATE + DllInstall PRIVATE From 1b703ae86ae2257d00155177e42fe2f6418fdd2d Mon Sep 17 00:00:00 2001 From: Matthijs Lavrijsen Date: Tue, 9 Feb 2021 10:35:45 +0100 Subject: [PATCH 02/12] StartMenu: add ARM64 support --- Src/StartMenu/StartMenu.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Src/StartMenu/StartMenu.cpp b/Src/StartMenu/StartMenu.cpp index 94cfef449..79aa16341 100644 --- a/Src/StartMenu/StartMenu.cpp +++ b/Src/StartMenu/StartMenu.cpp @@ -296,8 +296,10 @@ bool WasOsUpgrade() // UAC dialog is shown to ensure it will run with administrator privileges void RunOsUpgradeTaskAsAdmin() { -#ifdef _WIN64 +#if defined(_M_AMD64) wchar_t path[_MAX_PATH] = L"%windir%\\System32\\StartMenuHelper64.dll"; +#elif defined(_M_ARM64) + wchar_t path[_MAX_PATH] = L"%windir%\\System32\\StartMenuHelperARM64.dll"; #else wchar_t path[_MAX_PATH] = L"%windir%\\System32\\StartMenuHelper32.dll"; #endif @@ -321,8 +323,10 @@ DWORD PerformOsUpgradeTask(bool silent) regKey.SetDWORDValue(L"WinVersion", g_winVer); // run regsvr32 StartMenuHelper -#ifdef _WIN64 +#if defined(_M_AMD64) wchar_t cmdLine[_MAX_PATH] = L"regsvr32 /s \"%windir%\\System32\\StartMenuHelper64.dll\""; +#elif defined(_M_ARM64) + wchar_t cmdLine[_MAX_PATH] = L"regsvr32 /s \"%windir%\\System32\\StartMenuHelperARM64.dll\""; #else wchar_t cmdLine[_MAX_PATH] = L"regsvr32 /s \"%windir%\\System32\\StartMenuHelper32.dll\""; #endif From 0b9705095368391017d9d44bc54890dd6ead3ca8 Mon Sep 17 00:00:00 2001 From: Matthijs Lavrijsen Date: Tue, 9 Feb 2021 10:37:10 +0100 Subject: [PATCH 03/12] Add support for IAT hooking on ARM64 --- Src/Lib/IatHookHelper.cpp | 7 ++++++- Src/Lib/IatHookHelper.h | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Src/Lib/IatHookHelper.cpp b/Src/Lib/IatHookHelper.cpp index 4a34d315b..5305811ed 100644 --- a/Src/Lib/IatHookHelper.cpp +++ b/Src/Lib/IatHookHelper.cpp @@ -70,12 +70,17 @@ IatHookData *SetIatHook( IMAGE_DOS_HEADER *dosHeader, DWORD iatOffset, DWORD int { IatHookData *hook=g_IatHooks+g_IatHookCount; g_IatHookCount++; +#if defined(_M_AMD64) || defined(_M_IX86) hook->jump[0]=hook->jump[1]=0x90; // NOP hook->jump[2]=0xFF; hook->jump[3]=0x25; // JUMP -#ifdef _WIN64 +#if defined(_M_AMD64) hook->jumpOffs=0; #else hook->jumpOffs=(DWORD)(hook)+8; +#endif +#elif defined(_M_ARM64) + hook->jump[0]=0x48; hook->jump[1]=0x00; hook->jump[2]=0x00; hook->jump[3]=0x58; // LDR X8, newProc + hook->jump[4]=0x00; hook->jump[5]=0x01; hook->jump[6]=0x1F; hook->jump[7]=0xD6; // BR X8 #endif hook->newProc=newProc; hook->oldProc=(void*)thunk->u1.Function; diff --git a/Src/Lib/IatHookHelper.h b/Src/Lib/IatHookHelper.h index 2a4603f0d..d522bfbd7 100644 --- a/Src/Lib/IatHookHelper.h +++ b/Src/Lib/IatHookHelper.h @@ -6,8 +6,12 @@ struct IatHookData { +#if defined(_M_AMD64) || defined(_M_IX86) unsigned char jump[4]; // jump instruction 0x90, 0x90, 0xFF, 0x25 DWORD jumpOffs; // jump instruction offset +#elif defined(_M_ARM64) + unsigned char jump[8]; // LDR
, BR +#endif void *newProc; // the address of the new proc void *oldProc; // the address of the old proc IMAGE_THUNK_DATA *thunk; // the IAT thunk From 81a37567959e004bb241c7a3a953c3975c94e9cc Mon Sep 17 00:00:00 2001 From: Matthijs Lavrijsen Date: Tue, 9 Feb 2021 15:32:58 +0100 Subject: [PATCH 04/12] Add ARM64 support to Classic IE --- Src/ClassicIE/ClassicIE.cpp | 4 +- Src/ClassicIE/ClassicIE.vcxproj | 126 +++++++++++++ Src/ClassicIE/ClassicIEDLL/ClassicIEBHO.cpp | 4 + .../ClassicIEDLL/ClassicIEDLL.vcxproj | 171 ++++++++++++++++++ .../ClassicIEDLL/ClassicIEDLL.vcxproj.filters | 5 +- .../ClassicIEDLL/ClassicIEDLL_ARM64.def | 10 + Src/OpenShell.sln | 6 +- 7 files changed, 322 insertions(+), 4 deletions(-) create mode 100644 Src/ClassicIE/ClassicIEDLL/ClassicIEDLL_ARM64.def diff --git a/Src/ClassicIE/ClassicIE.cpp b/Src/ClassicIE/ClassicIE.cpp index 9850aaef1..1e1d2efc7 100644 --- a/Src/ClassicIE/ClassicIE.cpp +++ b/Src/ClassicIE/ClassicIE.cpp @@ -189,8 +189,10 @@ int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdL } } -#ifdef _WIN64 +#if defined(_M_AMD64) HMODULE hHookModule=GetModuleHandle(L"ClassicIEDLL_64.dll"); +#elif defined(_M_ARM64) + HMODULE hHookModule=GetModuleHandle(L"ClassicIEDLL_ARM64.dll"); #else HMODULE hHookModule=GetModuleHandle(L"ClassicIEDLL_32.dll"); #endif diff --git a/Src/ClassicIE/ClassicIE.vcxproj b/Src/ClassicIE/ClassicIE.vcxproj index 42b34e621..0a1634b0d 100644 --- a/Src/ClassicIE/ClassicIE.vcxproj +++ b/Src/ClassicIE/ClassicIE.vcxproj @@ -1,6 +1,10 @@ + + Debug + ARM64 + Debug Win32 @@ -9,6 +13,10 @@ Debug x64 + + Release + ARM64 + Release Win32 @@ -17,6 +25,10 @@ Release x64 + + Setup + ARM64 + Setup Win32 @@ -60,6 +72,13 @@ Unicode true + + Application + v142 + Static + Unicode + true + Application v142 @@ -67,12 +86,25 @@ Unicode true + + Application + v142 + Static + Unicode + true + Application v142 Static Unicode + + Application + v142 + Static + Unicode + @@ -92,14 +124,26 @@ + + + + + + + + + + + + $(Configuration)\ @@ -113,6 +157,12 @@ true $(ProjectName)_64 + + true + $(ProjectName)_ARM64 + $(Configuration)ARM64\ + $(Configuration)ARM64\ + $(Configuration)\ $(Configuration)\ @@ -125,6 +175,12 @@ false $(ProjectName)_64 + + false + $(ProjectName)_ARM64 + $(Configuration)ARM64\ + $(Configuration)ARM64\ + $(Configuration)\ $(Configuration)\ @@ -137,6 +193,12 @@ false $(ProjectName)_64 + + false + $(ProjectName)_ARM64 + $(Configuration)ARM64\ + $(Configuration)ARM64\ + Disabled @@ -177,6 +239,26 @@ Windows + + + Disabled + ..\Lib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + NotUsing + Level3 + ProgramDatabase + true + true + stdcpp17 + + + shlwapi.lib;comctl32.lib;psapi.lib;%(AdditionalDependencies) + true + Windows + + MaxSpeed @@ -221,6 +303,28 @@ true + + + MaxSpeed + ..\Lib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + true + NotUsing + Level3 + ProgramDatabase + true + true + stdcpp17 + + + shlwapi.lib;comctl32.lib;psapi.lib;%(AdditionalDependencies) + true + Windows + true + true + + MaxSpeed @@ -265,6 +369,28 @@ true + + + MaxSpeed + ..\Lib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + true + NotUsing + Level3 + ProgramDatabase + true + true + stdcpp17 + + + shlwapi.lib;comctl32.lib;psapi.lib;%(AdditionalDependencies) + true + Windows + true + true + + diff --git a/Src/ClassicIE/ClassicIEDLL/ClassicIEBHO.cpp b/Src/ClassicIE/ClassicIEDLL/ClassicIEBHO.cpp index 2393f56a2..dae0fae37 100644 --- a/Src/ClassicIE/ClassicIEDLL/ClassicIEBHO.cpp +++ b/Src/ClassicIE/ClassicIEDLL/ClassicIEBHO.cpp @@ -50,7 +50,11 @@ static DWORD StartBroker( bool bWait, const wchar_t *param ) PathAppend(path,L"ClassicIE_32.exe"); else #endif +#if defined(_M_AMD64) || defined(_M_IX86) PathAppend(path,L"ClassicIE_64.exe"); +#elif defined(_M_ARM64) + PathAppend(path,L"ClassicIE_ARM64.exe"); +#endif wchar_t cmdLine[1024]; Sprintf(cmdLine,_countof(cmdLine),L"\"%s\" %s",path,param); diff --git a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj index 593f173a4..67ed86f08 100644 --- a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj +++ b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj @@ -1,6 +1,10 @@ + + Debug + ARM64 + Debug Win32 @@ -9,6 +13,10 @@ Debug x64 + + Release + ARM64 + Release Win32 @@ -17,6 +25,10 @@ Release x64 + + Setup + ARM64 + Setup Win32 @@ -60,6 +72,13 @@ Unicode true + + DynamicLibrary + v142 + Static + Unicode + true + DynamicLibrary v142 @@ -67,12 +86,25 @@ Unicode true + + DynamicLibrary + v142 + Static + Unicode + true + DynamicLibrary v142 Static Unicode + + DynamicLibrary + v142 + Static + Unicode + @@ -92,14 +124,26 @@ + + + + + + + + + + + + ..\$(Configuration)\ @@ -113,6 +157,12 @@ true $(ProjectName)_64 + + true + $(ProjectName)_ARM64 + $(Configuration)ARM64\ + ..\$(Configuration)ARM64\ + ..\$(Configuration)\ $(Configuration)\ @@ -125,6 +175,12 @@ false $(ProjectName)_64 + + false + $(ProjectName)_ARM64 + $(Configuration)ARM64\ + ..\$(Configuration)ARM64\ + ..\$(Configuration)\ $(Configuration)\ @@ -137,6 +193,12 @@ false $(ProjectName)_64 + + false + $(ProjectName)_ARM64 + $(Configuration)ARM64\ + ..\$(Configuration)ARM64\ + _DEBUG;%(PreprocessorDefinitions) @@ -208,6 +270,42 @@ true + + + _DEBUG;%(PreprocessorDefinitions) + false + true + ClassicIEDLL_i.h + + + ClassicIEDLL_i.c + ClassicIEDLL_p.c + + + Disabled + ..\..\Lib;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;_DEBUG;_USRDLL;CLASSICIEDLL_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Use + Level3 + ProgramDatabase + true + stdcpp17 + + + _DEBUG;%(PreprocessorDefinitions) + $(IntDir);..\..\Lib;%(AdditionalIncludeDirectories) + + + true + uxtheme.lib;dwmapi.lib;comctl32.lib;msimg32.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;%(AdditionalDependencies) + .\$(TargetName).def + true + Windows + true + + NDEBUG;%(PreprocessorDefinitions) @@ -281,6 +379,43 @@ true + + + NDEBUG;%(PreprocessorDefinitions) + false + true + ClassicIEDLL_i.h + + + ClassicIEDLL_i.c + ClassicIEDLL_p.c + + + MaxSpeed + ..\..\Lib;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;NDEBUG;_USRDLL;CLASSICIEDLL_EXPORTS;%(PreprocessorDefinitions) + MultiThreaded + Use + Level3 + ProgramDatabase + true + stdcpp17 + + + NDEBUG;%(PreprocessorDefinitions) + $(IntDir);..\..\Lib;%(AdditionalIncludeDirectories) + + + true + uxtheme.lib;dwmapi.lib;comctl32.lib;msimg32.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;%(AdditionalDependencies) + .\$(TargetName).def + true + Windows + true + true + true + + NDEBUG;%(PreprocessorDefinitions) @@ -350,6 +485,41 @@ true + + + NDEBUG;%(PreprocessorDefinitions) + false + true + ClassicIEDLL_i.h + + + ClassicIEDLL_i.c + ClassicIEDLL_p.c + + + MaxSpeed + ..\..\Lib;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;NDEBUG;_USRDLL;CLASSICIEDLL_EXPORTS;BUILD_SETUP;%(PreprocessorDefinitions) + MultiThreaded + Use + Level3 + ProgramDatabase + true + stdcpp17 + + + NDEBUG;%(PreprocessorDefinitions) + $(IntDir);..\..\Lib;%(AdditionalIncludeDirectories) + + + uxtheme.lib;dwmapi.lib;comctl32.lib;msimg32.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;%(AdditionalDependencies) + .\$(TargetName).def + true + Windows + true + true + + @@ -371,6 +541,7 @@ + diff --git a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters index ccca6f6ce..d01de2d96 100644 --- a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters +++ b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters @@ -58,6 +58,9 @@ Resource Files + + Source Files + @@ -98,4 +101,4 @@ Resource Files - + \ No newline at end of file diff --git a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL_ARM64.def b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL_ARM64.def new file mode 100644 index 000000000..6cbc01fba --- /dev/null +++ b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL_ARM64.def @@ -0,0 +1,10 @@ +; ClassicIEDLL.def : Declares the module parameters. + +LIBRARY "ClassicIEDLL_ARM64.DLL" + +EXPORTS + DllCanUnloadNow PRIVATE + DllGetClassObject PRIVATE + DllRegisterServer PRIVATE + DllUnregisterServer PRIVATE + DllInstall PRIVATE diff --git a/Src/OpenShell.sln b/Src/OpenShell.sln index 8049581e6..f2932acf3 100644 --- a/Src/OpenShell.sln +++ b/Src/OpenShell.sln @@ -316,7 +316,8 @@ Global {65D5C193-E807-4094-AE19-19E6A310A312}.Release|Win32.Build.0 = Release|Win32 {65D5C193-E807-4094-AE19-19E6A310A312}.Release|x64.ActiveCfg = Release|x64 {65D5C193-E807-4094-AE19-19E6A310A312}.Release|x64.Build.0 = Release|x64 - {65D5C193-E807-4094-AE19-19E6A310A312}.Setup|ARM64.ActiveCfg = Setup|Win32 + {65D5C193-E807-4094-AE19-19E6A310A312}.Setup|ARM64.ActiveCfg = Setup|ARM64 + {65D5C193-E807-4094-AE19-19E6A310A312}.Setup|ARM64.Build.0 = Setup|ARM64 {65D5C193-E807-4094-AE19-19E6A310A312}.Setup|Win32.ActiveCfg = Setup|Win32 {65D5C193-E807-4094-AE19-19E6A310A312}.Setup|Win32.Build.0 = Setup|Win32 {65D5C193-E807-4094-AE19-19E6A310A312}.Setup|x64.ActiveCfg = Setup|x64 @@ -333,7 +334,8 @@ Global {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|Win32.Build.0 = Release|Win32 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|x64.ActiveCfg = Release|x64 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|x64.Build.0 = Release|x64 - {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|ARM64.ActiveCfg = Setup|Win32 + {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|ARM64.ActiveCfg = Setup|ARM64 + {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|ARM64.Build.0 = Setup|ARM64 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|Win32.ActiveCfg = Setup|Win32 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|Win32.Build.0 = Setup|Win32 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|x64.ActiveCfg = Setup|x64 From f07dd08f624b59a3e9b2b2532c8fa418cb5f0fcc Mon Sep 17 00:00:00 2001 From: Matthijs Lavrijsen Date: Tue, 9 Feb 2021 16:32:08 +0100 Subject: [PATCH 05/12] Add ARM64 support to installer NB: WiX 3.14.0.3910 or higher is required to create the MSI --- Src/BUILDME.txt | 2 +- Src/Setup/BuildBinaries.bat | 83 ++++++++++++----- Src/Setup/BuildInstaller.bat | 23 +++-- Src/Setup/Setup.cpp | 125 +++++++++++++++++++------- Src/Setup/Setup.rc | 1 + Src/Setup/Setup.vcxproj | 1 + Src/Setup/Setup.vcxproj.filters | 1 + Src/Setup/Setup.wxs | 42 ++++++++- Src/Setup/Utility/ManualUninstall.cpp | 14 ++- Src/Setup/Utility/Utility.cpp | 31 ++++++- Src/Setup/__MakeFinal.bat | 2 +- Src/Setup/resource.h | 1 + 12 files changed, 258 insertions(+), 68 deletions(-) diff --git a/Src/BUILDME.txt b/Src/BUILDME.txt index 4e9384964..c859d5413 100644 --- a/Src/BUILDME.txt +++ b/Src/BUILDME.txt @@ -10,7 +10,7 @@ Visual Studio 2019 (Community Edition is enough) - Windows 10 SDK (10.0.19041.0) for Desktop C++ - Visual C++ ATL support HTML Help Workshop -WiX 3.7 +WiX 3.14 7-Zip It is possible to convert the projects to newer versions of Visual Studio and newer SDKs. Newer versions of WiX will probably work fine. diff --git a/Src/Setup/BuildBinaries.bat b/Src/Setup/BuildBinaries.bat index f1f814962..ea05f84fa 100644 --- a/Src/Setup/BuildBinaries.bat +++ b/Src/Setup/BuildBinaries.bat @@ -1,18 +1,24 @@ if exist Output rd /Q /S Output md Output md Output\x64 +md Output\ARM64 echo -- Compiling for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -products * -requires Microsoft.Component.MSBuild -property installationPath`) do set MSBuildDir=%%i\MSBuild\Current\Bin\ -REM ********* Build 64-bit solution -echo --- 64bit +REM ********* Build ARM64 solution +echo --- ARM64 +"%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Rebuild /p:Configuration="Setup" /p:Platform="ARM64" /verbosity:quiet /nologo +@if ERRORLEVEL 1 exit /b 1 + +REM ********* Build x64 solution +echo --- x64 "%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Rebuild /p:Configuration="Setup" /p:Platform="x64" /verbosity:quiet /nologo @if ERRORLEVEL 1 exit /b 1 REM ********* Build 32-bit solution (must be after 64-bit) -echo --- 32bit +echo --- x86 "%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Rebuild /p:Configuration="Setup" /p:Platform="Win32" /verbosity:quiet /nologo @if ERRORLEVEL 1 exit /b 1 @@ -49,6 +55,13 @@ copy /B ..\StartMenu\Setup64\StartMenu.exe Output\x64 > nul copy /B ..\StartMenu\Setup64\StartMenuDLL.dll Output\x64 > nul copy /B ..\StartMenu\StartMenuHelper\Setup64\StartMenuHelper64.dll Output\x64 > nul +copy /B ..\ClassicExplorer\SetupARM64\ClassicExplorerARM64.dll Output\ARM64 > nul +copy /B ..\ClassicIE\SetupARM64\ClassicIEDLL_ARM64.dll Output\ARM64 > nul +copy /B ..\ClassicIE\SetupARM64\ClassicIE_ARM64.exe Output\ARM64 > nul +copy /B ..\StartMenu\SetupARM64\StartMenu.exe Output\ARM64 > nul +copy /B ..\StartMenu\SetupARM64\StartMenuDLL.dll Output\ARM64 > nul +copy /B ..\StartMenu\StartMenuHelper\SetupARM64\StartMenuHelperARM64.dll Output\ARM64 > nul + copy /B "..\StartMenu\Skins\Classic Skin.skin" Output > nul copy /B "..\StartMenu\Skins\Full Glass.skin" Output > nul copy /B "..\StartMenu\Skins\Smoked Glass.skin" Output > nul @@ -67,7 +80,8 @@ copy /B "..\StartMenu\Skins\Metallic.skin7" Output > nul REM ********* Collect debug info md Output\PDB32 -md Output\PDB64 +md Output\PDBx64 +md Output\PDBARM64 REM Explorer 32 copy /B ..\ClassicExplorer\Setup\ClassicExplorer32.pdb Output\PDB32 > nul @@ -75,9 +89,13 @@ copy /B Output\ClassicExplorer32.dll Output\PDB32 > nul copy /B ..\ClassicExplorer\Setup\ClassicExplorerSettings.pdb Output\PDB32 > nul copy /B Output\ClassicExplorerSettings.exe Output\PDB32 > nul -REM Explorer 64 -copy /B ..\ClassicExplorer\Setup64\ClassicExplorer64.pdb Output\PDB64 > nul -copy /B Output\x64\ClassicExplorer64.dll Output\PDB64 > nul +REM Explorer x64 +copy /B ..\ClassicExplorer\Setup64\ClassicExplorer64.pdb Output\PDBx64 > nul +copy /B Output\x64\ClassicExplorer64.dll Output\PDBx64 > nul + +REM Explorer ARM64 +copy /B ..\ClassicExplorer\SetupARM64\ClassicExplorerARM64.pdb Output\PDBARM64 > nul +copy /B Output\ARM64\ClassicExplorerARM64.dll Output\PDBARM64 > nul REM IE 32 copy /B ..\ClassicIE\Setup\ClassicIEDLL_32.pdb Output\PDB32 > nul @@ -85,11 +103,17 @@ copy /B Output\ClassicIEDLL_32.dll Output\PDB32 > nul copy /B ..\ClassicIE\Setup\ClassicIE_32.pdb Output\PDB32 > nul copy /B Output\ClassicIE_32.exe Output\PDB32 > nul -REM IE 64 -copy /B ..\ClassicIE\Setup64\ClassicIEDLL_64.pdb Output\PDB64 > nul -copy /B Output\x64\ClassicIEDLL_64.dll Output\PDB64 > nul -copy /B ..\ClassicIE\Setup64\ClassicIE_64.pdb Output\PDB64 > nul -copy /B Output\x64\ClassicIE_64.exe Output\PDB64 > nul +REM IE x64 +copy /B ..\ClassicIE\Setup64\ClassicIEDLL_64.pdb Output\PDBx64 > nul +copy /B Output\x64\ClassicIEDLL_64.dll Output\PDBx64 > nul +copy /B ..\ClassicIE\Setup64\ClassicIE_64.pdb Output\PDBx64 > nul +copy /B Output\x64\ClassicIE_64.exe Output\PDBx64 > nul + +REM IE ARM64 +copy /B ..\ClassicIE\SetupARM64\ClassicIEDLL_ARM64.pdb Output\PDBARM64 > nul +copy /B Output\ARM64\ClassicIEDLL_ARM64.dll Output\PDBARM64 > nul +copy /B ..\ClassicIE\SetupARM64\ClassicIE_ARM64.pdb Output\PDBARM64 > nul +copy /B Output\ARM64\ClassicIE_ARM64.exe Output\PDBARM64 > nul REM Menu 32 copy /B ..\StartMenu\Setup\StartMenu.pdb Output\PDB32 > nul @@ -103,14 +127,21 @@ copy /B Output\Update.exe Output\PDB32 > nul copy /B ..\Update\DesktopToasts\Release\DesktopToasts.pdb Output\PDB32 > nul copy /B Output\DesktopToasts.dll Output\PDB32 > nul -REM Menu 64 -copy /B ..\StartMenu\Setup64\StartMenu.pdb Output\PDB64 > nul -copy /B Output\x64\StartMenu.exe Output\PDB64 > nul -copy /B ..\StartMenu\Setup64\StartMenuDLL.pdb Output\PDB64 > nul -copy /B Output\x64\StartMenuDLL.dll Output\PDB64 > nul -copy /B ..\StartMenu\StartMenuHelper\Setup64\StartMenuHelper64.pdb Output\PDB64 > nul -copy /B Output\x64\StartMenuHelper64.dll Output\PDB64 > nul - +REM Menu x64 +copy /B ..\StartMenu\Setup64\StartMenu.pdb Output\PDBx64 > nul +copy /B Output\x64\StartMenu.exe Output\PDBx64 > nul +copy /B ..\StartMenu\Setup64\StartMenuDLL.pdb Output\PDBx64 > nul +copy /B Output\x64\StartMenuDLL.dll Output\PDBx64 > nul +copy /B ..\StartMenu\StartMenuHelper\Setup64\StartMenuHelper64.pdb Output\PDBx64 > nul +copy /B Output\x64\StartMenuHelper64.dll Output\PDBx64 > nul + +REM Menu ARM64 +copy /B ..\StartMenu\SetupARM64\StartMenu.pdb Output\PDBARM64 > nul +copy /B Output\ARM64\StartMenu.exe Output\PDBARM64 > nul +copy /B ..\StartMenu\SetupARM64\StartMenuDLL.pdb Output\PDBARM64 > nul +copy /B Output\ARM64\StartMenuDLL.dll Output\PDBARM64 > nul +copy /B ..\StartMenu\StartMenuHelper\SetupARM64\StartMenuHelperARM64.pdb Output\PDBARM64 > nul +copy /B Output\ARM64\StartMenuHelperARM64.dll Output\PDBARM64 > nul REM ********* Source Index PDBs @@ -124,7 +155,11 @@ if exist %PDBSTR_PATH% ( %PDBSTR_PATH% -w -p:%%f -s:srcsrv -i:Output\pdbstr.txt ) - for %%f in (Output\PDB64\*.pdb) do ( + for %%f in (Output\PDBx64\*.pdb) do ( + %PDBSTR_PATH% -w -p:%%f -s:srcsrv -i:Output\pdbstr.txt + ) + + for %%f in (Output\PDBARM64\*.pdb) do ( %PDBSTR_PATH% -w -p:%%f -s:srcsrv -i:Output\pdbstr.txt ) ) @@ -134,12 +169,14 @@ REM ********* Prepare symbols set SYMSTORE_PATH="C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\symstore.exe" %SYMSTORE_PATH% add /r /f Output\PDB32 /s Output\symbols /t OpenShell -:NOREFS > nul -%SYMSTORE_PATH% add /r /f Output\PDB64 /s Output\symbols /t OpenShell -:NOREFS > nul +%SYMSTORE_PATH% add /r /f Output\PDBx64 /s Output\symbols /t OpenShell -:NOREFS > nul +%SYMSTORE_PATH% add /r /f Output\PDBARM64 /s Output\symbols /t OpenShell -:NOREFS > nul rd /Q /S Output\symbols\000Admin > nul del Output\symbols\pingme.txt > nul rd /Q /S Output\PDB32 -rd /Q /S Output\PDB64 +rd /Q /S Output\PDBx64 +rd /Q /S Output\PDBARM64 REM ********* Build ADMX echo --- ADMX diff --git a/Src/Setup/BuildInstaller.bat b/Src/Setup/BuildInstaller.bat index a6a76886e..a036dcd8a 100644 --- a/Src/Setup/BuildInstaller.bat +++ b/Src/Setup/BuildInstaller.bat @@ -36,9 +36,9 @@ md Temp @set /a "CS_VERSION_NUM=%%A<<24|%%B<<16|%%C" ) -REM ********* Build 32-bit MSI -echo --- 32bit MSI -candle Setup.wxs -nologo -out Temp\Setup32.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=0 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME% +REM ********* Build x86 MSI +echo --- x86 MSI +candle Setup.wxs -nologo -out Temp\Setup32.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=0 -dARM64=0 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME% @if ERRORLEVEL 1 exit /b 1 @REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs @@ -47,9 +47,9 @@ light Temp\Setup32.wixobj -nologo -out Temp\Setup32.msi -ext WixUIExtension -ext @if ERRORLEVEL 1 exit /b 1 -REM ********* Build 64-bit MSI -echo --- 64bit MSI -candle Setup.wxs -nologo -out Temp\Setup64.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=1 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME% +REM ********* Build x64 MSI +echo --- x64 MSI +candle Setup.wxs -nologo -out Temp\Setup64.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=1 -dARM64=0 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME% @if ERRORLEVEL 1 exit /b 1 @REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs @@ -58,6 +58,17 @@ light Temp\Setup64.wixobj -nologo -out Temp\Setup64.msi -ext WixUIExtension -ext @if ERRORLEVEL 1 exit /b 1 +REM ********* Build ARM64 MSI +echo --- ARM64 MSI +candle Setup.wxs -nologo -out Temp\SetupARM64.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=0 -dARM64=1 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME% +@if ERRORLEVEL 1 exit /b 1 + +@REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs +@REM We need to suppress ICE09 because the helper DLLs need to go into the system directory (for safety reasons) +light Temp\SetupARM64.wixobj -nologo -out Temp\SetupARM64.msi -ext WixUIExtension -ext WixUtilExtension -loc ..\Localization\%CS_LANG_FOLDER%\OpenShellText-%CS_LANG_NAME%.wxl -loc ..\Localization\%CS_LANG_FOLDER%\WixUI_%CS_LANG_NAME%.wxl -sice:ICE38 -sice:ICE43 -sice:ICE09 +@if ERRORLEVEL 1 exit /b 1 + + REM ********* Build MSI Checksums echo --- MSI Checksums Utility\Release\Utility.exe crcmsi Temp diff --git a/Src/Setup/Setup.cpp b/Src/Setup/Setup.cpp index d3471af40..412916f28 100644 --- a/Src/Setup/Setup.cpp +++ b/Src/Setup/Setup.cpp @@ -12,10 +12,13 @@ #include "StringUtils.h" #include "FNVHash.h" -// Setup.exe is a bootstrap application that contains installers for 32-bit and 64-bit. +// Setup.exe is a bootstrap application that contains installers for x86, x64 and ARM64. // It unpacks the right installer into the temp directory and executes it. typedef BOOL (WINAPI *FIsWow64Process)( HANDLE hProcess, PBOOL Wow64Process ); +typedef BOOL (WINAPI *FIsWow64Process2)( HANDLE hProcess, USHORT *pProcessMachine, USHORT *pNativeMachine ); +typedef BOOL (WINAPI *FWow64DisableWow64FsRedirection)( PVOID* OldValue ); +typedef BOOL (WINAPI *FWow64RevertWow64FsRedirection)( PVOID OldValue ); @@ -31,6 +34,14 @@ enum ERR_MSIEXEC, // msiexec failed to start }; +enum ExtractType +{ + None, + x86, + x64, + ARM64 +}; + struct Chunk { int start1, start2, len; @@ -49,7 +60,7 @@ static void WriteFileXOR( HANDLE hFile, const unsigned char *buf, int size ) } } -static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, bool b64, bool bQuiet ) +static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, ExtractType extractType, bool bQuiet ) { void *pRes=NULL; HRSRC hResInfo=FindResource(hInstance,MAKEINTRESOURCE(IDR_MSI_CHECKSUM),L"MSI_FILE"); @@ -70,13 +81,13 @@ static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, bool b64, bo } return ERR_HASH_NOTFOUND; } - unsigned int hash0=((unsigned int*)pRes)[b64?1:0]; + unsigned int hash0=((unsigned int*)pRes)[extractType==ARM64?2:extractType==x64?1:0]; const Chunk *pChunks=NULL; int chunkCount=0; - if (b64) + if (extractType==x64) { - chunkCount=((unsigned int*)pRes)[2]; - pChunks=(Chunk*)((unsigned int*)pRes+3); + chunkCount=((unsigned int*)pRes)[3]; + pChunks=(Chunk*)((unsigned int*)pRes+4); } // extract the installer @@ -99,19 +110,19 @@ static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, bool b64, bo } return ERR_MSIRES_NOTFOUND; } - const unsigned char *pRes64=NULL; + const unsigned char *pResx64=NULL, *pResArm64=NULL; int size32=SizeofResource(hInstance,hResInfo); unsigned int hash; - int size64=0; - if (b64) + int sizex64=0, sizeArm64=0; + if (extractType==x64) { HRSRC hResInfo=FindResource(hInstance,MAKEINTRESOURCE(IDR_MSI_FILE64),L"MSI_FILE"); if (hResInfo) { HGLOBAL hRes=LoadResource(hInstance,hResInfo); - pRes64=(unsigned char*)LockResource(hRes); + pResx64=(unsigned char*)LockResource(hRes); } - if (!pRes64) + if (!pResx64) { if (!bQuiet) { @@ -124,7 +135,7 @@ static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, bool b64, bo return ERR_MSIRES_NOTFOUND; } - size64=SizeofResource(hInstance,hResInfo); + sizex64=SizeofResource(hInstance,hResInfo); hash=FNV_HASH0; int start=0; int pos=0; @@ -132,13 +143,37 @@ static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, bool b64, bo { const Chunk &chunk=pChunks[i]; if (start0;count--,params++) { @@ -233,9 +272,11 @@ int APIENTRY wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCm return 0; } if (_wcsicmp(params[0],L"extract32")==0) - extract=32; + extractType=x86; if (_wcsicmp(params[0],L"extract64")==0) - extract=64; + extractType=x64; + if (_wcsicmp(params[0],L"extractARM64")==0) + extractType=ARM64; if (_wcsicmp(params[0],L"/qn")==0 || _wcsicmp(params[0],L"/q")==0 || _wcsicmp(params[0],L"/quiet")==0 || _wcsicmp(params[0],L"/passive")==0) { bQuiet=true; @@ -255,11 +296,11 @@ int APIENTRY wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCm return ERR_VERRES_NOTFOUND; } - if (extract) + if (extractType != None) { wchar_t msiName[_MAX_PATH]; - Sprintf(msiName,_countof(msiName),L"OpenShellSetup%d_%d_%d_%d.msi",extract,HIWORD(pVer->dwProductVersionMS),LOWORD(pVer->dwProductVersionMS),HIWORD(pVer->dwProductVersionLS)); - return ExtractMsi(hInstance,msiName,extract==64,bQuiet); + Sprintf(msiName,_countof(msiName),L"OpenShellSetup%s_%d_%d_%d.msi",(extractType==x86?L"32":(extractType==x64?L"64":L"ARM64")),HIWORD(pVer->dwProductVersionMS),LOWORD(pVer->dwProductVersionMS),HIWORD(pVer->dwProductVersionLS)); + return ExtractMsi(hInstance,msiName,extractType,bQuiet); } // check Windows version @@ -282,7 +323,9 @@ int APIENTRY wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCm // dynamically link to IsWow64Process because it is not available for Windows 2000 HMODULE hKernel32=GetModuleHandle(L"kernel32.dll"); FIsWow64Process isWow64Process=(FIsWow64Process)GetProcAddress(hKernel32,"IsWow64Process"); - if (!isWow64Process) + FWow64DisableWow64FsRedirection wow64DisableWow64FsRedirection=(FWow64DisableWow64FsRedirection)GetProcAddress(hKernel32,"Wow64DisableWow64FsRedirection"); + FWow64RevertWow64FsRedirection wow64RevertWow64FsRedirection=(FWow64RevertWow64FsRedirection)GetProcAddress(hKernel32,"Wow64RevertWow64FsRedirection"); + if (!isWow64Process || !wow64DisableWow64FsRedirection || !wow64RevertWow64FsRedirection) { if (!bQuiet) { @@ -295,13 +338,25 @@ int APIENTRY wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCm return ERR_WRONG_OS; } - BOOL b64=FALSE; - isWow64Process(GetCurrentProcess(),&b64); + // Use IsWow64Process2 if it's available (Windows 10 1511+), otherwise fall back to IsWow64Process + FIsWow64Process2 isWow64Process2=(FIsWow64Process2)GetProcAddress(hKernel32,"IsWow64Process2"); + if (isWow64Process2) + { + USHORT processMachine = 0, nativeMachine = 0; + isWow64Process2(GetCurrentProcess(), &processMachine, &nativeMachine); + extractType=nativeMachine==IMAGE_FILE_MACHINE_AMD64?x64:nativeMachine==IMAGE_FILE_MACHINE_ARM64?ARM64:x86; + } + else + { + BOOL x64=FALSE; + isWow64Process(GetCurrentProcess(),&x64); + extractType=x64?ExtractType::x64:x86; + } wchar_t msiName[_MAX_PATH]; - Sprintf(msiName,_countof(msiName),L"%%ALLUSERSPROFILE%%\\OpenShellSetup%d_%d_%d_%d.msi",b64?64:32,HIWORD(pVer->dwProductVersionMS),LOWORD(pVer->dwProductVersionMS),HIWORD(pVer->dwProductVersionLS)); + Sprintf(msiName,_countof(msiName),L"%%ALLUSERSPROFILE%%\\OpenShellSetup%s_%d_%d_%d.msi",(extractType==x86?L"32":(extractType==x64?L"64":L"ARM64")),HIWORD(pVer->dwProductVersionMS),LOWORD(pVer->dwProductVersionMS),HIWORD(pVer->dwProductVersionLS)); DoEnvironmentSubst(msiName,_countof(msiName)); - int ex=ExtractMsi(hInstance,msiName,b64!=FALSE,bQuiet); + int ex=ExtractMsi(hInstance,msiName,extractType,bQuiet); if (ex) return ex; wchar_t cmdLine[2048]; @@ -316,11 +371,19 @@ int APIENTRY wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCm Sprintf(cmdLine,_countof(cmdLine),L"msiexec.exe /i \"%s\" %s",msiName,lpCmdLine); } + // On ARM64 we must launch msiexec.exe from system32 and not syswow64 as would otherwise happen + PVOID wow64FsRedirVal=NULL; + if (extractType == ARM64) + Wow64DisableWow64FsRedirection(&wow64FsRedirVal); + // start the installer STARTUPINFO startupInfo={sizeof(startupInfo)}; PROCESS_INFORMATION processInfo; memset(&processInfo,0,sizeof(processInfo)); - if (!CreateProcess(NULL,cmdLine,NULL,NULL,TRUE,0,NULL,NULL,&startupInfo,&processInfo)) + BOOL ret=CreateProcess(NULL,cmdLine,NULL,NULL,TRUE,0,NULL,NULL,&startupInfo,&processInfo); + if (extractType == ARM64) + Wow64RevertWow64FsRedirection(wow64FsRedirVal); + if (!ret) { DeleteFile(msiName); if (!bQuiet) diff --git a/Src/Setup/Setup.rc b/Src/Setup/Setup.rc index 8d479c126..339a63efc 100644 --- a/Src/Setup/Setup.rc +++ b/Src/Setup/Setup.rc @@ -102,6 +102,7 @@ END IDR_MSI_FILE32 MSI_FILE "Temp\\Setup32.msi_" IDR_MSI_FILE64 MSI_FILE "Temp\\Setup64.msi_" +IDR_MSI_FILEARM64 MSI_FILE "Temp\\SetupARM64.msi_" IDR_MSI_CHECKSUM MSI_FILE "msichecksum.bin" diff --git a/Src/Setup/Setup.vcxproj b/Src/Setup/Setup.vcxproj index 62ccbfe77..cc39c92e8 100644 --- a/Src/Setup/Setup.vcxproj +++ b/Src/Setup/Setup.vcxproj @@ -124,6 +124,7 @@ + diff --git a/Src/Setup/Setup.vcxproj.filters b/Src/Setup/Setup.vcxproj.filters index 613885939..00a2d7a1a 100644 --- a/Src/Setup/Setup.vcxproj.filters +++ b/Src/Setup/Setup.vcxproj.filters @@ -61,5 +61,6 @@ + \ No newline at end of file diff --git a/Src/Setup/Setup.wxs b/Src/Setup/Setup.wxs index cedf0723c..722936359 100644 --- a/Src/Setup/Setup.wxs +++ b/Src/Setup/Setup.wxs @@ -3,7 +3,7 @@ # This comment is generated by WixEdit, the specific commandline # arguments for the WiX Toolset are stored here. - candleArgs: "" -out ".wixobj" -ext WixUIExtension -ext WixUtilExtension -dx64=0 + candleArgs: "" -out ".wixobj" -ext WixUIExtension -ext WixUtilExtension -dx64=0 -dARM64=0 lightArgs: ".wixobj" -out ".msi" -ext WixUIExtension -ext WixUtilExtension -loc OpenShellText-en-US.wxl --> @@ -11,6 +11,11 @@ + + + + + @@ -22,7 +27,7 @@ - + not Msix64 VersionNT>=601 @@ -62,6 +67,9 @@ + + + @@ -74,6 +82,9 @@ + + + @@ -99,6 +110,9 @@ + + + IE_BUILD>=90000 @@ -442,6 +456,25 @@ + + + + + + + + + + + + + + + + + + + @@ -615,6 +648,11 @@ + + + + + diff --git a/Src/Setup/Utility/ManualUninstall.cpp b/Src/Setup/Utility/ManualUninstall.cpp index 6c0b0ad69..d71baaa1a 100644 --- a/Src/Setup/Utility/ManualUninstall.cpp +++ b/Src/Setup/Utility/ManualUninstall.cpp @@ -43,11 +43,14 @@ #define RemoveDirectory2(x) RemoveDirectory(x) #endif +typedef BOOL (WINAPI *FIsWow64Process2)( HANDLE hProcess, USHORT *pProcessMachine, USHORT *pNativeMachine ); + // files to delete from the Open-Shell folder static const wchar_t *g_InstalledFiles[]= { L"ClassicExplorer32.dll", L"ClassicExplorer64.dll", + L"ClassicExplorerARM64.dll", L"ClassicExplorerSettings.exe", L"ClassicIEDLL_32.dll", L"ClassicIEDLL_64.dll", @@ -951,6 +954,15 @@ static void ManualUninstallInternal( void ) } } + BOOL bArm64System=FALSE; + HMODULE hKernel32=GetModuleHandle(L"kernel32.dll"); + FIsWow64Process2 isWow64Process2=(FIsWow64Process2)GetProcAddress(hKernel32,"IsWow64Process2"); + if (isWow64Process2) + { + USHORT processMachine = 0, nativeMachine = 0; + isWow64Process2(GetCurrentProcess(), &processMachine, &nativeMachine); + bArm64System=nativeMachine==IMAGE_FILE_MACHINE_ARM64; + } BOOL bWow64=FALSE; bool bIsWow64=IsWow64Process(GetCurrentProcess(),&bWow64) && bWow64; @@ -1140,7 +1152,7 @@ static void ManualUninstallInternal( void ) { // 64-bit OS wchar_t path[_MAX_PATH]; - Sprintf(path,_countof(path),L"%s\\System32\\StartMenuHelper64.dll",winDir); + Sprintf(path,_countof(path),L"%s\\System32\\StartMenuHelper%s64.dll",winDir,bArm64System?L"ARM":L""); Wow64EnableWow64FsRedirection(FALSE); DeleteFileEx(path,true); Sprintf(path,_countof(path),L"%s\\SysWOW64\\StartMenuHelper32.dll",winDir); diff --git a/Src/Setup/Utility/Utility.cpp b/Src/Setup/Utility/Utility.cpp index de9b7a6d4..0d2cd60a6 100644 --- a/Src/Setup/Utility/Utility.cpp +++ b/Src/Setup/Utility/Utility.cpp @@ -87,7 +87,7 @@ int CalcMsiChecksum( wchar_t *const *params, int count ) // load files wchar_t path1[_MAX_PATH]; - std::vector buf1, buf2; + std::vector buf1, buf2, buf3; Sprintf(path1,_countof(path1),L"%s\\Setup32.msi",params[1]); LoadFile(path1,buf1); if (buf1.empty()) @@ -103,14 +103,25 @@ int CalcMsiChecksum( wchar_t *const *params, int count ) Printf("Failed to open file %s\n",path2); return 1; } + wchar_t path3[_MAX_PATH]; + Sprintf(path3,_countof(path3),L"%s\\SetupARM64.msi",params[1]); + LoadFile(path3,buf3); + if (buf3.empty()) + { + Printf("Failed to open file %s\n",path2); + return 1; + } int len1=(int)buf1.size(); int len2=(int)buf2.size(); + int len3=(int)buf3.size(); for (std::vector::iterator it=buf1.begin();it!=buf1.end();++it) *it^=0xFF; for (std::vector::iterator it=buf2.begin();it!=buf2.end();++it) *it^=0xFF; + for (std::vector::iterator it=buf3.begin();it!=buf3.end();++it) + *it^=0xFF; // detect common blocks (assuming at least 256K in size and in the same order in both files) const int BLOCK_SIZE=256*1024; @@ -178,9 +189,23 @@ int CalcMsiChecksum( wchar_t *const *params, int count ) fclose(f); } - unsigned int fnvs[2]; + // save ARM64 MSI + { + Strcat(path3,_countof(path3),L"_"); + FILE *f=NULL; + if (_wfopen_s(&f,path3,L"wb") || !f) + { + Printf("Failed to write %s\n",path3); + return 1; + } + fwrite(&buf3[0],1,len3,f); + fclose(f); + } + + unsigned int fnvs[3]; fnvs[0]=CalcFNVHash(&buf1[0],len1,FNV_HASH0); fnvs[1]=CalcFNVHash(&buf2[0],len2,FNV_HASH0); + fnvs[2]=CalcFNVHash(&buf3[0],len3,FNV_HASH0); // save fnvs and chunks { @@ -1092,7 +1117,7 @@ static HRESULT CALLBACK TaskDialogCallback( HWND hwnd, UINT uNotification, WPARA // Open-Shell utility - multiple utilities for building and maintaining Open-Shell // Usage: // no parameters - saves a troubleshooting log -// crcmsi // creates a file with checksum of both msi files +// crcmsi // creates a file with checksum of all three msi files // makeEN // extracts the localization resources and creates a sample en-US.DLL // extract // extracts the string table, the dialog text, and the L10N text from a DLL and stores it in a CSV // extract en-us.dll // extracts the string table, the dialog text, and the L10N text from two DLL and stores it in a CSV diff --git a/Src/Setup/__MakeFinal.bat b/Src/Setup/__MakeFinal.bat index 16bcdf1e4..d1b1ebbf3 100644 --- a/Src/Setup/__MakeFinal.bat +++ b/Src/Setup/__MakeFinal.bat @@ -1,5 +1,5 @@ @echo off -set PATH=C:\Program Files\7-Zip\;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\WiX Toolset v3.11\bin\;%PATH% +set PATH=C:\Program Files\7-Zip\;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\WiX Toolset v3.14\bin\;%PATH% cd %~dp0 diff --git a/Src/Setup/resource.h b/Src/Setup/resource.h index 85076b8d8..e77b7a46d 100644 --- a/Src/Setup/resource.h +++ b/Src/Setup/resource.h @@ -8,6 +8,7 @@ #define IDS_ERR_CORRUPTED 102 #define IDR_MSI_FILE32 132 #define IDR_MSI_FILE64 164 +#define IDR_MSI_FILEARM64 165 #define IDS_ERR_INTERNAL 166 #define IDS_ERR_EXTRACT 167 #define IDR_MSI_CHECKSUM 167 From b46883e7a7a5bd1e1ba7372e022bdaf57133e1b7 Mon Sep 17 00:00:00 2001 From: Matthijs Lavrijsen Date: Wed, 10 Feb 2021 19:16:43 +0100 Subject: [PATCH 06/12] Revert whitespace change --- Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters index d01de2d96..10a6f111b 100644 --- a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters +++ b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters @@ -101,4 +101,4 @@ Resource Files - \ No newline at end of file + From 703c264f21c59e61336907ec29980a422cc02028 Mon Sep 17 00:00:00 2001 From: Matthijs Lavrijsen Date: Sun, 21 Feb 2021 00:51:42 +0100 Subject: [PATCH 07/12] Separate x86/x64 and ARM64 installers --- Src/BUILDME.txt | 2 +- Src/OpenShell.sln | 2 +- Src/Setup/BuildArchives.bat | 5 +- Src/Setup/BuildBinaries.bat | 120 +++++++++++---------- Src/Setup/BuildInstaller.bat | 86 ++++++++------- Src/Setup/Setup.cpp | 17 +-- Src/Setup/Setup.rc | 3 + Src/Setup/Setup.sln | 14 ++- Src/Setup/Setup.vcxproj | 104 +++++++++++++++++- Src/Setup/Utility/Utility.cpp | 111 +++++++++---------- Src/Setup/__MakeFinal.bat | 9 +- Src/Setup/__MakeFinalARM64.bat | 7 ++ Src/Setup/__MakeFinalAllLanguages.bat | 8 +- Src/Setup/__MakeFinalAllLanguagesARM64.bat | 7 ++ 14 files changed, 322 insertions(+), 173 deletions(-) create mode 100644 Src/Setup/__MakeFinalARM64.bat create mode 100644 Src/Setup/__MakeFinalAllLanguagesARM64.bat diff --git a/Src/BUILDME.txt b/Src/BUILDME.txt index c859d5413..95a6ad8ba 100644 --- a/Src/BUILDME.txt +++ b/Src/BUILDME.txt @@ -10,7 +10,7 @@ Visual Studio 2019 (Community Edition is enough) - Windows 10 SDK (10.0.19041.0) for Desktop C++ - Visual C++ ATL support HTML Help Workshop -WiX 3.14 +WiX 3.7 (3.14 for ARM64) 7-Zip It is possible to convert the projects to newer versions of Visual Studio and newer SDKs. Newer versions of WiX will probably work fine. diff --git a/Src/OpenShell.sln b/Src/OpenShell.sln index f2932acf3..0b8f5275b 100644 --- a/Src/OpenShell.sln +++ b/Src/OpenShell.sln @@ -151,7 +151,7 @@ Global {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|Win32.Build.0 = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|x64.ActiveCfg = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|x64.Build.0 = Release|Win32 - {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Setup|ARM64.ActiveCfg = Release|Win32 + {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Setup|ARM64.ActiveCfg = Release|ARM64 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Setup|Win32.ActiveCfg = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Setup|x64.ActiveCfg = Release|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Debug|ARM64.ActiveCfg = Resource|Win32 diff --git a/Src/Setup/BuildArchives.bat b/Src/Setup/BuildArchives.bat index eb5231a6d..8ea60554c 100644 --- a/Src/Setup/BuildArchives.bat +++ b/Src/Setup/BuildArchives.bat @@ -1,8 +1,11 @@ REM ***** Collect PDBs echo -- Creating symbols package -set CS_SYMBOLS_NAME=OpenShellPDB_%CS_VERSION_STR%.7z +set CS_SYMBOLS_NAME=OpenShellPDB_%CS_VERSION_STR% +if %ARCH%==ARM64 set CS_SYMBOLS_NAME=%CS_SYMBOLS_NAME%_ARM64 +set CS_SYMBOLS_NAME=%CS_SYMBOLS_NAME%.7z +if exist Final\%CS_SYMBOLS_NAME% del Final\%CS_SYMBOLS_NAME% > nul 7z a -mx9 .\Final\%CS_SYMBOLS_NAME% .\Output\symbols\* > nul if defined APPVEYOR ( diff --git a/Src/Setup/BuildBinaries.bat b/Src/Setup/BuildBinaries.bat index ea05f84fa..75e37c283 100644 --- a/Src/Setup/BuildBinaries.bat +++ b/Src/Setup/BuildBinaries.bat @@ -7,15 +7,17 @@ echo -- Compiling for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -products * -requires Microsoft.Component.MSBuild -property installationPath`) do set MSBuildDir=%%i\MSBuild\Current\Bin\ -REM ********* Build ARM64 solution -echo --- ARM64 -"%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Rebuild /p:Configuration="Setup" /p:Platform="ARM64" /verbosity:quiet /nologo -@if ERRORLEVEL 1 exit /b 1 - -REM ********* Build x64 solution -echo --- x64 -"%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Rebuild /p:Configuration="Setup" /p:Platform="x64" /verbosity:quiet /nologo -@if ERRORLEVEL 1 exit /b 1 +if %ARCH%==ARM64 ( + REM ********* Build ARM64 solution + echo --- ARM64 + "%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Rebuild /p:Configuration="Setup" /p:Platform="ARM64" /verbosity:quiet /nologo + if ERRORLEVEL 1 exit /b 1 +) else ( + REM ********* Build x64 solution + echo --- x64 + "%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Rebuild /p:Configuration="Setup" /p:Platform="x64" /verbosity:quiet /nologo + if ERRORLEVEL 1 exit /b 1 +) REM ********* Build 32-bit solution (must be after 64-bit) echo --- x86 @@ -48,19 +50,21 @@ copy /B ..\Update\DesktopToasts\Release\DesktopToasts.dll Output > nul copy /B ..\StartMenu\StartMenuHelper\Setup\StartMenuHelper32.dll Output > nul copy /B ..\Setup\SetupHelper\Release\SetupHelper.exe Output > nul -copy /B ..\ClassicExplorer\Setup64\ClassicExplorer64.dll Output\x64 > nul -copy /B ..\ClassicIE\Setup64\ClassicIEDLL_64.dll Output\x64 > nul -copy /B ..\ClassicIE\Setup64\ClassicIE_64.exe Output\x64 > nul -copy /B ..\StartMenu\Setup64\StartMenu.exe Output\x64 > nul -copy /B ..\StartMenu\Setup64\StartMenuDLL.dll Output\x64 > nul -copy /B ..\StartMenu\StartMenuHelper\Setup64\StartMenuHelper64.dll Output\x64 > nul - -copy /B ..\ClassicExplorer\SetupARM64\ClassicExplorerARM64.dll Output\ARM64 > nul -copy /B ..\ClassicIE\SetupARM64\ClassicIEDLL_ARM64.dll Output\ARM64 > nul -copy /B ..\ClassicIE\SetupARM64\ClassicIE_ARM64.exe Output\ARM64 > nul -copy /B ..\StartMenu\SetupARM64\StartMenu.exe Output\ARM64 > nul -copy /B ..\StartMenu\SetupARM64\StartMenuDLL.dll Output\ARM64 > nul -copy /B ..\StartMenu\StartMenuHelper\SetupARM64\StartMenuHelperARM64.dll Output\ARM64 > nul +if %ARCH%==ARM64 ( + copy /B ..\ClassicExplorer\SetupARM64\ClassicExplorerARM64.dll Output\ARM64 > nul + copy /B ..\ClassicIE\SetupARM64\ClassicIEDLL_ARM64.dll Output\ARM64 > nul + copy /B ..\ClassicIE\SetupARM64\ClassicIE_ARM64.exe Output\ARM64 > nul + copy /B ..\StartMenu\SetupARM64\StartMenu.exe Output\ARM64 > nul + copy /B ..\StartMenu\SetupARM64\StartMenuDLL.dll Output\ARM64 > nul + copy /B ..\StartMenu\StartMenuHelper\SetupARM64\StartMenuHelperARM64.dll Output\ARM64 > nul +) else ( + copy /B ..\ClassicExplorer\Setup64\ClassicExplorer64.dll Output\x64 > nul + copy /B ..\ClassicIE\Setup64\ClassicIEDLL_64.dll Output\x64 > nul + copy /B ..\ClassicIE\Setup64\ClassicIE_64.exe Output\x64 > nul + copy /B ..\StartMenu\Setup64\StartMenu.exe Output\x64 > nul + copy /B ..\StartMenu\Setup64\StartMenuDLL.dll Output\x64 > nul + copy /B ..\StartMenu\StartMenuHelper\Setup64\StartMenuHelper64.dll Output\x64 > nul +) copy /B "..\StartMenu\Skins\Classic Skin.skin" Output > nul copy /B "..\StartMenu\Skins\Full Glass.skin" Output > nul @@ -89,13 +93,15 @@ copy /B Output\ClassicExplorer32.dll Output\PDB32 > nul copy /B ..\ClassicExplorer\Setup\ClassicExplorerSettings.pdb Output\PDB32 > nul copy /B Output\ClassicExplorerSettings.exe Output\PDB32 > nul -REM Explorer x64 -copy /B ..\ClassicExplorer\Setup64\ClassicExplorer64.pdb Output\PDBx64 > nul -copy /B Output\x64\ClassicExplorer64.dll Output\PDBx64 > nul - -REM Explorer ARM64 -copy /B ..\ClassicExplorer\SetupARM64\ClassicExplorerARM64.pdb Output\PDBARM64 > nul -copy /B Output\ARM64\ClassicExplorerARM64.dll Output\PDBARM64 > nul +if %ARCH%==ARM64 ( + REM Explorer ARM64 + copy /B ..\ClassicExplorer\SetupARM64\ClassicExplorerARM64.pdb Output\PDBARM64 > nul + copy /B Output\ARM64\ClassicExplorerARM64.dll Output\PDBARM64 > nul +) else ( + REM Explorer x64 + copy /B ..\ClassicExplorer\Setup64\ClassicExplorer64.pdb Output\PDBx64 > nul + copy /B Output\x64\ClassicExplorer64.dll Output\PDBx64 > nul +) REM IE 32 copy /B ..\ClassicIE\Setup\ClassicIEDLL_32.pdb Output\PDB32 > nul @@ -103,17 +109,19 @@ copy /B Output\ClassicIEDLL_32.dll Output\PDB32 > nul copy /B ..\ClassicIE\Setup\ClassicIE_32.pdb Output\PDB32 > nul copy /B Output\ClassicIE_32.exe Output\PDB32 > nul -REM IE x64 -copy /B ..\ClassicIE\Setup64\ClassicIEDLL_64.pdb Output\PDBx64 > nul -copy /B Output\x64\ClassicIEDLL_64.dll Output\PDBx64 > nul -copy /B ..\ClassicIE\Setup64\ClassicIE_64.pdb Output\PDBx64 > nul -copy /B Output\x64\ClassicIE_64.exe Output\PDBx64 > nul - -REM IE ARM64 -copy /B ..\ClassicIE\SetupARM64\ClassicIEDLL_ARM64.pdb Output\PDBARM64 > nul -copy /B Output\ARM64\ClassicIEDLL_ARM64.dll Output\PDBARM64 > nul -copy /B ..\ClassicIE\SetupARM64\ClassicIE_ARM64.pdb Output\PDBARM64 > nul -copy /B Output\ARM64\ClassicIE_ARM64.exe Output\PDBARM64 > nul +if %ARCH%==ARM64 ( + REM IE ARM64 + copy /B ..\ClassicIE\SetupARM64\ClassicIEDLL_ARM64.pdb Output\PDBARM64 > nul + copy /B Output\ARM64\ClassicIEDLL_ARM64.dll Output\PDBARM64 > nul + copy /B ..\ClassicIE\SetupARM64\ClassicIE_ARM64.pdb Output\PDBARM64 > nul + copy /B Output\ARM64\ClassicIE_ARM64.exe Output\PDBARM64 > nul +) else ( + REM IE x64 + copy /B ..\ClassicIE\Setup64\ClassicIEDLL_64.pdb Output\PDBx64 > nul + copy /B Output\x64\ClassicIEDLL_64.dll Output\PDBx64 > nul + copy /B ..\ClassicIE\Setup64\ClassicIE_64.pdb Output\PDBx64 > nul + copy /B Output\x64\ClassicIE_64.exe Output\PDBx64 > nul +) REM Menu 32 copy /B ..\StartMenu\Setup\StartMenu.pdb Output\PDB32 > nul @@ -127,21 +135,23 @@ copy /B Output\Update.exe Output\PDB32 > nul copy /B ..\Update\DesktopToasts\Release\DesktopToasts.pdb Output\PDB32 > nul copy /B Output\DesktopToasts.dll Output\PDB32 > nul -REM Menu x64 -copy /B ..\StartMenu\Setup64\StartMenu.pdb Output\PDBx64 > nul -copy /B Output\x64\StartMenu.exe Output\PDBx64 > nul -copy /B ..\StartMenu\Setup64\StartMenuDLL.pdb Output\PDBx64 > nul -copy /B Output\x64\StartMenuDLL.dll Output\PDBx64 > nul -copy /B ..\StartMenu\StartMenuHelper\Setup64\StartMenuHelper64.pdb Output\PDBx64 > nul -copy /B Output\x64\StartMenuHelper64.dll Output\PDBx64 > nul - -REM Menu ARM64 -copy /B ..\StartMenu\SetupARM64\StartMenu.pdb Output\PDBARM64 > nul -copy /B Output\ARM64\StartMenu.exe Output\PDBARM64 > nul -copy /B ..\StartMenu\SetupARM64\StartMenuDLL.pdb Output\PDBARM64 > nul -copy /B Output\ARM64\StartMenuDLL.dll Output\PDBARM64 > nul -copy /B ..\StartMenu\StartMenuHelper\SetupARM64\StartMenuHelperARM64.pdb Output\PDBARM64 > nul -copy /B Output\ARM64\StartMenuHelperARM64.dll Output\PDBARM64 > nul +if %ARCH%==ARM64 ( + REM Menu ARM64 + copy /B ..\StartMenu\SetupARM64\StartMenu.pdb Output\PDBARM64 > nul + copy /B Output\ARM64\StartMenu.exe Output\PDBARM64 > nul + copy /B ..\StartMenu\SetupARM64\StartMenuDLL.pdb Output\PDBARM64 > nul + copy /B Output\ARM64\StartMenuDLL.dll Output\PDBARM64 > nul + copy /B ..\StartMenu\StartMenuHelper\SetupARM64\StartMenuHelperARM64.pdb Output\PDBARM64 > nul + copy /B Output\ARM64\StartMenuHelperARM64.dll Output\PDBARM64 > nul +) else ( + REM Menu x64 + copy /B ..\StartMenu\Setup64\StartMenu.pdb Output\PDBx64 > nul + copy /B Output\x64\StartMenu.exe Output\PDBx64 > nul + copy /B ..\StartMenu\Setup64\StartMenuDLL.pdb Output\PDBx64 > nul + copy /B Output\x64\StartMenuDLL.dll Output\PDBx64 > nul + copy /B ..\StartMenu\StartMenuHelper\Setup64\StartMenuHelper64.pdb Output\PDBx64 > nul + copy /B Output\x64\StartMenuHelper64.dll Output\PDBx64 > nul +) REM ********* Source Index PDBs diff --git a/Src/Setup/BuildInstaller.bat b/Src/Setup/BuildInstaller.bat index a036dcd8a..64d8161ed 100644 --- a/Src/Setup/BuildInstaller.bat +++ b/Src/Setup/BuildInstaller.bat @@ -24,6 +24,13 @@ echo -- Building Installer (%CS_LANG_NAME_SHORT%) SET CS_INSTALLER_NAME=OpenShellSetup_%CS_VERSION_STR%-%CS_LANG_NAME_SHORT% if %CS_LANG_NAME_SHORT%==en SET CS_INSTALLER_NAME=OpenShellSetup_%CS_VERSION_STR% +if %ARCH%==ARM64 SET CS_INSTALLER_NAME=%CS_INSTALLER_NAME%_ARM64 + +SET CS_SETUP_ARCH=Win32 +if %ARCH%==ARM64 SET CS_SETUP_ARCH=ARM64 + +SET CS_SETUP_DIR=Release +if %ARCH%==ARM64 SET CS_SETUP_DIR=%CS_SETUP_DIR%ARM64 if exist Temp rd /Q /S Temp md Temp @@ -36,58 +43,61 @@ md Temp @set /a "CS_VERSION_NUM=%%A<<24|%%B<<16|%%C" ) -REM ********* Build x86 MSI -echo --- x86 MSI -candle Setup.wxs -nologo -out Temp\Setup32.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=0 -dARM64=0 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME% -@if ERRORLEVEL 1 exit /b 1 - -@REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs -@REM We need to suppress ICE09 because the helper DLLs need to go into the system directory (for safety reasons) -light Temp\Setup32.wixobj -nologo -out Temp\Setup32.msi -ext WixUIExtension -ext WixUtilExtension -loc ..\Localization\%CS_LANG_FOLDER%\OpenShellText-%CS_LANG_NAME%.wxl -loc ..\Localization\%CS_LANG_FOLDER%\WixUI_%CS_LANG_NAME%.wxl -sice:ICE38 -sice:ICE43 -sice:ICE09 -@if ERRORLEVEL 1 exit /b 1 - - -REM ********* Build x64 MSI -echo --- x64 MSI -candle Setup.wxs -nologo -out Temp\Setup64.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=1 -dARM64=0 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME% -@if ERRORLEVEL 1 exit /b 1 - -@REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs -@REM We need to suppress ICE09 because the helper DLLs need to go into the system directory (for safety reasons) -light Temp\Setup64.wixobj -nologo -out Temp\Setup64.msi -ext WixUIExtension -ext WixUtilExtension -loc ..\Localization\%CS_LANG_FOLDER%\OpenShellText-%CS_LANG_NAME%.wxl -loc ..\Localization\%CS_LANG_FOLDER%\WixUI_%CS_LANG_NAME%.wxl -sice:ICE38 -sice:ICE43 -sice:ICE09 -@if ERRORLEVEL 1 exit /b 1 - - -REM ********* Build ARM64 MSI -echo --- ARM64 MSI -candle Setup.wxs -nologo -out Temp\SetupARM64.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=0 -dARM64=1 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME% -@if ERRORLEVEL 1 exit /b 1 - -@REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs -@REM We need to suppress ICE09 because the helper DLLs need to go into the system directory (for safety reasons) -light Temp\SetupARM64.wixobj -nologo -out Temp\SetupARM64.msi -ext WixUIExtension -ext WixUtilExtension -loc ..\Localization\%CS_LANG_FOLDER%\OpenShellText-%CS_LANG_NAME%.wxl -loc ..\Localization\%CS_LANG_FOLDER%\WixUI_%CS_LANG_NAME%.wxl -sice:ICE38 -sice:ICE43 -sice:ICE09 -@if ERRORLEVEL 1 exit /b 1 - +if %ARCH%==ARM64 ( + REM ********* Build ARM64 MSI + echo --- ARM64 MSI + candle Setup.wxs -nologo -out Temp\SetupARM64.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=0 -dARM64=1 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME% + if ERRORLEVEL 1 exit /b 1 + + REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs + REM We need to suppress ICE09 because the helper DLLs need to go into the system directory (for safety reasons) + light Temp\SetupARM64.wixobj -nologo -out Temp\SetupARM64.msi -ext WixUIExtension -ext WixUtilExtension -loc ..\Localization\%CS_LANG_FOLDER%\OpenShellText-%CS_LANG_NAME%.wxl -loc ..\Localization\%CS_LANG_FOLDER%\WixUI_%CS_LANG_NAME%.wxl -sice:ICE38 -sice:ICE43 -sice:ICE09 + if ERRORLEVEL 1 exit /b 1 +) else ( + REM ********* Build x86 MSI + echo --- x86 MSI + candle Setup.wxs -nologo -out Temp\Setup32.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=0 -dARM64=0 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME% + if ERRORLEVEL 1 exit /b 1 + + REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs + REM We need to suppress ICE09 because the helper DLLs need to go into the system directory (for safety reasons) + light Temp\Setup32.wixobj -nologo -out Temp\Setup32.msi -ext WixUIExtension -ext WixUtilExtension -loc ..\Localization\%CS_LANG_FOLDER%\OpenShellText-%CS_LANG_NAME%.wxl -loc ..\Localization\%CS_LANG_FOLDER%\WixUI_%CS_LANG_NAME%.wxl -sice:ICE38 -sice:ICE43 -sice:ICE09 + if ERRORLEVEL 1 exit /b 1 + + REM ********* Build x64 MSI + echo --- x64 MSI + candle Setup.wxs -nologo -out Temp\Setup64.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=1 -dARM64=0 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME% + if ERRORLEVEL 1 exit /b 1 + + REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs + REM We need to suppress ICE09 because the helper DLLs need to go into the system directory (for safety reasons) + light Temp\Setup64.wixobj -nologo -out Temp\Setup64.msi -ext WixUIExtension -ext WixUtilExtension -loc ..\Localization\%CS_LANG_FOLDER%\OpenShellText-%CS_LANG_NAME%.wxl -loc ..\Localization\%CS_LANG_FOLDER%\WixUI_%CS_LANG_NAME%.wxl -sice:ICE38 -sice:ICE43 -sice:ICE09 + if ERRORLEVEL 1 exit /b 1 +) REM ********* Build MSI Checksums echo --- MSI Checksums -Utility\Release\Utility.exe crcmsi Temp +if %ARCH%==ARM64 ( + Utility\Release\Utility.exe crcarm64msi Temp +) else ( + Utility\Release\Utility.exe crcmsi Temp +) @if ERRORLEVEL 1 exit /b 1 REM ********* Build bootstrapper echo --- Bootstrapper for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -products * -requires Microsoft.Component.MSBuild -property installationPath`) do set MSBuildDir=%%i\MSBuild\Current\Bin\ -"%MSBuildDir%MSBuild.exe" Setup.sln /m /t:Rebuild /p:Configuration="Release" /p:Platform="Win32" /verbosity:quiet /nologo +"%MSBuildDir%MSBuild.exe" Setup.sln /m /t:Rebuild /p:Configuration="Release" /p:Platform="%CS_SETUP_ARCH%" /verbosity:quiet /nologo @if ERRORLEVEL 1 exit /b 1 -if exist Final rd /Q /S Final -md Final +if exist Final\%CS_INSTALLER_NAME%.exe del Final\%CS_INSTALLER_NAME%.exe > nul +md Final 1> nul 2>&1 -copy /B Release\Setup.exe Final\%CS_INSTALLER_NAME%.exe > nul +copy /B %CS_SETUP_DIR%\Setup.exe Final\%CS_INSTALLER_NAME%.exe > nul if defined APPVEYOR ( - appveyor PushArtifact Release\Setup.exe -FileName %CS_INSTALLER_NAME%.exe + appveyor PushArtifact %CS_SETUP_DIR%\Setup.exe -FileName %CS_INSTALLER_NAME%.exe ) SET CS_LANG_FOLDER= diff --git a/Src/Setup/Setup.cpp b/Src/Setup/Setup.cpp index 412916f28..baa167702 100644 --- a/Src/Setup/Setup.cpp +++ b/Src/Setup/Setup.cpp @@ -12,7 +12,7 @@ #include "StringUtils.h" #include "FNVHash.h" -// Setup.exe is a bootstrap application that contains installers for x86, x64 and ARM64. +// Setup.exe is a bootstrap application that contains installers for x86 and x64 or ARM64. // It unpacks the right installer into the temp directory and executes it. typedef BOOL (WINAPI *FIsWow64Process)( HANDLE hProcess, PBOOL Wow64Process ); @@ -81,13 +81,13 @@ static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, ExtractType } return ERR_HASH_NOTFOUND; } - unsigned int hash0=((unsigned int*)pRes)[extractType==ARM64?2:extractType==x64?1:0]; + unsigned int hash0=((unsigned int*)pRes)[extractType==x64?1:0]; const Chunk *pChunks=NULL; int chunkCount=0; if (extractType==x64) { - chunkCount=((unsigned int*)pRes)[3]; - pChunks=(Chunk*)((unsigned int*)pRes+4); + chunkCount=((unsigned int*)pRes)[2]; + pChunks=(Chunk*)((unsigned int*)pRes+3); } // extract the installer @@ -98,7 +98,7 @@ static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, ExtractType HGLOBAL hRes=LoadResource(hInstance,hResInfo); pRes32=(unsigned char*)LockResource(hRes); } - if (!pRes32) + if (!pRes32 && extractType!=ARM64) { if (!bQuiet) { @@ -340,9 +340,10 @@ int APIENTRY wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCm // Use IsWow64Process2 if it's available (Windows 10 1511+), otherwise fall back to IsWow64Process FIsWow64Process2 isWow64Process2=(FIsWow64Process2)GetProcAddress(hKernel32,"IsWow64Process2"); + USHORT processMachine = 0; if (isWow64Process2) { - USHORT processMachine = 0, nativeMachine = 0; + USHORT nativeMachine = 0; isWow64Process2(GetCurrentProcess(), &processMachine, &nativeMachine); extractType=nativeMachine==IMAGE_FILE_MACHINE_AMD64?x64:nativeMachine==IMAGE_FILE_MACHINE_ARM64?ARM64:x86; } @@ -373,7 +374,7 @@ int APIENTRY wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCm // On ARM64 we must launch msiexec.exe from system32 and not syswow64 as would otherwise happen PVOID wow64FsRedirVal=NULL; - if (extractType == ARM64) + if (extractType == ARM64 && processMachine != IMAGE_FILE_MACHINE_ARM64) Wow64DisableWow64FsRedirection(&wow64FsRedirVal); // start the installer @@ -381,7 +382,7 @@ int APIENTRY wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCm PROCESS_INFORMATION processInfo; memset(&processInfo,0,sizeof(processInfo)); BOOL ret=CreateProcess(NULL,cmdLine,NULL,NULL,TRUE,0,NULL,NULL,&startupInfo,&processInfo); - if (extractType == ARM64) + if (extractType == ARM64 && processMachine != IMAGE_FILE_MACHINE_ARM64) Wow64RevertWow64FsRedirection(wow64FsRedirVal); if (!ret) { diff --git a/Src/Setup/Setup.rc b/Src/Setup/Setup.rc index 339a63efc..99e7e8da7 100644 --- a/Src/Setup/Setup.rc +++ b/Src/Setup/Setup.rc @@ -100,9 +100,12 @@ END // MSI_FILE // +#if defined(_M_AMD64) || defined(_M_IX86) IDR_MSI_FILE32 MSI_FILE "Temp\\Setup32.msi_" IDR_MSI_FILE64 MSI_FILE "Temp\\Setup64.msi_" +#elif defined(_M_ARM64) IDR_MSI_FILEARM64 MSI_FILE "Temp\\SetupARM64.msi_" +#endif IDR_MSI_CHECKSUM MSI_FILE "msichecksum.bin" diff --git a/Src/Setup/Setup.sln b/Src/Setup/Setup.sln index e805f6e7d..c25994faa 100644 --- a/Src/Setup/Setup.sln +++ b/Src/Setup/Setup.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2010 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31005.135 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Setup", "Setup.vcxproj", "{A4A4D3B1-24E7-401E-A37C-72141D7603DC}" EndProject @@ -9,22 +9,32 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Lib", "..\Lib\Lib.vcxproj", EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM64 = Debug|ARM64 Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 + Release|ARM64 = Release|ARM64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|ARM64.Build.0 = Debug|ARM64 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|Win32.ActiveCfg = Debug|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|Win32.Build.0 = Debug|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|x64.ActiveCfg = Debug|Win32 + {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|ARM64.ActiveCfg = Release|ARM64 + {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|ARM64.Build.0 = Release|ARM64 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|Win32.ActiveCfg = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|Win32.Build.0 = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|x64.ActiveCfg = Release|Win32 + {D42FE717-485B-492D-884A-1999F6D51154}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {D42FE717-485B-492D-884A-1999F6D51154}.Debug|ARM64.Build.0 = Debug|ARM64 {D42FE717-485B-492D-884A-1999F6D51154}.Debug|Win32.ActiveCfg = Debug|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Debug|Win32.Build.0 = Debug|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Debug|x64.ActiveCfg = Debug|x64 {D42FE717-485B-492D-884A-1999F6D51154}.Debug|x64.Build.0 = Debug|x64 + {D42FE717-485B-492D-884A-1999F6D51154}.Release|ARM64.ActiveCfg = Release|ARM64 + {D42FE717-485B-492D-884A-1999F6D51154}.Release|ARM64.Build.0 = Release|ARM64 {D42FE717-485B-492D-884A-1999F6D51154}.Release|Win32.ActiveCfg = Release|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Release|Win32.Build.0 = Release|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Release|x64.ActiveCfg = Release|x64 diff --git a/Src/Setup/Setup.vcxproj b/Src/Setup/Setup.vcxproj index cc39c92e8..f04530b66 100644 --- a/Src/Setup/Setup.vcxproj +++ b/Src/Setup/Setup.vcxproj @@ -1,10 +1,18 @@ + + Debug + ARM64 + Debug Win32 + + Release + ARM64 + Release Win32 @@ -23,11 +31,22 @@ Unicode true + + Application + v142 + Unicode + true + Application v142 Unicode + + Application + v142 + Unicode + @@ -35,21 +54,39 @@ + + + + + + + + $(Configuration)\ $(Configuration)\ true + + true + $(Configuration)ARM64\ + $(Configuration)ARM64\ + $(Configuration)\ $(Configuration)\ false + + false + $(Configuration)ARM64\ + $(Configuration)ARM64\ + Disabled @@ -65,7 +102,30 @@ stdcpp17 - _DEBUG;%(PreprocessorDefinitions) + _M_IX86=1;_X86_=1;_DEBUG;%(PreprocessorDefinitions) + + + comctl32.lib;Psapi.lib;version.lib;%(AdditionalDependencies) + true + Windows + + + + + Disabled + ..\Lib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + NotUsing + Level3 + EditAndContinue + true + true + stdcpp17 + + + _M_ARM64=1;_ARM64_=1;_DEBUG;%(PreprocessorDefinitions) comctl32.lib;Psapi.lib;version.lib;%(AdditionalDependencies) @@ -88,7 +148,32 @@ stdcpp17 - NDEBUG;%(PreprocessorDefinitions) + _M_IX86=1;_X86_=1;NDEBUG;%(PreprocessorDefinitions) + + + comctl32.lib;Psapi.lib;version.lib;%(AdditionalDependencies) + true + Windows + true + true + + + + + MaxSpeed + ..\Lib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + true + NotUsing + Level3 + ProgramDatabase + true + true + stdcpp17 + + + _M_ARM64=1;_ARM64_=1;NDEBUG;%(PreprocessorDefinitions) comctl32.lib;Psapi.lib;version.lib;%(AdditionalDependencies) @@ -122,9 +207,18 @@ - - - + + true + true + + + true + true + + + true + true + diff --git a/Src/Setup/Utility/Utility.cpp b/Src/Setup/Utility/Utility.cpp index 0d2cd60a6..07e438cac 100644 --- a/Src/Setup/Utility/Utility.cpp +++ b/Src/Setup/Utility/Utility.cpp @@ -79,7 +79,7 @@ struct Chunk int start1, start2, len; }; -int CalcMsiChecksum( wchar_t *const *params, int count ) +int CalcMsiChecksum( wchar_t *const *params, int count, bool bArm64 ) { if (count<2) return 2; @@ -87,8 +87,11 @@ int CalcMsiChecksum( wchar_t *const *params, int count ) // load files wchar_t path1[_MAX_PATH]; - std::vector buf1, buf2, buf3; - Sprintf(path1,_countof(path1),L"%s\\Setup32.msi",params[1]); + std::vector buf1, buf2; + if (!bArm64) + Sprintf(path1,_countof(path1),L"%s\\Setup32.msi",params[1]); + else + Sprintf(path1,_countof(path1),L"%s\\SetupARM64.msi",params[1]); LoadFile(path1,buf1); if (buf1.empty()) { @@ -96,66 +99,61 @@ int CalcMsiChecksum( wchar_t *const *params, int count ) return 1; } wchar_t path2[_MAX_PATH]; - Sprintf(path2,_countof(path2),L"%s\\Setup64.msi",params[1]); - LoadFile(path2,buf2); - if (buf2.empty()) - { - Printf("Failed to open file %s\n",path2); - return 1; - } - wchar_t path3[_MAX_PATH]; - Sprintf(path3,_countof(path3),L"%s\\SetupARM64.msi",params[1]); - LoadFile(path3,buf3); - if (buf3.empty()) + if (!bArm64) { - Printf("Failed to open file %s\n",path2); - return 1; + Sprintf(path2,_countof(path2),L"%s\\Setup64.msi",params[1]); + LoadFile(path2,buf2); + if (buf2.empty()) + { + Printf("Failed to open file %s\n",path2); + return 1; + } } int len1=(int)buf1.size(); int len2=(int)buf2.size(); - int len3=(int)buf3.size(); for (std::vector::iterator it=buf1.begin();it!=buf1.end();++it) *it^=0xFF; for (std::vector::iterator it=buf2.begin();it!=buf2.end();++it) *it^=0xFF; - for (std::vector::iterator it=buf3.begin();it!=buf3.end();++it) - *it^=0xFF; - // detect common blocks (assuming at least 256K in size and in the same order in both files) - const int BLOCK_SIZE=256*1024; + // detect x86/x64 common blocks (assuming at least 256K in size and in the same order in both files) std::vector chunks; - int start2=0; - for (int i=0;i0 && chunk.start2>0 && buf1[chunk.start1-1]==buf2[chunk.start2-1]) - { - chunk.start1--; - chunk.start2--; - chunk.len++; - } - while (chunk.start1+chunk.len0 && chunk.start2>0 && buf1[chunk.start1-1]==buf2[chunk.start2-1]) + { + chunk.start1--; + chunk.start2--; + chunk.len++; + } + while (chunk.start1+chunk.len // creates a file with checksum of all three msi files +// crcmsi // creates a file with checksum of the x86 and x64 msi files +// crcarm64msi // creates a file with checksum of the ARM64 msi file // makeEN // extracts the localization resources and creates a sample en-US.DLL // extract // extracts the string table, the dialog text, and the L10N text from a DLL and stores it in a CSV // extract en-us.dll // extracts the string table, the dialog text, and the L10N text from two DLL and stores it in a CSV @@ -1183,7 +1169,12 @@ int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpstrC #ifndef _WIN64 if (_wcsicmp(params[0],L"crcmsi")==0) { - return CalcMsiChecksum(params,count); + return CalcMsiChecksum(params,count,false); + } + + if (_wcsicmp(params[0],L"crcarm64msi")==0) + { + return CalcMsiChecksum(params,count,true); } if (_wcsicmp(params[0],L"makeEN")==0) diff --git a/Src/Setup/__MakeFinal.bat b/Src/Setup/__MakeFinal.bat index d1b1ebbf3..f007b9c94 100644 --- a/Src/Setup/__MakeFinal.bat +++ b/Src/Setup/__MakeFinal.bat @@ -1,5 +1,12 @@ @echo off -set PATH=C:\Program Files\7-Zip\;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\WiX Toolset v3.14\bin\;%PATH% + +rem Default to x86/x64 unless we are building for ARM64 +set ARCH=%1 +if "%ARCH%"=="" set ARCH=x86_x64 + +rem WiX toolset 3.14 is required for ARM64 +set PATH=C:\Program Files\7-Zip;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\WiX Toolset v3.11\bin;%PATH% +if %ARCH%==ARM64 set PATH=C:\Program Files (x86)\WiX Toolset v3.14\bin;%PATH% cd %~dp0 diff --git a/Src/Setup/__MakeFinalARM64.bat b/Src/Setup/__MakeFinalARM64.bat new file mode 100644 index 000000000..e2bd17c3f --- /dev/null +++ b/Src/Setup/__MakeFinalARM64.bat @@ -0,0 +1,7 @@ +@echo off +cd %~dp0 + +call __MakeFinal.bat ARM64 +if ERRORLEVEL 1 exit /b 1 + +exit /b 0 diff --git a/Src/Setup/__MakeFinalAllLanguages.bat b/Src/Setup/__MakeFinalAllLanguages.bat index ad73e7a04..213e751bd 100644 --- a/Src/Setup/__MakeFinalAllLanguages.bat +++ b/Src/Setup/__MakeFinalAllLanguages.bat @@ -1,7 +1,13 @@ @echo off rem This file is to create all the files required for a new release to publish -set PATH=C:\Program Files\7-Zip\;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\WiX Toolset v3.11\bin\;%PATH% +rem Default to x86/x64 unless we are building for ARM64 +set ARCH=%1 +if "%ARCH%"=="" set ARCH=x86_x64 + +rem WiX toolset 3.14 is required for ARM64 +set PATH=C:\Program Files\7-Zip;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\WiX Toolset v3.11\bin;%PATH% +if %ARCH%==ARM64 set PATH=C:\Program Files (x86)\WiX Toolset v3.14\bin;%PATH% cd %~dp0 diff --git a/Src/Setup/__MakeFinalAllLanguagesARM64.bat b/Src/Setup/__MakeFinalAllLanguagesARM64.bat new file mode 100644 index 000000000..472c4c778 --- /dev/null +++ b/Src/Setup/__MakeFinalAllLanguagesARM64.bat @@ -0,0 +1,7 @@ +@echo off +cd %~dp0 + +call __MakeFinalAllLanguages.bat ARM64 +if ERRORLEVEL 1 exit /b 1 + +exit /b 0 From 0327c08ebbe98ea9ed8db211c448e48f054fa460 Mon Sep 17 00:00:00 2001 From: ge0rdi Date: Fri, 2 May 2025 11:12:54 +0200 Subject: [PATCH 08/12] Change suffix of ARM64 binaries --- Src/ClassicExplorer/ClassicExplorer.vcxproj | 4 ++-- .../ClassicExplorer.vcxproj.filters | 2 +- ...plorerARM64.def => ClassicExplorerA64.def} | 2 +- Src/ClassicIE/ClassicIE.cpp | 2 +- Src/ClassicIE/ClassicIE.vcxproj | 2 +- Src/ClassicIE/ClassicIEDLL/ClassicIEBHO.cpp | 2 +- .../ClassicIEDLL/ClassicIEDLL.vcxproj | 4 ++-- .../ClassicIEDLL/ClassicIEDLL.vcxproj.filters | 2 +- ...icIEDLL_ARM64.def => ClassicIEDLL_A64.def} | 2 +- Src/Setup/Setup.wxs | 24 +++++++++---------- Src/Setup/Utility/ManualUninstall.cpp | 4 ++-- Src/StartMenu/StartMenu.cpp | 4 ++-- .../StartMenuHelper/StartMenuHelper.vcxproj | 4 ++-- .../StartMenuHelper.vcxproj.filters | 3 +++ ...HelperARM64.def => StartMenuHelperA64.def} | 2 +- 15 files changed, 33 insertions(+), 30 deletions(-) rename Src/ClassicExplorer/{ClassicExplorerARM64.def => ClassicExplorerA64.def} (86%) rename Src/ClassicIE/ClassicIEDLL/{ClassicIEDLL_ARM64.def => ClassicIEDLL_A64.def} (83%) rename Src/StartMenu/StartMenuHelper/{StartMenuHelperARM64.def => StartMenuHelperA64.def} (83%) diff --git a/Src/ClassicExplorer/ClassicExplorer.vcxproj b/Src/ClassicExplorer/ClassicExplorer.vcxproj index 52de712bf..28d4508c9 100644 --- a/Src/ClassicExplorer/ClassicExplorer.vcxproj +++ b/Src/ClassicExplorer/ClassicExplorer.vcxproj @@ -66,7 +66,7 @@ $(ProjectName)64 - $(ProjectName)ARM64 + $(ProjectName)A64 true @@ -113,7 +113,7 @@ - + diff --git a/Src/ClassicExplorer/ClassicExplorer.vcxproj.filters b/Src/ClassicExplorer/ClassicExplorer.vcxproj.filters index c38be30ae..ad1839dff 100644 --- a/Src/ClassicExplorer/ClassicExplorer.vcxproj.filters +++ b/Src/ClassicExplorer/ClassicExplorer.vcxproj.filters @@ -80,7 +80,7 @@ Resource Files - + Source Files diff --git a/Src/ClassicExplorer/ClassicExplorerARM64.def b/Src/ClassicExplorer/ClassicExplorerA64.def similarity index 86% rename from Src/ClassicExplorer/ClassicExplorerARM64.def rename to Src/ClassicExplorer/ClassicExplorerA64.def index 5b878efbb..62d44e39f 100644 --- a/Src/ClassicExplorer/ClassicExplorerARM64.def +++ b/Src/ClassicExplorer/ClassicExplorerA64.def @@ -1,6 +1,6 @@ ; ClassicExplorer.def : Declares the module parameters. -LIBRARY "ClassicExplorerARM64.DLL" +LIBRARY "ClassicExplorerA64.DLL" EXPORTS DllCanUnloadNow PRIVATE diff --git a/Src/ClassicIE/ClassicIE.cpp b/Src/ClassicIE/ClassicIE.cpp index 1e1d2efc7..fcbe51eeb 100644 --- a/Src/ClassicIE/ClassicIE.cpp +++ b/Src/ClassicIE/ClassicIE.cpp @@ -192,7 +192,7 @@ int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdL #if defined(_M_AMD64) HMODULE hHookModule=GetModuleHandle(L"ClassicIEDLL_64.dll"); #elif defined(_M_ARM64) - HMODULE hHookModule=GetModuleHandle(L"ClassicIEDLL_ARM64.dll"); + HMODULE hHookModule=GetModuleHandle(L"ClassicIEDLL_A64.dll"); #else HMODULE hHookModule=GetModuleHandle(L"ClassicIEDLL_32.dll"); #endif diff --git a/Src/ClassicIE/ClassicIE.vcxproj b/Src/ClassicIE/ClassicIE.vcxproj index 2b7915d48..e6c607a3f 100644 --- a/Src/ClassicIE/ClassicIE.vcxproj +++ b/Src/ClassicIE/ClassicIE.vcxproj @@ -66,7 +66,7 @@ $(ProjectName)_64 - $(ProjectName)_ARM64 + $(ProjectName)_A64 diff --git a/Src/ClassicIE/ClassicIEDLL/ClassicIEBHO.cpp b/Src/ClassicIE/ClassicIEDLL/ClassicIEBHO.cpp index 389fa0063..7cf550fe4 100644 --- a/Src/ClassicIE/ClassicIEDLL/ClassicIEBHO.cpp +++ b/Src/ClassicIE/ClassicIEDLL/ClassicIEBHO.cpp @@ -53,7 +53,7 @@ static DWORD StartBroker( bool bWait, const wchar_t *param ) #if defined(_M_AMD64) || defined(_M_IX86) PathAppend(path,L"ClassicIE_64.exe"); #elif defined(_M_ARM64) - PathAppend(path,L"ClassicIE_ARM64.exe"); + PathAppend(path,L"ClassicIE_A64.exe"); #endif wchar_t cmdLine[1024]; diff --git a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj index 3ea251a65..0b6bfba88 100644 --- a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj +++ b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj @@ -66,7 +66,7 @@ $(ProjectName)_64 - $(ProjectName)_ARM64 + $(ProjectName)_A64 @@ -107,7 +107,7 @@ - + diff --git a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters index 1cfdc5fb7..ea2e5223a 100644 --- a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters +++ b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters @@ -58,7 +58,7 @@ Resource Files - + Source Files diff --git a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL_ARM64.def b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL_A64.def similarity index 83% rename from Src/ClassicIE/ClassicIEDLL/ClassicIEDLL_ARM64.def rename to Src/ClassicIE/ClassicIEDLL/ClassicIEDLL_A64.def index 6cbc01fba..d959f1819 100644 --- a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL_ARM64.def +++ b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL_A64.def @@ -1,6 +1,6 @@ ; ClassicIEDLL.def : Declares the module parameters. -LIBRARY "ClassicIEDLL_ARM64.DLL" +LIBRARY "ClassicIEDLL_A64.DLL" EXPORTS DllCanUnloadNow PRIVATE diff --git a/Src/Setup/Setup.wxs b/Src/Setup/Setup.wxs index fce39a378..748f2b838 100644 --- a/Src/Setup/Setup.wxs +++ b/Src/Setup/Setup.wxs @@ -68,7 +68,7 @@ - + @@ -83,7 +83,7 @@ - + @@ -113,8 +113,8 @@ - - + + @@ -458,14 +458,14 @@ - - + + - - + + - - + + @@ -658,8 +658,8 @@ - - + + diff --git a/Src/Setup/Utility/ManualUninstall.cpp b/Src/Setup/Utility/ManualUninstall.cpp index 353871224..71d49a7bf 100644 --- a/Src/Setup/Utility/ManualUninstall.cpp +++ b/Src/Setup/Utility/ManualUninstall.cpp @@ -50,7 +50,7 @@ static const wchar_t *g_InstalledFiles[]= { L"ClassicExplorer32.dll", L"ClassicExplorer64.dll", - L"ClassicExplorerARM64.dll", + L"ClassicExplorerA64.dll", L"ClassicExplorerSettings.exe", L"ClassicIEDLL_32.dll", L"ClassicIEDLL_64.dll", @@ -1168,7 +1168,7 @@ static void ManualUninstallInternal( void ) { // 64-bit OS wchar_t path[_MAX_PATH]; - Sprintf(path,_countof(path),L"%s\\System32\\StartMenuHelper%s64.dll",winDir,bArm64System?L"ARM":L""); + Sprintf(path,_countof(path),L"%s\\System32\\StartMenuHelper%s64.dll",winDir,bArm64System?L"A":L""); Wow64EnableWow64FsRedirection(FALSE); DeleteFileEx(path,true); Sprintf(path,_countof(path),L"%s\\SysWOW64\\StartMenuHelper32.dll",winDir); diff --git a/Src/StartMenu/StartMenu.cpp b/Src/StartMenu/StartMenu.cpp index 4edea422f..3b3afe721 100644 --- a/Src/StartMenu/StartMenu.cpp +++ b/Src/StartMenu/StartMenu.cpp @@ -299,7 +299,7 @@ void RunOsUpgradeTaskAsAdmin() #if defined(_M_AMD64) wchar_t path[_MAX_PATH] = L"%windir%\\System32\\StartMenuHelper64.dll"; #elif defined(_M_ARM64) - wchar_t path[_MAX_PATH] = L"%windir%\\System32\\StartMenuHelperARM64.dll"; + wchar_t path[_MAX_PATH] = L"%windir%\\System32\\StartMenuHelperA64.dll"; #else wchar_t path[_MAX_PATH] = L"%windir%\\System32\\StartMenuHelper32.dll"; #endif @@ -326,7 +326,7 @@ DWORD PerformOsUpgradeTask(bool silent) #if defined(_M_AMD64) wchar_t cmdLine[_MAX_PATH] = L"regsvr32 /s \"%windir%\\System32\\StartMenuHelper64.dll\""; #elif defined(_M_ARM64) - wchar_t cmdLine[_MAX_PATH] = L"regsvr32 /s \"%windir%\\System32\\StartMenuHelperARM64.dll\""; + wchar_t cmdLine[_MAX_PATH] = L"regsvr32 /s \"%windir%\\System32\\StartMenuHelperA64.dll\""; #else wchar_t cmdLine[_MAX_PATH] = L"regsvr32 /s \"%windir%\\System32\\StartMenuHelper32.dll\""; #endif diff --git a/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj b/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj index 7f4ba9acb..4f90cfe53 100644 --- a/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj +++ b/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj @@ -66,7 +66,7 @@ $(ProjectName)64 - $(ProjectName)ARM64 + $(ProjectName)A64 @@ -110,7 +110,7 @@ - + PreserveNewest diff --git a/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj.filters b/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj.filters index 119fd0dfb..154e7d4ca 100644 --- a/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj.filters +++ b/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj.filters @@ -56,6 +56,9 @@ Source Files + + Source Files + Resource Files diff --git a/Src/StartMenu/StartMenuHelper/StartMenuHelperARM64.def b/Src/StartMenu/StartMenuHelper/StartMenuHelperA64.def similarity index 83% rename from Src/StartMenu/StartMenuHelper/StartMenuHelperARM64.def rename to Src/StartMenu/StartMenuHelper/StartMenuHelperA64.def index 2dd1d38ff..386ed9386 100644 --- a/Src/StartMenu/StartMenuHelper/StartMenuHelperARM64.def +++ b/Src/StartMenu/StartMenuHelper/StartMenuHelperA64.def @@ -1,6 +1,6 @@ ; StartMenuHelper.def : Declares the module parameters. -LIBRARY "StartMenuHelperARM64.DLL" +LIBRARY "StartMenuHelperA64.DLL" EXPORTS DllCanUnloadNow PRIVATE From 4da71bafc6389d34067be25ef68ca2e4086e8796 Mon Sep 17 00:00:00 2001 From: ge0rdi Date: Fri, 2 May 2025 11:44:13 +0200 Subject: [PATCH 09/12] Put also ARM64 MSI to final installer --- Src/Setup/BuildArchives.bat | 5 +- Src/Setup/BuildBinaries.bat | 128 ++++++++---------- Src/Setup/BuildInstaller.bat | 79 +++++------ Src/Setup/Setup.cpp | 76 ++++++++--- Src/Setup/Setup.rc | 5 +- Src/Setup/Setup.sln | 14 +- Src/Setup/Setup.vcxproj | 27 +--- Src/Setup/Utility/Utility.cpp | 148 ++++++++++++++------- Src/Setup/__MakeFinal.bat | 5 - Src/Setup/__MakeFinalARM64.bat | 7 - Src/Setup/__MakeFinalAllLanguages.bat | 4 - Src/Setup/__MakeFinalAllLanguagesARM64.bat | 7 - 12 files changed, 251 insertions(+), 254 deletions(-) delete mode 100644 Src/Setup/__MakeFinalARM64.bat delete mode 100644 Src/Setup/__MakeFinalAllLanguagesARM64.bat diff --git a/Src/Setup/BuildArchives.bat b/Src/Setup/BuildArchives.bat index 18d046649..1e6339f95 100644 --- a/Src/Setup/BuildArchives.bat +++ b/Src/Setup/BuildArchives.bat @@ -1,11 +1,8 @@ REM ***** Collect PDBs echo -- Creating symbols package -set CS_SYMBOLS_NAME=OpenShellSymbols_%CS_VERSION_STR% -if %ARCH%==ARM64 set CS_SYMBOLS_NAME=%CS_SYMBOLS_NAME%_ARM64 -set CS_SYMBOLS_NAME=%CS_SYMBOLS_NAME%.7z +set CS_SYMBOLS_NAME=OpenShellSymbols_%CS_VERSION_STR%.7z -if exist Final\%CS_SYMBOLS_NAME% del Final\%CS_SYMBOLS_NAME% > nul 7z a -mx9 .\Final\%CS_SYMBOLS_NAME% .\Output\symbols\* > nul if defined APPVEYOR ( diff --git a/Src/Setup/BuildBinaries.bat b/Src/Setup/BuildBinaries.bat index cf1a6d42f..b195dd252 100644 --- a/Src/Setup/BuildBinaries.bat +++ b/Src/Setup/BuildBinaries.bat @@ -10,17 +10,15 @@ for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio REM Restore NuGet packages "%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Restore -p:RestorePackagesConfig=true /verbosity:quiet /nologo -if %ARCH%==ARM64 ( - REM ********* Build ARM64 solution - echo --- ARM64 - "%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Rebuild /p:Configuration="Setup" /p:Platform="ARM64" /verbosity:quiet /nologo - if ERRORLEVEL 1 exit /b 1 -) else ( - REM ********* Build x64 solution - echo --- x64 - "%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Rebuild /p:Configuration="Setup" /p:Platform="x64" /verbosity:quiet /nologo - if ERRORLEVEL 1 exit /b 1 -) +REM ********* Build x64 solution +echo --- x64 +"%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Rebuild /p:Configuration="Setup" /p:Platform="x64" /verbosity:quiet /nologo +@if ERRORLEVEL 1 exit /b 1 + +REM ********* Build ARM64 solution +echo --- ARM64 +"%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Rebuild /p:Configuration="Setup" /p:Platform="ARM64" /verbosity:quiet /nologo +if ERRORLEVEL 1 exit /b 1 REM ********* Build 32-bit solution (must be after 64-bit) echo --- x86 @@ -53,21 +51,19 @@ copy /B ..\..\build\bin\Release\Update.exe Output > nul copy /B ..\..\build\bin\Release\DesktopToasts.dll Output > nul copy /B ..\..\build\bin\Release\SetupHelper.exe Output > nul -if %ARCH%==ARM64 ( - copy /B ..\..\build\bin\SetupARM64\ClassicExplorerARM64.dll Output\ARM64 > nul - copy /B ..\..\build\bin\SetupARM64\ClassicIEDLL_ARM64.dll Output\ARM64 > nul - copy /B ..\..\build\bin\SetupARM64\ClassicIE_ARM64.exe Output\ARM64 > nul - copy /B ..\..\build\bin\SetupARM64\StartMenu.exe Output\ARM64 > nul - copy /B ..\..\build\bin\SetupARM64\StartMenuDLL.dll Output\ARM64 > nul - copy /B ..\..\build\bin\SetupARM64\StartMenuHelperARM64.dll Output\ARM64 > nul -) else ( - copy /B ..\..\build\bin\Setup64\ClassicExplorer64.dll Output\x64 > nul - copy /B ..\..\build\bin\Setup64\ClassicIEDLL_64.dll Output\x64 > nul - copy /B ..\..\build\bin\Setup64\ClassicIE_64.exe Output\x64 > nul - copy /B ..\..\build\bin\Setup64\StartMenu.exe Output\x64 > nul - copy /B ..\..\build\bin\Setup64\StartMenuDLL.dll Output\x64 > nul - copy /B ..\..\build\bin\Setup64\StartMenuHelper64.dll Output\x64 > nul -) +copy /B ..\..\build\bin\SetupARM64\ClassicExplorerA64.dll Output\ARM64 > nul +copy /B ..\..\build\bin\SetupARM64\ClassicIEDLL_A64.dll Output\ARM64 > nul +copy /B ..\..\build\bin\SetupARM64\ClassicIE_A64.exe Output\ARM64 > nul +copy /B ..\..\build\bin\SetupARM64\StartMenu.exe Output\ARM64 > nul +copy /B ..\..\build\bin\SetupARM64\StartMenuDLL.dll Output\ARM64 > nul +copy /B ..\..\build\bin\SetupARM64\StartMenuHelperA64.dll Output\ARM64 > nul + +copy /B ..\..\build\bin\Setup64\ClassicExplorer64.dll Output\x64 > nul +copy /B ..\..\build\bin\Setup64\ClassicIEDLL_64.dll Output\x64 > nul +copy /B ..\..\build\bin\Setup64\ClassicIE_64.exe Output\x64 > nul +copy /B ..\..\build\bin\Setup64\StartMenu.exe Output\x64 > nul +copy /B ..\..\build\bin\Setup64\StartMenuDLL.dll Output\x64 > nul +copy /B ..\..\build\bin\Setup64\StartMenuHelper64.dll Output\x64 > nul copy /B "..\..\build\bin\Skins\Classic Skin.skin" Output > nul copy /B "..\..\build\bin\Skins\Full Glass.skin" Output > nul @@ -89,7 +85,7 @@ copy /B "..\..\build\bin\Skins\Immersive.skin7" Output > nul REM ********* Collect debug info md Output\PDB32 -md Output\PDBx64 +md Output\PDB64 md Output\PDBARM64 REM Explorer 32 @@ -98,15 +94,13 @@ copy /B Output\ClassicExplorer32.dll Output\PDB32 > nul copy /B ..\..\build\bin\Setup\ClassicExplorerSettings.pdb Output\PDB32 > nul copy /B Output\ClassicExplorerSettings.exe Output\PDB32 > nul -if %ARCH%==ARM64 ( - REM Explorer ARM64 - copy /B ..\..\build\bin\SetupARM64\ClassicExplorerARM64.pdb Output\PDBARM64 > nul - copy /B Output\ARM64\ClassicExplorerARM64.dll Output\PDBARM64 > nul -) else ( - REM Explorer x64 - copy /B ..\..\build\bin\Setup64\ClassicExplorer64.pdb Output\PDBx64 > nul - copy /B Output\x64\ClassicExplorer64.dll Output\PDBx64 > nul -) +REM Explorer 64 +copy /B ..\..\build\bin\Setup64\ClassicExplorer64.pdb Output\PDB64 > nul +copy /B Output\x64\ClassicExplorer64.dll Output\PDB64 > nul + +REM Explorer ARM64 +copy /B ..\..\build\bin\SetupARM64\ClassicExplorerA64.pdb Output\PDBARM64 > nul +copy /B Output\ARM64\ClassicExplorerA64.dll Output\PDBARM64 > nul REM IE 32 copy /B ..\..\build\bin\Setup\ClassicIEDLL_32.pdb Output\PDB32 > nul @@ -114,19 +108,17 @@ copy /B Output\ClassicIEDLL_32.dll Output\PDB32 > nul copy /B ..\..\build\bin\Setup\ClassicIE_32.pdb Output\PDB32 > nul copy /B Output\ClassicIE_32.exe Output\PDB32 > nul -if %ARCH%==ARM64 ( - REM IE ARM64 - copy /B ..\..\build\bin\SetupARM64\ClassicIEDLL_ARM64.pdb Output\PDBARM64 > nul - copy /B Output\ARM64\ClassicIEDLL_ARM64.dll Output\PDBARM64 > nul - copy /B ..\..\build\bin\SetupARM64\ClassicIE_ARM64.pdb Output\PDBARM64 > nul - copy /B Output\ARM64\ClassicIE_ARM64.exe Output\PDBARM64 > nul -) else ( - REM IE x64 - copy /B ..\..\build\bin\Setup64\ClassicIEDLL_64.pdb Output\PDBx64 > nul - copy /B Output\x64\ClassicIEDLL_64.dll Output\PDBx64 > nul - copy /B ..\..\build\bin\Setup64\ClassicIE_64.pdb Output\PDBx64 > nul - copy /B Output\x64\ClassicIE_64.exe Output\PDBx64 > nul -) +REM IE 64 +copy /B ..\..\build\bin\Setup64\ClassicIEDLL_64.pdb Output\PDB64 > nul +copy /B Output\x64\ClassicIEDLL_64.dll Output\PDB64 > nul +copy /B ..\..\build\bin\Setup64\ClassicIE_64.pdb Output\PDB64 > nul +copy /B Output\x64\ClassicIE_64.exe Output\PDB64 > nul + +REM IE ARM64 +copy /B ..\..\build\bin\SetupARM64\ClassicIEDLL_A64.pdb Output\PDBARM64 > nul +copy /B Output\ARM64\ClassicIEDLL_A64.dll Output\PDBARM64 > nul +copy /B ..\..\build\bin\SetupARM64\ClassicIE_A64.pdb Output\PDBARM64 > nul +copy /B Output\ARM64\ClassicIE_A64.exe Output\PDBARM64 > nul REM Menu 32 copy /B ..\..\build\bin\Setup\StartMenu.pdb Output\PDB32 > nul @@ -140,23 +132,21 @@ copy /B Output\Update.exe Output\PDB32 > nul copy /B ..\..\build\bin\Release\DesktopToasts.pdb Output\PDB32 > nul copy /B Output\DesktopToasts.dll Output\PDB32 > nul -if %ARCH%==ARM64 ( - REM Menu ARM64 - copy /B ..\..\build\bin\SetupARM64\StartMenu.pdb Output\PDBARM64 > nul - copy /B Output\ARM64\StartMenu.exe Output\PDBARM64 > nul - copy /B ..\..\build\bin\SetupARM64\StartMenuDLL.pdb Output\PDBARM64 > nul - copy /B Output\ARM64\StartMenuDLL.dll Output\PDBARM64 > nul - copy /B ..\..\build\bin\StartMenuHelper\SetupARM64\StartMenuHelperARM64.pdb Output\PDBARM64 > nul - copy /B Output\ARM64\StartMenuHelperARM64.dll Output\PDBARM64 > nul -) else ( - REM Menu x64 - copy /B ..\..\build\bin\Setup64\StartMenu.pdb Output\PDBx64 > nul - copy /B Output\x64\StartMenu.exe Output\PDBx64 > nul - copy /B ..\..\build\bin\Setup64\StartMenuDLL.pdb Output\PDBx64 > nul - copy /B Output\x64\StartMenuDLL.dll Output\PDBx64 > nul - copy /B ..\..\build\bin\StartMenuHelper\Setup64\StartMenuHelper64.pdb Output\PDBx64 > nul - copy /B Output\x64\StartMenuHelper64.dll Output\PDBx64 > nul -) +REM Menu 64 +copy /B ..\..\build\bin\Setup64\StartMenu.pdb Output\PDB64 > nul +copy /B Output\x64\StartMenu.exe Output\PDB64 > nul +copy /B ..\..\build\bin\Setup64\StartMenuDLL.pdb Output\PDB64 > nul +copy /B Output\x64\StartMenuDLL.dll Output\PDB64 > nul +copy /B ..\..\build\bin\Setup64\StartMenuHelper64.pdb Output\PDB64 > nul +copy /B Output\x64\StartMenuHelper64.dll Output\PDB64 > nul + +REM Menu ARM64 +copy /B ..\..\build\bin\SetupARM64\StartMenu.pdb Output\PDBARM64 > nul +copy /B Output\ARM64\StartMenu.exe Output\PDBARM64 > nul +copy /B ..\..\build\bin\SetupARM64\StartMenuDLL.pdb Output\PDBARM64 > nul +copy /B Output\ARM64\StartMenuDLL.dll Output\PDBARM64 > nul +copy /B ..\..\build\bin\SetupARM64\StartMenuHelperA64.pdb Output\PDBARM64 > nul +copy /B Output\ARM64\StartMenuHelperA64.dll Output\PDBARM64 > nul REM ********* Source Index PDBs @@ -174,7 +164,7 @@ if exist %PDBSTR_PATH% ( ) ) - for %%f in (Output\PDBx64\*.pdb) do ( + for %%f in (Output\PDB64\*.pdb) do ( %PDBSTR_PATH% -w -p:%%f -s:srcsrv -i:Output\pdbstr.txt if not ERRORLEVEL 0 ( echo Error adding source index to PDB @@ -196,13 +186,13 @@ REM ********* Prepare symbols set SYMSTORE_PATH="C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\symstore.exe" %SYMSTORE_PATH% add /r /f Output\PDB32 /s Output\symbols /t OpenShell -:NOREFS > nul -%SYMSTORE_PATH% add /r /f Output\PDBx64 /s Output\symbols /t OpenShell -:NOREFS > nul +%SYMSTORE_PATH% add /r /f Output\PDB64 /s Output\symbols /t OpenShell -:NOREFS > nul %SYMSTORE_PATH% add /r /f Output\PDBARM64 /s Output\symbols /t OpenShell -:NOREFS > nul rd /Q /S Output\symbols\000Admin > nul del Output\symbols\pingme.txt > nul rd /Q /S Output\PDB32 -rd /Q /S Output\PDBx64 +rd /Q /S Output\PDB64 rd /Q /S Output\PDBARM64 REM ********* Build ADMX diff --git a/Src/Setup/BuildInstaller.bat b/Src/Setup/BuildInstaller.bat index 30b8d1e7c..42d444554 100644 --- a/Src/Setup/BuildInstaller.bat +++ b/Src/Setup/BuildInstaller.bat @@ -24,13 +24,6 @@ echo -- Building Installer (%CS_LANG_NAME_SHORT%) SET CS_INSTALLER_NAME=OpenShellSetup_%CS_VERSION_STR%-%CS_LANG_NAME_SHORT% if %CS_LANG_NAME_SHORT%==en SET CS_INSTALLER_NAME=OpenShellSetup_%CS_VERSION_STR% -if %ARCH%==ARM64 SET CS_INSTALLER_NAME=%CS_INSTALLER_NAME%_ARM64 - -SET CS_SETUP_ARCH=Win32 -if %ARCH%==ARM64 SET CS_SETUP_ARCH=ARM64 - -SET CS_SETUP_DIR=Release -if %ARCH%==ARM64 SET CS_SETUP_DIR=%CS_SETUP_DIR%ARM64 if exist Temp rd /Q /S Temp md Temp @@ -43,56 +36,50 @@ md Temp @set /a "CS_VERSION_NUM=%%A<<24|%%B<<16|%%C" ) -if %ARCH%==ARM64 ( - REM ********* Build ARM64 MSI - echo --- ARM64 MSI - candle Setup.wxs -nologo -out Temp\SetupARM64.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=0 -dARM64=1 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME% - if ERRORLEVEL 1 exit /b 1 - - REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs - REM We need to suppress ICE09 because the helper DLLs need to go into the system directory (for safety reasons) - light Temp\SetupARM64.wixobj -nologo -out Temp\SetupARM64.msi -ext WixUIExtension -ext WixUtilExtension -loc ..\Localization\%CS_LANG_FOLDER%\OpenShellText-%CS_LANG_NAME%.wxl -loc ..\Localization\%CS_LANG_FOLDER%\WixUI_%CS_LANG_NAME%.wxl -sice:ICE38 -sice:ICE43 -sice:ICE09 - if ERRORLEVEL 1 exit /b 1 -) else ( - REM ********* Build x86 MSI - echo --- x86 MSI - candle Setup.wxs -nologo -out Temp\Setup32.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=0 -dARM64=0 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME% - if ERRORLEVEL 1 exit /b 1 - - REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs - REM We need to suppress ICE09 because the helper DLLs need to go into the system directory (for safety reasons) - light Temp\Setup32.wixobj -nologo -out Temp\Setup32.msi -ext WixUIExtension -ext WixUtilExtension -loc ..\Localization\%CS_LANG_FOLDER%\OpenShellText-%CS_LANG_NAME%.wxl -loc ..\Localization\%CS_LANG_FOLDER%\WixUI_%CS_LANG_NAME%.wxl -sice:ICE38 -sice:ICE43 -sice:ICE09 - if ERRORLEVEL 1 exit /b 1 - - REM ********* Build x64 MSI - echo --- x64 MSI - candle Setup.wxs -nologo -out Temp\Setup64.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=1 -dARM64=0 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME% - if ERRORLEVEL 1 exit /b 1 - - REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs - REM We need to suppress ICE09 because the helper DLLs need to go into the system directory (for safety reasons) - light Temp\Setup64.wixobj -nologo -out Temp\Setup64.msi -ext WixUIExtension -ext WixUtilExtension -loc ..\Localization\%CS_LANG_FOLDER%\OpenShellText-%CS_LANG_NAME%.wxl -loc ..\Localization\%CS_LANG_FOLDER%\WixUI_%CS_LANG_NAME%.wxl -sice:ICE38 -sice:ICE43 -sice:ICE09 - if ERRORLEVEL 1 exit /b 1 -) +REM ********* Build x86 MSI +echo --- x86 MSI +candle Setup.wxs -nologo -out Temp\Setup32.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=0 -dARM64=0 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME% +@if ERRORLEVEL 1 exit /b 1 + +@REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs +@REM We need to suppress ICE09 because the helper DLLs need to go into the system directory (for safety reasons) +light Temp\Setup32.wixobj -nologo -out Temp\Setup32.msi -ext WixUIExtension -ext WixUtilExtension -loc ..\Localization\%CS_LANG_FOLDER%\OpenShellText-%CS_LANG_NAME%.wxl -loc ..\Localization\%CS_LANG_FOLDER%\WixUI_%CS_LANG_NAME%.wxl -sice:ICE38 -sice:ICE43 -sice:ICE09 +@if ERRORLEVEL 1 exit /b 1 + +REM ********* Build x64 MSI +echo --- x64 MSI +candle Setup.wxs -nologo -out Temp\Setup64.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=1 -dARM64=0 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME% +@if ERRORLEVEL 1 exit /b 1 + +@REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs +@REM We need to suppress ICE09 because the helper DLLs need to go into the system directory (for safety reasons) +light Temp\Setup64.wixobj -nologo -out Temp\Setup64.msi -ext WixUIExtension -ext WixUtilExtension -loc ..\Localization\%CS_LANG_FOLDER%\OpenShellText-%CS_LANG_NAME%.wxl -loc ..\Localization\%CS_LANG_FOLDER%\WixUI_%CS_LANG_NAME%.wxl -sice:ICE38 -sice:ICE43 -sice:ICE09 +@if ERRORLEVEL 1 exit /b 1 + +REM ********* Build ARM64 MSI +echo --- ARM64 MSI +candle Setup.wxs -nologo -out Temp\SetupARM64.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=0 -dARM64=1 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME% +@if ERRORLEVEL 1 exit /b 1 + +@REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs +@REM We need to suppress ICE09 because the helper DLLs need to go into the system directory (for safety reasons) +light Temp\SetupARM64.wixobj -nologo -out Temp\SetupARM64.msi -ext WixUIExtension -ext WixUtilExtension -loc ..\Localization\%CS_LANG_FOLDER%\OpenShellText-%CS_LANG_NAME%.wxl -loc ..\Localization\%CS_LANG_FOLDER%\WixUI_%CS_LANG_NAME%.wxl -sice:ICE38 -sice:ICE43 -sice:ICE09 +@if ERRORLEVEL 1 exit /b 1 REM ********* Build MSI Checksums echo --- MSI Checksums -if %ARCH%==ARM64 ( - ..\..\build\bin\Release\Utility.exe crcarm64msi Temp -) else ( - ..\..\build\bin\Release\Utility.exe crcmsi Temp -) +..\..\build\bin\Release\Utility.exe crcmsi Temp @if ERRORLEVEL 1 exit /b 1 REM ********* Build bootstrapper echo --- Bootstrapper for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -products * -requires Microsoft.Component.MSBuild -property installationPath`) do set MSBuildDir=%%i\MSBuild\Current\Bin\ -"%MSBuildDir%MSBuild.exe" Setup.sln /m /t:Rebuild /p:Configuration="Release" /p:Platform="%CS_SETUP_ARCH%" /verbosity:quiet /nologo +"%MSBuildDir%MSBuild.exe" Setup.sln /m /t:Rebuild /p:Configuration="Release" /p:Platform="Win32" /verbosity:quiet /nologo @if ERRORLEVEL 1 exit /b 1 -if exist Final\%CS_INSTALLER_NAME%.exe del Final\%CS_INSTALLER_NAME%.exe > nul -md Final 1> nul 2>&1 +if exist Final rd /Q /S Final +md Final copy /B ..\..\build\bin\Release\Setup.exe Final\%CS_INSTALLER_NAME%.exe > nul diff --git a/Src/Setup/Setup.cpp b/Src/Setup/Setup.cpp index 3a7d3a06c..c7c144e20 100644 --- a/Src/Setup/Setup.cpp +++ b/Src/Setup/Setup.cpp @@ -12,7 +12,7 @@ #include "StringUtils.h" #include "FNVHash.h" -// Setup.exe is a bootstrap application that contains installers for x86 and x64 or ARM64. +// Setup.exe is a bootstrap application that contains installers for x86, x64 and ARM64. // It unpacks the right installer into the temp directory and executes it. typedef BOOL (WINAPI *FIsWow64Process)( HANDLE hProcess, PBOOL Wow64Process ); @@ -81,13 +81,21 @@ static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, ExtractType } return ERR_HASH_NOTFOUND; } - unsigned int hash0=((unsigned int*)pRes)[extractType==x64?1:0]; + unsigned int hash0=((unsigned int*)pRes)[extractType-1]; const Chunk *pChunks=NULL; int chunkCount=0; if (extractType==x64) { - chunkCount=((unsigned int*)pRes)[2]; - pChunks=(Chunk*)((unsigned int*)pRes+3); + chunkCount=((unsigned int*)pRes)[3]; + pChunks=(Chunk*)((unsigned int*)pRes+4); + } + if (extractType==ARM64) + { + int x64chunkCount=((unsigned int*)pRes)[3]; + const Chunk *px64Chunks=(Chunk*)((unsigned int*)pRes+4); + + chunkCount=((unsigned int*)(px64Chunks+x64chunkCount))[0]; + pChunks = (Chunk*)((unsigned int*)(px64Chunks+x64chunkCount)+1); } // extract the installer @@ -98,7 +106,7 @@ static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, ExtractType HGLOBAL hRes=LoadResource(hInstance,hResInfo); pRes32=(unsigned char*)LockResource(hRes); } - if (!pRes32 && extractType!=ARM64) + if (!pRes32) { if (!bQuiet) { @@ -110,19 +118,19 @@ static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, ExtractType } return ERR_MSIRES_NOTFOUND; } - const unsigned char *pResx64=NULL, *pResArm64=NULL; + const unsigned char *pRes64=NULL, *pResArm64=NULL; int size32=SizeofResource(hInstance,hResInfo); unsigned int hash; - int sizex64=0, sizeArm64=0; + int size64=0, sizeArm64=0; if (extractType==x64) { HRSRC hResInfo=FindResource(hInstance,MAKEINTRESOURCE(IDR_MSI_FILE64),L"MSI_FILE"); if (hResInfo) { HGLOBAL hRes=LoadResource(hInstance,hResInfo); - pResx64=(unsigned char*)LockResource(hRes); + pRes64=(unsigned char*)LockResource(hRes); } - if (!pResx64) + if (!pRes64) { if (!bQuiet) { @@ -135,7 +143,7 @@ static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, ExtractType return ERR_MSIRES_NOTFOUND; } - sizex64=SizeofResource(hInstance,hResInfo); + size64=SizeofResource(hInstance,hResInfo); hash=FNV_HASH0; int start=0; int pos=0; @@ -143,13 +151,13 @@ static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, ExtractType { const Chunk &chunk=pChunks[i]; if (start - runs the installer normally\n extract32 - extracts the 32-bit MSI\n extract64 - extracts the 64-bit MSI\n help, /? - shows the command line help\n - the options are passed to msiexec\n * if the options contain %MSI% (all caps) the token is replaced by the name of the extracted MSI file\n * if %MSI% is not found, the setup runs ""msiexec /i ""\n * run msiexec with no parameters to see the full list of msiexec options\n\nExamples:\n /qn - runs the installer in quiet mode\n /x %MSI% /qb - uninstalls the product in basic UI level\n /f %MSI% - repairs the product\n /l* log.txt - runs the installer and logs the process in the log.txt file\n /qn ADDLOCAL=ClassicExplorer - installs only Classic Explorer in quiet mode\n /qn ADDLOCAL=StartMenu APPLICATIONFOLDER=C:\\OpenShell - installs only Open-Shell Start Menu in quiet mode in the folder C:\\OpenShell\n ADDLOCAL=StartMenu,ClassicIE - runs the installer in full UI mode with Open-Shell Start Menu and Classic IE checked by default" + IDS_HELP "Open-Shell Setup will install Open-Shell on your computer. Possible command lines:\n - runs the installer normally\n extract32 - extracts the 32-bit MSI\n extract64 - extracts the 64-bit MSI\n extractARM64 - extracts the ARM64 MSI\n help, /? - shows the command line help\n - the options are passed to msiexec\n * if the options contain %MSI% (all caps) the token is replaced by the name of the extracted MSI file\n * if %MSI% is not found, the setup runs ""msiexec /i ""\n * run msiexec with no parameters to see the full list of msiexec options\n\nExamples:\n /qn - runs the installer in quiet mode\n /x %MSI% /qb - uninstalls the product in basic UI level\n /f %MSI% - repairs the product\n /l* log.txt - runs the installer and logs the process in the log.txt file\n /qn ADDLOCAL=ClassicExplorer - installs only Classic Explorer in quiet mode\n /qn ADDLOCAL=StartMenu APPLICATIONFOLDER=C:\\OpenShell - installs only Open-Shell Start Menu in quiet mode in the folder C:\\OpenShell\n ADDLOCAL=StartMenu,ClassicIE - runs the installer in full UI mode with Open-Shell Start Menu and Classic IE checked by default" END #endif // English (U.S.) resources diff --git a/Src/Setup/Setup.sln b/Src/Setup/Setup.sln index c25994faa..e805f6e7d 100644 --- a/Src/Setup/Setup.sln +++ b/Src/Setup/Setup.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31005.135 +# Visual Studio 15 +VisualStudioVersion = 15.0.27130.2010 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Setup", "Setup.vcxproj", "{A4A4D3B1-24E7-401E-A37C-72141D7603DC}" EndProject @@ -9,32 +9,22 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Lib", "..\Lib\Lib.vcxproj", EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|ARM64 = Debug|ARM64 Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 - Release|ARM64 = Release|ARM64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|ARM64.Build.0 = Debug|ARM64 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|Win32.ActiveCfg = Debug|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|Win32.Build.0 = Debug|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|x64.ActiveCfg = Debug|Win32 - {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|ARM64.ActiveCfg = Release|ARM64 - {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|ARM64.Build.0 = Release|ARM64 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|Win32.ActiveCfg = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|Win32.Build.0 = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|x64.ActiveCfg = Release|Win32 - {D42FE717-485B-492D-884A-1999F6D51154}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {D42FE717-485B-492D-884A-1999F6D51154}.Debug|ARM64.Build.0 = Debug|ARM64 {D42FE717-485B-492D-884A-1999F6D51154}.Debug|Win32.ActiveCfg = Debug|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Debug|Win32.Build.0 = Debug|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Debug|x64.ActiveCfg = Debug|x64 {D42FE717-485B-492D-884A-1999F6D51154}.Debug|x64.Build.0 = Debug|x64 - {D42FE717-485B-492D-884A-1999F6D51154}.Release|ARM64.ActiveCfg = Release|ARM64 - {D42FE717-485B-492D-884A-1999F6D51154}.Release|ARM64.Build.0 = Release|ARM64 {D42FE717-485B-492D-884A-1999F6D51154}.Release|Win32.ActiveCfg = Release|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Release|Win32.Build.0 = Release|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Release|x64.ActiveCfg = Release|x64 diff --git a/Src/Setup/Setup.vcxproj b/Src/Setup/Setup.vcxproj index f681e86e0..090492dce 100644 --- a/Src/Setup/Setup.vcxproj +++ b/Src/Setup/Setup.vcxproj @@ -1,18 +1,10 @@ - - Debug - ARM64 - Debug Win32 - - Release - ARM64 - Release Win32 @@ -45,10 +37,6 @@ comctl32.lib;Psapi.lib;version.lib;%(AdditionalDependencies) - - _M_IX86=1;_X86_=1;%(PreprocessorDefinitions) - _M_ARM64=1;_ARM64_=1;%(PreprocessorDefinitions) - @@ -74,18 +62,9 @@ - - true - true - - - true - true - - - true - true - + + + diff --git a/Src/Setup/Utility/Utility.cpp b/Src/Setup/Utility/Utility.cpp index 957312386..3cc524f4a 100644 --- a/Src/Setup/Utility/Utility.cpp +++ b/Src/Setup/Utility/Utility.cpp @@ -78,7 +78,7 @@ struct Chunk int start1, start2, len; }; -int CalcMsiChecksum( wchar_t *const *params, int count, bool bArm64 ) +int CalcMsiChecksum( wchar_t *const *params, int count ) { if (count<2) return 2; @@ -86,11 +86,8 @@ int CalcMsiChecksum( wchar_t *const *params, int count, bool bArm64 ) // load files wchar_t path1[_MAX_PATH]; - std::vector buf1, buf2; - if (!bArm64) - Sprintf(path1,_countof(path1),L"%s\\Setup32.msi",params[1]); - else - Sprintf(path1,_countof(path1),L"%s\\SetupARM64.msi",params[1]); + std::vector buf1, buf2, buf3; + Sprintf(path1,_countof(path1),L"%s\\Setup32.msi",params[1]); LoadFile(path1,buf1); if (buf1.empty()) { @@ -98,61 +95,94 @@ int CalcMsiChecksum( wchar_t *const *params, int count, bool bArm64 ) return 1; } wchar_t path2[_MAX_PATH]; - if (!bArm64) + Sprintf(path2,_countof(path2),L"%s\\Setup64.msi",params[1]); + LoadFile(path2,buf2); + if (buf2.empty()) { - Sprintf(path2,_countof(path2),L"%s\\Setup64.msi",params[1]); - LoadFile(path2,buf2); - if (buf2.empty()) - { - Printf("Failed to open file %s\n",path2); - return 1; - } + Printf("Failed to open file %s\n",path2); + return 1; + } + wchar_t path3[_MAX_PATH]; + Sprintf(path3,_countof(path3),L"%s\\SetupARM64.msi",params[1]); + LoadFile(path3,buf3); + if (buf3.empty()) + { + Printf("Failed to open file %s\n",path3); + return 1; } int len1=(int)buf1.size(); int len2=(int)buf2.size(); + int len3=(int)buf3.size(); for (std::vector::iterator it=buf1.begin();it!=buf1.end();++it) *it^=0xFF; for (std::vector::iterator it=buf2.begin();it!=buf2.end();++it) *it^=0xFF; + for (std::vector::iterator it=buf3.begin();it!=buf3.end();++it) + *it^=0xFF; + const int BLOCK_SIZE = 256 * 1024; // detect x86/x64 common blocks (assuming at least 256K in size and in the same order in both files) std::vector chunks; - if (!bArm64) + for (int i=0,start2=0;i0 && chunk.start2>0 && buf1[chunk.start1-1]==buf2[chunk.start2-1]) { - Chunk chunk; - chunk.start1=i; - chunk.start2=j; - chunk.len=BLOCK_SIZE; - while (chunk.start1>0 && chunk.start2>0 && buf1[chunk.start1-1]==buf2[chunk.start2-1]) - { - chunk.start1--; - chunk.start2--; - chunk.len++; - } - while (chunk.start1+chunk.len chunks2; + for (int i=0,start2=0;i0 && chunk.start2>0 && buf1[chunk.start1-1]==buf3[chunk.start2-1]) + { + chunk.start1--; + chunk.start2--; + chunk.len++; } + while (chunk.start1+chunk.len::const_iterator it=chunks2.begin();it!=chunks2.end();++it) + { + if (it->start2-start>0) + fwrite(&buf3[start],1,it->start2-start,f); + start=it->start2+it->len; + } + if (len3-start>0) + fwrite(&buf3[start],1,len3-start,f); + fclose(f); + } + + unsigned int fnvs[3]; fnvs[0]=CalcFNVHash(&buf1[0],len1,FNV_HASH0); - fnvs[1]=bArm64?0:CalcFNVHash(&buf2[0],len2,FNV_HASH0); + fnvs[1]=CalcFNVHash(&buf2[0],len2,FNV_HASH0); + fnvs[2]=CalcFNVHash(&buf3[0],len3,FNV_HASH0); // save fnvs and chunks { @@ -203,6 +254,9 @@ int CalcMsiChecksum( wchar_t *const *params, int count, bool bArm64 ) int count=(int)chunks.size(); fwrite(&count,1,4,f); fwrite(&chunks[0],sizeof(Chunk),count,f); + count=(int)chunks2.size(); + fwrite(&count,1,4,f); + fwrite(&chunks2[0],sizeof(Chunk),count,f); fclose(f); } return 0; @@ -851,8 +905,7 @@ static HRESULT CALLBACK TaskDialogCallback( HWND hwnd, UINT uNotification, WPARA // Open-Shell utility - multiple utilities for building and maintaining Open-Shell // Usage: // no parameters - saves a troubleshooting log -// crcmsi // creates a file with checksum of the x86 and x64 msi files -// crcarm64msi // creates a file with checksum of the ARM64 msi file +// crcmsi // creates a file with checksum of all msi files // makeEN // extracts the localization resources and creates a sample en-US.DLL // extract // extracts the string table, the dialog text, and the L10N text from a DLL and stores it in a CSV // extract en-us.dll // extracts the string table, the dialog text, and the L10N text from two DLL and stores it in a CSV @@ -917,12 +970,7 @@ int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpstrC #ifndef _WIN64 if (_wcsicmp(params[0],L"crcmsi")==0) { - return CalcMsiChecksum(params,count,false); - } - - if (_wcsicmp(params[0],L"crcarm64msi")==0) - { - return CalcMsiChecksum(params,count,true); + return CalcMsiChecksum(params,count); } if (_wcsicmp(params[0],L"makeEN")==0) diff --git a/Src/Setup/__MakeFinal.bat b/Src/Setup/__MakeFinal.bat index 5d37f20cd..d1b1ebbf3 100644 --- a/Src/Setup/__MakeFinal.bat +++ b/Src/Setup/__MakeFinal.bat @@ -1,9 +1,4 @@ @echo off - -rem Default to x86/x64 unless we are building for ARM64 -set ARCH=%1 -if "%ARCH%"=="" set ARCH=x86_x64 - set PATH=C:\Program Files\7-Zip\;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\WiX Toolset v3.14\bin\;%PATH% cd %~dp0 diff --git a/Src/Setup/__MakeFinalARM64.bat b/Src/Setup/__MakeFinalARM64.bat deleted file mode 100644 index e2bd17c3f..000000000 --- a/Src/Setup/__MakeFinalARM64.bat +++ /dev/null @@ -1,7 +0,0 @@ -@echo off -cd %~dp0 - -call __MakeFinal.bat ARM64 -if ERRORLEVEL 1 exit /b 1 - -exit /b 0 diff --git a/Src/Setup/__MakeFinalAllLanguages.bat b/Src/Setup/__MakeFinalAllLanguages.bat index da1a6055a..161527007 100644 --- a/Src/Setup/__MakeFinalAllLanguages.bat +++ b/Src/Setup/__MakeFinalAllLanguages.bat @@ -1,10 +1,6 @@ @echo off rem This file is to create all the files required for a new release to publish -rem Default to x86/x64 unless we are building for ARM64 -set ARCH=%1 -if "%ARCH%"=="" set ARCH=x86_x64 - set PATH=C:\Program Files\7-Zip\;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\WiX Toolset v3.14\bin\;%PATH% cd %~dp0 diff --git a/Src/Setup/__MakeFinalAllLanguagesARM64.bat b/Src/Setup/__MakeFinalAllLanguagesARM64.bat deleted file mode 100644 index 472c4c778..000000000 --- a/Src/Setup/__MakeFinalAllLanguagesARM64.bat +++ /dev/null @@ -1,7 +0,0 @@ -@echo off -cd %~dp0 - -call __MakeFinalAllLanguages.bat ARM64 -if ERRORLEVEL 1 exit /b 1 - -exit /b 0 From 72de1d47d7a825e83abbf454ce3a8e07cffddd21 Mon Sep 17 00:00:00 2001 From: ge0rdi Date: Fri, 2 May 2025 21:47:10 +0200 Subject: [PATCH 10/12] Fix sln --- Src/OpenShell.sln | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Src/OpenShell.sln b/Src/OpenShell.sln index 0c8ac4aea..c53d1eb2f 100644 --- a/Src/OpenShell.sln +++ b/Src/OpenShell.sln @@ -153,7 +153,7 @@ Global {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|Win32.Build.0 = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|x64.ActiveCfg = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|x64.Build.0 = Release|Win32 - {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Setup|ARM64.ActiveCfg = Release|ARM64 + {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Setup|ARM64.ActiveCfg = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Setup|Win32.ActiveCfg = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Setup|x64.ActiveCfg = Release|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Debug|ARM64.ActiveCfg = Resource|Win32 From 02cfdc65bc3949fa63b84132e05a382d3c4a96c1 Mon Sep 17 00:00:00 2001 From: ge0rdi Date: Fri, 2 May 2025 23:02:58 +0200 Subject: [PATCH 11/12] Build some DLLs as ARM64X These are meant to be loaded to both x64 and ARM64 processes. We will compile them as ARM64X (when building for ARM64). That way they will contain both x64 and ARM64 code paths. https://learn.microsoft.com/en-us/windows/arm/arm64x-pe --- Src/ClassicExplorer/ClassicExplorer.vcxproj | 19 ++++++++++-- .../ClassicExplorer.vcxproj.filters | 3 -- Src/ClassicExplorer/ClassicExplorerA64.def | 13 -------- Src/ClassicIE/ClassicIE.cpp | 4 +-- Src/ClassicIE/ClassicIE.vcxproj | 2 +- Src/ClassicIE/ClassicIEDLL/ClassicIEBHO.cpp | 4 --- .../ClassicIEDLL/ClassicIEDLL.vcxproj | 19 ++++++++++-- .../ClassicIEDLL/ClassicIEDLL.vcxproj.filters | 5 +-- .../ClassicIEDLL/ClassicIEDLL_A64.def | 10 ------ Src/Common.props | 4 +++ Src/Lib/Lib.vcxproj | 11 +++++++ Src/Setup/BuildBinaries.bat | 24 +++++++------- Src/Setup/Setup.wxs | 31 +++++++------------ Src/Setup/Utility/ManualUninstall.cpp | 14 +-------- Src/StartMenu/StartMenu.cpp | 8 ++--- .../StartMenuHelper/StartMenuHelper.vcxproj | 19 ++++++++++-- .../StartMenuHelper.vcxproj.filters | 3 -- .../StartMenuHelper/StartMenuHelperA64.def | 10 ------ 18 files changed, 95 insertions(+), 108 deletions(-) delete mode 100644 Src/ClassicExplorer/ClassicExplorerA64.def delete mode 100644 Src/ClassicIE/ClassicIEDLL/ClassicIEDLL_A64.def delete mode 100644 Src/StartMenu/StartMenuHelper/StartMenuHelperA64.def diff --git a/Src/ClassicExplorer/ClassicExplorer.vcxproj b/Src/ClassicExplorer/ClassicExplorer.vcxproj index 28d4508c9..2ec90585b 100644 --- a/Src/ClassicExplorer/ClassicExplorer.vcxproj +++ b/Src/ClassicExplorer/ClassicExplorer.vcxproj @@ -5,6 +5,10 @@ Debug ARM64 + + Debug + ARM64EC + Debug Win32 @@ -17,6 +21,10 @@ Release ARM64 + + Release + ARM64EC + Release Win32 @@ -29,6 +37,10 @@ Setup ARM64 + + Setup + ARM64EC + Setup Win32 @@ -65,8 +77,12 @@ $(ProjectName)64 + + $(ProjectName)64 + - $(ProjectName)A64 + $(ProjectName)64 + true true @@ -113,7 +129,6 @@ - diff --git a/Src/ClassicExplorer/ClassicExplorer.vcxproj.filters b/Src/ClassicExplorer/ClassicExplorer.vcxproj.filters index ad1839dff..419ebce35 100644 --- a/Src/ClassicExplorer/ClassicExplorer.vcxproj.filters +++ b/Src/ClassicExplorer/ClassicExplorer.vcxproj.filters @@ -80,9 +80,6 @@ Resource Files - - Source Files - diff --git a/Src/ClassicExplorer/ClassicExplorerA64.def b/Src/ClassicExplorer/ClassicExplorerA64.def deleted file mode 100644 index 62d44e39f..000000000 --- a/Src/ClassicExplorer/ClassicExplorerA64.def +++ /dev/null @@ -1,13 +0,0 @@ -; ClassicExplorer.def : Declares the module parameters. - -LIBRARY "ClassicExplorerA64.DLL" - -EXPORTS - DllCanUnloadNow PRIVATE - DllGetClassObject PRIVATE - DllRegisterServer PRIVATE - DllUnregisterServer PRIVATE - DllInstall PRIVATE - ShowExplorerSettings - DllImportSettingsXml - DllExportSettingsXml diff --git a/Src/ClassicIE/ClassicIE.cpp b/Src/ClassicIE/ClassicIE.cpp index fcbe51eeb..9850aaef1 100644 --- a/Src/ClassicIE/ClassicIE.cpp +++ b/Src/ClassicIE/ClassicIE.cpp @@ -189,10 +189,8 @@ int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdL } } -#if defined(_M_AMD64) +#ifdef _WIN64 HMODULE hHookModule=GetModuleHandle(L"ClassicIEDLL_64.dll"); -#elif defined(_M_ARM64) - HMODULE hHookModule=GetModuleHandle(L"ClassicIEDLL_A64.dll"); #else HMODULE hHookModule=GetModuleHandle(L"ClassicIEDLL_32.dll"); #endif diff --git a/Src/ClassicIE/ClassicIE.vcxproj b/Src/ClassicIE/ClassicIE.vcxproj index e6c607a3f..83f8308ba 100644 --- a/Src/ClassicIE/ClassicIE.vcxproj +++ b/Src/ClassicIE/ClassicIE.vcxproj @@ -66,7 +66,7 @@ $(ProjectName)_64 - $(ProjectName)_A64 + $(ProjectName)_64 diff --git a/Src/ClassicIE/ClassicIEDLL/ClassicIEBHO.cpp b/Src/ClassicIE/ClassicIEDLL/ClassicIEBHO.cpp index 7cf550fe4..5322fcf92 100644 --- a/Src/ClassicIE/ClassicIEDLL/ClassicIEBHO.cpp +++ b/Src/ClassicIE/ClassicIEDLL/ClassicIEBHO.cpp @@ -50,11 +50,7 @@ static DWORD StartBroker( bool bWait, const wchar_t *param ) PathAppend(path,L"ClassicIE_32.exe"); else #endif -#if defined(_M_AMD64) || defined(_M_IX86) PathAppend(path,L"ClassicIE_64.exe"); -#elif defined(_M_ARM64) - PathAppend(path,L"ClassicIE_A64.exe"); -#endif wchar_t cmdLine[1024]; Sprintf(cmdLine,_countof(cmdLine),L"\"%s\" %s",path,param); diff --git a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj index 0b6bfba88..10ea42734 100644 --- a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj +++ b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj @@ -5,6 +5,10 @@ Debug ARM64 + + Debug + ARM64EC + Debug Win32 @@ -17,6 +21,10 @@ Release ARM64 + + Release + ARM64EC + Release Win32 @@ -29,6 +37,10 @@ Setup ARM64 + + Setup + ARM64EC + Setup Win32 @@ -65,8 +77,12 @@ $(ProjectName)_64 + + $(ProjectName)_64 + - $(ProjectName)_A64 + $(ProjectName)_64 + true @@ -107,7 +123,6 @@ - diff --git a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters index ea2e5223a..8f49852ad 100644 --- a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters +++ b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters @@ -58,9 +58,6 @@ Resource Files - - Source Files - @@ -101,4 +98,4 @@ Resource Files - + \ No newline at end of file diff --git a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL_A64.def b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL_A64.def deleted file mode 100644 index d959f1819..000000000 --- a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL_A64.def +++ /dev/null @@ -1,10 +0,0 @@ -; ClassicIEDLL.def : Declares the module parameters. - -LIBRARY "ClassicIEDLL_A64.DLL" - -EXPORTS - DllCanUnloadNow PRIVATE - DllGetClassObject PRIVATE - DllRegisterServer PRIVATE - DllUnregisterServer PRIVATE - DllInstall PRIVATE diff --git a/Src/Common.props b/Src/Common.props index 307dd8033..2a0a2ceee 100644 --- a/Src/Common.props +++ b/Src/Common.props @@ -20,6 +20,10 @@ $(MSBuildThisFileDirectory)..\build\bin\$(Configuration)ARM64\ $(MSBuildThisFileDirectory)..\build\obj\$(ProjectName)\$(Configuration)ARM64\ + + $(MSBuildThisFileDirectory)..\build\bin\$(Configuration)ARM64EC\ + $(MSBuildThisFileDirectory)..\build\obj\$(ProjectName)\$(Configuration)ARM64EC\ + diff --git a/Src/Lib/Lib.vcxproj b/Src/Lib/Lib.vcxproj index ae61b1260..8c29ee77c 100644 --- a/Src/Lib/Lib.vcxproj +++ b/Src/Lib/Lib.vcxproj @@ -5,6 +5,10 @@ Debug ARM64 + + Debug + ARM64EC + Debug Win32 @@ -17,6 +21,10 @@ Release ARM64 + + Release + ARM64EC + Release Win32 @@ -50,6 +58,9 @@ $(IntDir) + + true + _LIB;%(PreprocessorDefinitions) diff --git a/Src/Setup/BuildBinaries.bat b/Src/Setup/BuildBinaries.bat index b195dd252..0241c892e 100644 --- a/Src/Setup/BuildBinaries.bat +++ b/Src/Setup/BuildBinaries.bat @@ -51,12 +51,12 @@ copy /B ..\..\build\bin\Release\Update.exe Output > nul copy /B ..\..\build\bin\Release\DesktopToasts.dll Output > nul copy /B ..\..\build\bin\Release\SetupHelper.exe Output > nul -copy /B ..\..\build\bin\SetupARM64\ClassicExplorerA64.dll Output\ARM64 > nul -copy /B ..\..\build\bin\SetupARM64\ClassicIEDLL_A64.dll Output\ARM64 > nul -copy /B ..\..\build\bin\SetupARM64\ClassicIE_A64.exe Output\ARM64 > nul +copy /B ..\..\build\bin\SetupARM64\ClassicExplorer64.dll Output\ARM64 > nul +copy /B ..\..\build\bin\SetupARM64\ClassicIEDLL_64.dll Output\ARM64 > nul +copy /B ..\..\build\bin\SetupARM64\ClassicIE_64.exe Output\ARM64 > nul copy /B ..\..\build\bin\SetupARM64\StartMenu.exe Output\ARM64 > nul copy /B ..\..\build\bin\SetupARM64\StartMenuDLL.dll Output\ARM64 > nul -copy /B ..\..\build\bin\SetupARM64\StartMenuHelperA64.dll Output\ARM64 > nul +copy /B ..\..\build\bin\SetupARM64\StartMenuHelper64.dll Output\ARM64 > nul copy /B ..\..\build\bin\Setup64\ClassicExplorer64.dll Output\x64 > nul copy /B ..\..\build\bin\Setup64\ClassicIEDLL_64.dll Output\x64 > nul @@ -99,8 +99,8 @@ copy /B ..\..\build\bin\Setup64\ClassicExplorer64.pdb Output\PDB64 > nul copy /B Output\x64\ClassicExplorer64.dll Output\PDB64 > nul REM Explorer ARM64 -copy /B ..\..\build\bin\SetupARM64\ClassicExplorerA64.pdb Output\PDBARM64 > nul -copy /B Output\ARM64\ClassicExplorerA64.dll Output\PDBARM64 > nul +copy /B ..\..\build\bin\SetupARM64\ClassicExplorer64.pdb Output\PDBARM64 > nul +copy /B Output\ARM64\ClassicExplorer64.dll Output\PDBARM64 > nul REM IE 32 copy /B ..\..\build\bin\Setup\ClassicIEDLL_32.pdb Output\PDB32 > nul @@ -115,10 +115,10 @@ copy /B ..\..\build\bin\Setup64\ClassicIE_64.pdb Output\PDB64 > nul copy /B Output\x64\ClassicIE_64.exe Output\PDB64 > nul REM IE ARM64 -copy /B ..\..\build\bin\SetupARM64\ClassicIEDLL_A64.pdb Output\PDBARM64 > nul -copy /B Output\ARM64\ClassicIEDLL_A64.dll Output\PDBARM64 > nul -copy /B ..\..\build\bin\SetupARM64\ClassicIE_A64.pdb Output\PDBARM64 > nul -copy /B Output\ARM64\ClassicIE_A64.exe Output\PDBARM64 > nul +copy /B ..\..\build\bin\SetupARM64\ClassicIEDLL_64.pdb Output\PDBARM64 > nul +copy /B Output\ARM64\ClassicIEDLL_64.dll Output\PDBARM64 > nul +copy /B ..\..\build\bin\SetupARM64\ClassicIE_64.pdb Output\PDBARM64 > nul +copy /B Output\ARM64\ClassicIE_64.exe Output\PDBARM64 > nul REM Menu 32 copy /B ..\..\build\bin\Setup\StartMenu.pdb Output\PDB32 > nul @@ -145,8 +145,8 @@ copy /B ..\..\build\bin\SetupARM64\StartMenu.pdb Output\PDBARM64 > nul copy /B Output\ARM64\StartMenu.exe Output\PDBARM64 > nul copy /B ..\..\build\bin\SetupARM64\StartMenuDLL.pdb Output\PDBARM64 > nul copy /B Output\ARM64\StartMenuDLL.dll Output\PDBARM64 > nul -copy /B ..\..\build\bin\SetupARM64\StartMenuHelperA64.pdb Output\PDBARM64 > nul -copy /B Output\ARM64\StartMenuHelperA64.dll Output\PDBARM64 > nul +copy /B ..\..\build\bin\SetupARM64\StartMenuHelper64.pdb Output\PDBARM64 > nul +copy /B Output\ARM64\StartMenuHelper64.dll Output\PDBARM64 > nul REM ********* Source Index PDBs diff --git a/Src/Setup/Setup.wxs b/Src/Setup/Setup.wxs index 748f2b838..8cbfdad39 100644 --- a/Src/Setup/Setup.wxs +++ b/Src/Setup/Setup.wxs @@ -64,12 +64,9 @@ - + - - - @@ -79,12 +76,9 @@ - + - - - @@ -109,12 +103,9 @@ - + - - - @@ -458,14 +449,14 @@ - - + + - - + + - - + + @@ -658,8 +649,8 @@ - - + + diff --git a/Src/Setup/Utility/ManualUninstall.cpp b/Src/Setup/Utility/ManualUninstall.cpp index 71d49a7bf..59380befa 100644 --- a/Src/Setup/Utility/ManualUninstall.cpp +++ b/Src/Setup/Utility/ManualUninstall.cpp @@ -43,14 +43,11 @@ #define RemoveDirectory2(x) RemoveDirectory(x) #endif -typedef BOOL (WINAPI *FIsWow64Process2)( HANDLE hProcess, USHORT *pProcessMachine, USHORT *pNativeMachine ); - // files to delete from the Open-Shell folder static const wchar_t *g_InstalledFiles[]= { L"ClassicExplorer32.dll", L"ClassicExplorer64.dll", - L"ClassicExplorerA64.dll", L"ClassicExplorerSettings.exe", L"ClassicIEDLL_32.dll", L"ClassicIEDLL_64.dll", @@ -958,15 +955,6 @@ static void ManualUninstallInternal( void ) } } - BOOL bArm64System=FALSE; - HMODULE hKernel32=GetModuleHandle(L"kernel32.dll"); - FIsWow64Process2 isWow64Process2=(FIsWow64Process2)GetProcAddress(hKernel32,"IsWow64Process2"); - if (isWow64Process2) - { - USHORT processMachine = 0, nativeMachine = 0; - isWow64Process2(GetCurrentProcess(), &processMachine, &nativeMachine); - bArm64System=nativeMachine==IMAGE_FILE_MACHINE_ARM64; - } BOOL bWow64=FALSE; bool bIsWow64=IsWow64Process(GetCurrentProcess(),&bWow64) && bWow64; @@ -1168,7 +1156,7 @@ static void ManualUninstallInternal( void ) { // 64-bit OS wchar_t path[_MAX_PATH]; - Sprintf(path,_countof(path),L"%s\\System32\\StartMenuHelper%s64.dll",winDir,bArm64System?L"A":L""); + Sprintf(path,_countof(path),L"%s\\System32\\StartMenuHelper64.dll",winDir); Wow64EnableWow64FsRedirection(FALSE); DeleteFileEx(path,true); Sprintf(path,_countof(path),L"%s\\SysWOW64\\StartMenuHelper32.dll",winDir); diff --git a/Src/StartMenu/StartMenu.cpp b/Src/StartMenu/StartMenu.cpp index 3b3afe721..a1abea443 100644 --- a/Src/StartMenu/StartMenu.cpp +++ b/Src/StartMenu/StartMenu.cpp @@ -296,10 +296,8 @@ bool WasOsUpgrade() // UAC dialog is shown to ensure it will run with administrator privileges void RunOsUpgradeTaskAsAdmin() { -#if defined(_M_AMD64) +#ifdef _WIN64 wchar_t path[_MAX_PATH] = L"%windir%\\System32\\StartMenuHelper64.dll"; -#elif defined(_M_ARM64) - wchar_t path[_MAX_PATH] = L"%windir%\\System32\\StartMenuHelperA64.dll"; #else wchar_t path[_MAX_PATH] = L"%windir%\\System32\\StartMenuHelper32.dll"; #endif @@ -323,10 +321,8 @@ DWORD PerformOsUpgradeTask(bool silent) regKey.SetDWORDValue(L"WinVersion", g_winVer); // run regsvr32 StartMenuHelper -#if defined(_M_AMD64) +#ifdef _WIN64 wchar_t cmdLine[_MAX_PATH] = L"regsvr32 /s \"%windir%\\System32\\StartMenuHelper64.dll\""; -#elif defined(_M_ARM64) - wchar_t cmdLine[_MAX_PATH] = L"regsvr32 /s \"%windir%\\System32\\StartMenuHelperA64.dll\""; #else wchar_t cmdLine[_MAX_PATH] = L"regsvr32 /s \"%windir%\\System32\\StartMenuHelper32.dll\""; #endif diff --git a/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj b/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj index 4f90cfe53..363990fba 100644 --- a/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj +++ b/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj @@ -5,6 +5,10 @@ Debug ARM64 + + Debug + ARM64EC + Debug Win32 @@ -17,6 +21,10 @@ Release ARM64 + + Release + ARM64EC + Release Win32 @@ -29,6 +37,10 @@ Setup ARM64 + + Setup + ARM64EC + Setup Win32 @@ -65,8 +77,12 @@ $(ProjectName)64 + + $(ProjectName)64 + - $(ProjectName)A64 + $(ProjectName)64 + true @@ -110,7 +126,6 @@ - PreserveNewest diff --git a/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj.filters b/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj.filters index 154e7d4ca..119fd0dfb 100644 --- a/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj.filters +++ b/Src/StartMenu/StartMenuHelper/StartMenuHelper.vcxproj.filters @@ -56,9 +56,6 @@ Source Files - - Source Files - Resource Files diff --git a/Src/StartMenu/StartMenuHelper/StartMenuHelperA64.def b/Src/StartMenu/StartMenuHelper/StartMenuHelperA64.def deleted file mode 100644 index 386ed9386..000000000 --- a/Src/StartMenu/StartMenuHelper/StartMenuHelperA64.def +++ /dev/null @@ -1,10 +0,0 @@ -; StartMenuHelper.def : Declares the module parameters. - -LIBRARY "StartMenuHelperA64.DLL" - -EXPORTS - DllCanUnloadNow PRIVATE - DllGetClassObject PRIVATE - DllRegisterServer PRIVATE - DllUnregisterServer PRIVATE - DllInstall PRIVATE From 932349569ecebb8074ad4144ec1498aaaf80ff51 Mon Sep 17 00:00:00 2001 From: ge0rdi Date: Sun, 4 May 2025 10:59:48 +0200 Subject: [PATCH 12/12] Make sure x64 installer cannot be installed on ARM64 In case if somebody manually tries to install x64 MSI on ARM64. This is not supported/working scenario. --- Src/Localization/English/OpenShellText-en-US.wxl | 1 + Src/Setup/Setup.wxs | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/Src/Localization/English/OpenShellText-en-US.wxl b/Src/Localization/English/OpenShellText-en-US.wxl index dd4bc0213..4a1941857 100644 --- a/Src/Localization/English/OpenShellText-en-US.wxl +++ b/Src/Localization/English/OpenShellText-en-US.wxl @@ -1,6 +1,7 @@ This installer is only for 32-bit version of Windows. For 64-bit Windows you need to run Setup64. + This installer is only for 64-bit version of Windows. For ARM64 Windows you need to run SetupARM64. Open-Shell requires Windows 7 or above. A newer version of [ProductName] is already installed. The setup will now exit. Classic Explorer diff --git a/Src/Setup/Setup.wxs b/Src/Setup/Setup.wxs index 8cbfdad39..b1a2f993f 100644 --- a/Src/Setup/Setup.wxs +++ b/Src/Setup/Setup.wxs @@ -27,9 +27,13 @@ + not Msix64 + + NOT (WIX_NATIVE_MACHINE AND WIX_NATIVE_MACHINE="43620") + VersionNT>=601 NOT NEWERPRODUCTFOUND OR Installed