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/BUILDME.txt b/Src/BUILDME.txt
index 4e9384964..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.7
+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/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/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..10a6f111b 100644
--- a/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters
+++ b/Src/ClassicIE/ClassicIEDLL/ClassicIEDLL.vcxproj.filters
@@ -58,6 +58,9 @@
Resource Files
+
+ Source Files
+
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/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
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..0b8f5275b 100644
--- a/Src/OpenShell.sln
+++ b/Src/OpenShell.sln
@@ -70,321 +70,473 @@ 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|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
+ {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|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
{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|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
{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/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 f1f814962..75e37c283 100644
--- a/Src/Setup/BuildBinaries.bat
+++ b/Src/Setup/BuildBinaries.bat
@@ -1,18 +1,26 @@
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
-"%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 --- 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
@@ -42,12 +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
+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
@@ -67,7 +84,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 +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 64
-copy /B ..\ClassicExplorer\Setup64\ClassicExplorer64.pdb Output\PDB64 > nul
-copy /B Output\x64\ClassicExplorer64.dll Output\PDB64 > 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
@@ -85,11 +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 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
+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
@@ -103,14 +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 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
-
+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
@@ -124,7 +165,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 +179,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..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,47 +43,61 @@ 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%
-@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 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%
-@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
-
+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 d3471af40..baa167702 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 and x64 or 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,10 +81,10 @@ 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==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);
@@ -87,7 +98,7 @@ static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, bool b64, bo
HGLOBAL hRes=LoadResource(hInstance,hResInfo);
pRes32=(unsigned char*)LockResource(hRes);
}
- if (!pRes32)
+ if (!pRes32 && extractType!=ARM64)
{
if (!bQuiet)
{
@@ -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,26 @@ 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");
+ USHORT processMachine = 0;
+ if (isWow64Process2)
+ {
+ USHORT 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 +372,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 && processMachine != IMAGE_FILE_MACHINE_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 && processMachine != IMAGE_FILE_MACHINE_ARM64)
+ Wow64RevertWow64FsRedirection(wow64FsRedirVal);
+ if (!ret)
{
DeleteFile(msiName);
if (!bQuiet)
diff --git a/Src/Setup/Setup.rc b/Src/Setup/Setup.rc
index 8d479c126..99e7e8da7 100644
--- a/Src/Setup/Setup.rc
+++ b/Src/Setup/Setup.rc
@@ -100,8 +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 62ccbfe77..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,8 +207,18 @@
-
-
+
+ true
+ true
+
+
+ true
+ true
+
+
+ true
+ true
+
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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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..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;
@@ -88,7 +88,10 @@ int CalcMsiChecksum( wchar_t *const *params, int count )
// load files
wchar_t path1[_MAX_PATH];
std::vector buf1, buf2;
- Sprintf(path1,_countof(path1),L"%s\\Setup32.msi",params[1]);
+ 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,12 +99,15 @@ 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())
+ 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();
@@ -112,39 +118,42 @@ int CalcMsiChecksum( wchar_t *const *params, int count )
for (std::vector::iterator it=buf2.begin();it!=buf2.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 both 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
@@ -1158,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/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/Setup/__MakeFinal.bat b/Src/Setup/__MakeFinal.bat
index 16bcdf1e4..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.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/__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
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
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
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