Implement installing dual 32 and 64-bit binaries on amd64

This commit is contained in:
Adam Demasi 2023-07-22 04:58:28 +09:30
parent ec828b40cf
commit 80f20293b0
No known key found for this signature in database
GPG key ID: 5D3B26B3D58C7D91
12 changed files with 305 additions and 99 deletions

View file

@ -17,16 +17,16 @@ Global
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}.Debug-VC08|Win32.ActiveCfg = Debug-VC08|Win32
{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}.Debug-VC08|Win32.Build.0 = Debug-VC08|Win32
{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}.Debug-VC08|x64.ActiveCfg = Debug-VC17|Win32
{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}.Debug-VC08|x64.Build.0 = Debug-VC17|Win32
{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}.Debug-VC08|x64.ActiveCfg = Debug-VC17|x64
{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}.Debug-VC08|x64.Build.0 = Debug-VC17|x64
{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}.Debug-VC17|Win32.ActiveCfg = Debug-VC17|Win32
{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}.Debug-VC17|Win32.Build.0 = Debug-VC17|Win32
{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}.Debug-VC17|x64.ActiveCfg = Debug-VC17|Win32
{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}.Debug-VC17|x64.Build.0 = Debug-VC17|Win32
{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}.Debug-VC17|x64.ActiveCfg = Debug-VC17|x64
{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}.Debug-VC17|x64.Build.0 = Debug-VC17|x64
{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}.Release|Win32.ActiveCfg = Release|Win32
{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}.Release|Win32.Build.0 = Release|Win32
{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}.Release|x64.ActiveCfg = Release|Win32
{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}.Release|x64.Build.0 = Release|Win32
{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}.Release|x64.ActiveCfg = Release|x64
{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View file

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<applications xmlns="http://schemas.microsoft.com/windows/cpltasks/v1" xmlns:sh="http://schemas.microsoft.com/windows/tasks/v1">
<application id="{FFBE8D44-E9CF-4DD8-9FD6-976802C94D9C}">
<sh:task id="{9943E8C8-748D-47CE-AE10-9FA4A80ED28B}" needsElevation="true">
<sh:name>@&quot;%ProgramFiles(x86)%\Legacy Update\LegacyUpdate.dll&quot;,-3</sh:name>
<sh:keywords>legacy update;legacyupdate;update;windows;microsoft;driver;security;software;</sh:keywords>
<sh:command>%windir%\system32\rundll32.exe &quot;%ProgramFiles(x86)%\Legacy Update\LegacyUpdate.dll&quot;,LaunchUpdateSite</sh:command>
</sh:task>
<category id="5">
<sh:task idref="{9943E8C8-748D-47CE-AE10-9FA4A80ED28B}" />
</category>
<category id="10">
<sh:task idref="{9943E8C8-748D-47CE-AE10-9FA4A80ED28B}" />
</category>
</application>
</applications>

View file

@ -96,27 +96,12 @@ void CALLBACK LaunchUpdateSite(HWND hwnd, HINSTANCE hinstance, LPSTR lpszCmdLine
goto end;
}
// Get the OS Version Information and the System Information
// This is done to allow us to workaround behavior in Windows Server 2003 x64 and Windows XP x64,
// where CLSCTX_ACTIVATE_32_BIT_SERVER is needed when activating the COM interface. This causes
// issues on 32-bit XP and 2000 though, and newer versions of Windows do not require it.
DWORD contextFlags = CLSCTX_LOCAL_SERVER;
OSVERSIONINFOEX* versionInfo = GetVersionInfo();
if (versionInfo->dwMajorVersion == 5) {
SYSTEM_INFO systemInfo;
GetSystemInfo(&systemInfo);
if (systemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {
// Server 2003 x64 and XP x64 specific quirk
contextFlags |= CLSCTX_ACTIVATE_32_BIT_SERVER;
}
}
// Spawn an IE window via the COM interface. This ensures the page opens in IE (ShellExecute uses
// default browser), and avoids hardcoding a path to iexplore.exe. Also conveniently allows testing
// on Windows 11 (iexplore.exe redirects to Edge, but COM still works). Same strategy as used by
// Wupdmgr.exe and Muweb.dll,LaunchMUSite.
IWebBrowser2 *browser;
result = CoCreateInstance(CLSID_InternetExplorer, NULL, contextFlags, IID_IWebBrowser2, (void **)&browser);
result = CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (void **)&browser);
if (!SUCCEEDED(result)) {
goto end;
}

View file

@ -126,8 +126,7 @@ IDR_LEGACYUPDATECTRL REGISTRY "LegacyUpdateCtrl.rgs"
// XML
//
IDR_CPLTASKS32 XML "CplTasks32.xml"
IDR_CPLTASKS64 XML "CplTasks64.xml"
IDR_CPLTASKS XML "CplTasks.xml"
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////

View file

@ -1,6 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug-VC08|x64">
<Configuration>Debug-VC08</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug-VC17|Win32">
<Configuration>Debug-VC17</Configuration>
<Platform>Win32</Platform>
@ -9,10 +13,18 @@
<Configuration>Debug-VC08</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug-VC17|x64">
<Configuration>Debug-VC17</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{95F3E1A1-5DDA-4C4D-B52B-981D46E6C98B}</ProjectGuid>
@ -28,12 +40,25 @@
<PlatformToolset>v90</PlatformToolset>
<UseOfAtl>Dynamic</UseOfAtl>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v90</PlatformToolset>
<UseOfAtl>Dynamic</UseOfAtl>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141_xp</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141_xp</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
@ -43,31 +68,61 @@
<UseOfAtl>Static</UseOfAtl>
<UseOfMfc>Static</UseOfMfc>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v141_xp</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<UseOfMfc>Static</UseOfMfc>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|Win32'">
<LinkIncremental>true</LinkIncremental>
<TargetExt>.dll</TargetExt>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|x64'">
<LinkIncremental>true</LinkIncremental>
<TargetExt>.dll</TargetExt>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|Win32'">
<LinkIncremental>true</LinkIncremental>
<TargetExt>.dll</TargetExt>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|x64'">
<LinkIncremental>true</LinkIncremental>
<TargetExt>.dll</TargetExt>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<TargetExt>.dll</TargetExt>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<TargetExt>.dll</TargetExt>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
@ -107,6 +162,43 @@
<Command>cmd /c start "" taskkill /im iexplore.exe</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;_USRDLL;_MERGE_PROXYSTUB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ModuleDefinitionFile>.\LegacyUpdate.def</ModuleDefinitionFile>
<OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
</Link>
<Midl>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
<GenerateStublessProxies>true</GenerateStublessProxies>
<TypeLibraryName>$(IntDir)LegacyUpdate.tlb</TypeLibraryName>
<HeaderFileName>LegacyUpdate_i.h</HeaderFileName>
<DllDataFileName>
</DllDataFileName>
<InterfaceIdentifierFileName>LegacyUpdate_i.c</InterfaceIdentifierFileName>
<ProxyFileName>LegacyUpdate_p.c</ProxyFileName>
</Midl>
<ResourceCompile>
<Culture>0x0409</Culture>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<PostBuildEvent>
<Command>
</Command>
</PostBuildEvent>
<PreBuildEvent>
<Command>cmd /c start "" taskkill /im iexplore.exe</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
@ -146,6 +238,43 @@
<Command>cmd /c start "" taskkill /im iexplore.exe</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;_USRDLL;_MERGE_PROXYSTUB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ModuleDefinitionFile>.\LegacyUpdate.def</ModuleDefinitionFile>
<OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
</Link>
<Midl>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
<GenerateStublessProxies>true</GenerateStublessProxies>
<TypeLibraryName>$(IntDir)LegacyUpdate.tlb</TypeLibraryName>
<HeaderFileName>LegacyUpdate_i.h</HeaderFileName>
<DllDataFileName>
</DllDataFileName>
<InterfaceIdentifierFileName>LegacyUpdate_i.c</InterfaceIdentifierFileName>
<ProxyFileName>LegacyUpdate_p.c</ProxyFileName>
</Midl>
<ResourceCompile>
<Culture>0x0409</Culture>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<PostBuildEvent>
<Command>
</Command>
</PostBuildEvent>
<PreBuildEvent>
<Command>cmd /c start "" taskkill /im iexplore.exe</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
@ -184,6 +313,42 @@
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_USRDLL;_MERGE_PROXYSTUB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<ModuleDefinitionFile>.\LegacyUpdate.def</ModuleDefinitionFile>
<OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
<AdditionalDependencies>
</AdditionalDependencies>
</Link>
<Midl>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
<GenerateStublessProxies>true</GenerateStublessProxies>
<TypeLibraryName>$(IntDir)LegacyUpdate.tlb</TypeLibraryName>
<HeaderFileName>LegacyUpdate_i.h</HeaderFileName>
<DllDataFileName>
</DllDataFileName>
<InterfaceIdentifierFileName>LegacyUpdate_i.c</InterfaceIdentifierFileName>
<ProxyFileName>LegacyUpdate_p.c</ProxyFileName>
</Midl>
<ResourceCompile>
<Culture>0x0409</Culture>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemGroup>
<None Include="icon.ico" />
<None Include="LegacyUpdate.def" />
@ -196,42 +361,72 @@
<ClCompile Include="Compat.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="Utils.cpp" />
<ClCompile Include="dlldatax.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|x64'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|Win32'">false</CompileAsManaged>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|x64'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|x64'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|Win32'">false</CompileAsManaged>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|x64'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</CompileAsManaged>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</CompileAsManaged>
</ClCompile>
<ClCompile Include="dllmain.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|x64'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|Win32'">false</CompileAsManaged>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|x64'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|x64'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|Win32'">false</CompileAsManaged>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|x64'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</CompileAsManaged>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</CompileAsManaged>
</ClCompile>
<ClCompile Include="LegacyUpdate_i.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|x64'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|Win32'">false</CompileAsManaged>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug-VC08|x64'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|x64'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|Win32'">false</CompileAsManaged>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug-VC17|x64'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</CompileAsManaged>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</CompileAsManaged>
</ClCompile>
</ItemGroup>
<ItemGroup>

View file

@ -9,8 +9,7 @@
#define IDR_LEGACYUPDATEOCX 101
#define IDR_LEGACYUPDATECTRL 102
#define IDI_ICON1 201
#define IDR_CPLTASKS32 202
#define IDR_CPLTASKS64 203
#define IDR_CPLTASKS 202
// Next default values for new objects
//

View file

@ -30,5 +30,7 @@ if exist "%ProgramFiles32%\Microsoft Visual Studio\Installer\vswhere.exe" (
msbuild LegacyUpdate.sln /m /p:Configuration=Release /p:Platform=Win32 %*
if "%errorlevel%" neq "0" exit /b %errorlevel%
msbuild LegacyUpdate.sln /m /p:Configuration=Release /p:Platform=x64 %*
if "%errorlevel%" neq "0" exit /b %errorlevel%
makensis setup\setup.nsi
if "%errorlevel%" neq "0" exit /b %errorlevel%

View file

@ -164,32 +164,44 @@ FunctionEnd
!macro TryWithRetry command error
ClearErrors
${command}
IfErrors 0 +6
IfErrors 0 +3
MessageBox MB_RETRYCANCEL|MB_USERICON \
'${error}$\r$\n$\r$\nIf Internet Explorer is open, close it and click Retry.' \
/SD IDCANCEL \
IDRETRY -6
IDRETRY -3
Abort
!macroend
!macro RegisterDLL un file
!macro TryFile file oname
!insertmacro TryWithRetry `File "/ONAME=${oname}" "${file}"` 'Unable to write to "${oname}".'
!macroend
!macro TryDelete file
!insertmacro TryWithRetry `Delete "${file}"` 'Unable to delete "${file}".'
!macroend
!macro TryRename src dest
!insertmacro TryWithRetry `Rename "${src}" "${dest}"` 'Unable to write to "${dest}".2'
!macroend
!macro RegisterDLL un arch file
${If} "${un}" == "Un"
StrCpy $0 "/u"
${Else}
StrCpy $0 ""
${EndIf}
${If} "${arch}" == "x86"
StrCpy $1 "$WINDIR\system32"
${ElseIf} "${arch}" == "x64"
StrCpy $1 "$WINDIR\Sysnative"
${EndIf}
ClearErrors
${un}RegDLL "${file}"
ExecWait '"$1\regsvr32.exe" /s $0 "${file}"'
${If} ${Errors}
; Try again with regsvr32. RegDLL seems to fail on Win2k, not sure why.
ClearErrors
${If} "${un}" == "Un"
StrCpy $0 "/u"
${Else}
StrCpy $0 ""
${EndIf}
ExecWait '"$SYSDIR\regsvr32.exe" /s $0 "${file}"'
${If} ${Errors}
; Do it again non-silently so the user can see the error.
ExecWait '"$SYSDIR\regsvr32.exe" $0 "${file}"'
Abort
${EndIf}
; Do it again non-silently so the user can see the error.
ExecWait '"$1\regsvr32.exe" $0 "${file}"'
Abort
${EndIf}
!macroend

View file

@ -1,8 +1,8 @@
; Windows 8 Servicing Stack
!insertmacro MSUHandler "KB4598297" "Servicing Stack Update for Windows 8" "Package_for_KB4598297"
!insertmacro MSUHandler "KB4598297" "2021-01 Servicing Stack Update for Windows Server 2012" "Package_for_KB4598297"
; Windows 8.1 Servicing Stack
!insertmacro MSUHandler "KB3021910" "Servicing Stack Update for Windows 8.1" "Package_for_KB3021910"
!insertmacro MSUHandler "KB3021910" "2015-04 Servicing Stack Update for Windows 8.1" "Package_for_KB3021910"
; Windows 8.1 Update 1
!insertmacro MSUHandler "KB2919355" "Windows 8.1 Update 1" "Package_for_KB2919355"

View file

@ -74,6 +74,7 @@ FunctionEnd
!macroend
Function UpdateRoots
SetOutPath $PLUGINSDIR
File "updroots.exe"
!insertmacro DetailPrint "Downloading Certificate Trust List..."
!insertmacro _DownloadSST "authroots"

View file

@ -4,7 +4,7 @@ Name "${NAME}"
Caption "${NAME}"
BrandingText "${NAME} ${VERSION} - ${DOMAIN}"
OutFile "LegacyUpdate-${VERSION}.exe"
InstallDir "$ProgramFiles\${NAME}"
InstallDir "$PROGRAMFILES\${NAME}"
InstallDirRegKey HKLM "${REGPATH_LEGACYUPDATE_SETUP}" "InstallDir"
Unicode true
@ -12,6 +12,8 @@ RequestExecutionLevel Admin
AutoCloseWindow true
ManifestSupportedOS all
ManifestDPIAware true
AllowSkipFiles off
SetCompressor /SOLID lzma
VIAddVersionKey /LANG=1033 "ProductName" "${NAME}"
VIAddVersionKey /LANG=1033 "ProductVersion" "${LONGVERSION}"
@ -94,6 +96,8 @@ VIFileVersion ${LONGVERSION}
!insertmacro MUI_LANGUAGE "English"
Var InstallDir
!macro RestartWUAUService
!insertmacro DetailPrint "Restarting Windows Update service..."
SetDetailsPrint none
@ -230,7 +234,7 @@ ${MementoSectionEnd}
; Main installation
${MementoSection} "Legacy Update" LEGACYUPDATE
SetOutPath $INSTDIR
SetOutPath $InstallDir
WriteUninstaller "Uninstall.exe"
; Add uninstall entry
@ -256,22 +260,30 @@ ${MementoSection} "Legacy Update" LEGACYUPDATE
WriteRegDword HKCR "${REGPATH_CPLCLSID}" "{305CA226-D286-468e-B848-2B2E8E697B74} 2" 5
WriteRegStr HKCR "${REGPATH_CPLCLSID}" "System.ApplicationName" "${CPL_APPNAME}"
WriteRegStr HKCR "${REGPATH_CPLCLSID}" "System.ControlPanelCategory" "5,10"
${If} ${RunningX64}
WriteRegStr HKCR "${REGPATH_CPLCLSID}" "System.Software.TasksFileUrl" "$OUTDIR\LegacyUpdate.dll,-203"
${Else}
WriteRegStr HKCR "${REGPATH_CPLCLSID}" "System.Software.TasksFileUrl" "$OUTDIR\LegacyUpdate.dll,-202"
${EndIf}
WriteRegStr HKCR "${REGPATH_CPLCLSID}" "System.Software.TasksFileUrl" "$OUTDIR\LegacyUpdate.dll,-202"
WriteRegStr HKLM "${REGPATH_CPLNAMESPACE}" "" "${NAME}"
; Install DLL, with detection for it being in use by IE
; NOTE: Here we specifically check for amd64, because the DLL is amd64.
; We still install to native Program Files on IA64, but with x86 binaries.
SetOverwrite try
!insertmacro TryWithRetry \
`File "..\Release\LegacyUpdate.dll"` \
'Unable to write to "$OUTDIR\LegacyUpdate.dll".'
!insertmacro TryFile "..\Release\LegacyUpdate.dll" "$OUTDIR\LegacyUpdate.dll"
${If} ${IsNativeAMD64}
${If} ${FileExists} "$OUTDIR\LegacyUpdate32.dll"
!insertmacro TryDelete "$OUTDIR\LegacyUpdate32.dll"
${EndIf}
!insertmacro TryRename "$OUTDIR\LegacyUpdate.dll" "$OUTDIR\LegacyUpdate32.dll"
!insertmacro TryFile "..\x64\Release\LegacyUpdate.dll" "$OUTDIR\LegacyUpdate.dll"
${EndIf}
SetOverwrite on
; Register DLL
!insertmacro RegisterDLL "" "$OUTDIR\LegacyUpdate.dll"
${If} ${IsNativeAMD64}
!insertmacro RegisterDLL "" x64 "$OUTDIR\LegacyUpdate.dll"
!insertmacro RegisterDLL "" x86 "$OUTDIR\LegacyUpdate32.dll"
${Else}
!insertmacro RegisterDLL "" x86 "$OUTDIR\LegacyUpdate.dll"
${EndIf}
; Create shortcut
CreateShortcut "$COMMONSTARTMENU\${NAME}.lnk" \
@ -310,6 +322,14 @@ ${MementoSection} "Legacy Update" LEGACYUPDATE
Delete $WINDIR\inf\LegacyUpdate.inf
${EndIf}
; If 32-bit Legacy Update exists, move it to 64-bit Program Files
${If} ${RunningX64}
${AndIf} ${FileExists} "$PROGRAMFILES32\Legacy Update\Backup"
CreateDirectory "$PROGRAMFILES64\Legacy Update"
Rename "$PROGRAMFILES32\Legacy Update\Backup" "$PROGRAMFILES64\Legacy Update\Backup"
RMDir /r "$PROGRAMFILES32\Legacy Update"
${EndIf}
; Set WSUS server
${If} ${AtMostWinVista}
; Check if Schannel is going to work with modern TLS
@ -346,6 +366,8 @@ ${MementoSectionEnd}
${MementoSectionDone}
Section -Uninstall
SetOutPath $InstallDir
; Delete shortcut
${UnpinShortcut} "$COMMONSTARTMENU\${NAME}.lnk"
Delete "$COMMONSTARTMENU\${NAME}.lnk"
@ -355,16 +377,23 @@ Section -Uninstall
DeleteRegKey HKCR "${REGPATH_CPLCLSID}"
; Restore shortcuts
${If} ${FileExists} "$INSTDIR\Backup\Windows Update.lnk"
Rename "$INSTDIR\Backup\Windows Update.lnk" "$COMMONSTARTMENU\Windows Update.lnk"
${If} ${FileExists} "$OUTDIR\Backup\Windows Update.lnk"
Rename "$OUTDIR\Backup\Windows Update.lnk" "$COMMONSTARTMENU\Windows Update.lnk"
${EndIf}
${If} ${FileExists} "$INSTDIR\Backup\Microsoft Update.lnk"
Rename "$INSTDIR\Backup\Microsoft Update.lnk" "$COMMONSTARTMENU\Microsoft Update.lnk"
${If} ${FileExists} "$OUTDIR\Backup\Microsoft Update.lnk"
Rename "$OUTDIR\Backup\Microsoft Update.lnk" "$COMMONSTARTMENU\Microsoft Update.lnk"
${EndIf}
; Unregister dll
!insertmacro RegisterDLL "Un" "$INSTDIR\LegacyUpdate.dll"
SetOverwrite try
${If} ${IsNativeAMD64}
!insertmacro RegisterDLL Un x64 "$OUTDIR\LegacyUpdate.dll"
!insertmacro RegisterDLL Un x86 "$OUTDIR\LegacyUpdate32.dll"
${Else}
!insertmacro RegisterDLL Un x86 "$OUTDIR\LegacyUpdate.dll"
${EndIf}
SetOverwrite on
; Clear WSUS server
${If} ${AtMostWinVista}
@ -382,13 +411,16 @@ Section -Uninstall
!insertmacro RestartWUAUService
; Delete the rest
Delete "$INSTDIR\Uninstall.exe"
Delete "$INSTDIR\LegacyUpdateSetup.exe"
!insertmacro TryWithRetry \
`Delete "$INSTDIR\LegacyUpdate.dll"` \
'Unable to delete "$INSTDIR\LegacyUpdate.dll".'
RMDir "$INSTDIR"
RMDir "$INSTDIR\Backup"
Delete "$OUTDIR\Uninstall.exe"
Delete "$OUTDIR\LegacyUpdateSetup.exe"
SetOverwrite try
!insertmacro TryDelete "$OUTDIR\LegacyUpdate.dll"
!insertmacro TryDelete "$OUTDIR\LegacyUpdate32.dll"
SetOverwrite on
RMDir "$OUTDIR"
RMDir "$OUTDIR\Backup"
DeleteRegKey HKLM "${REGPATH_UNINSTSUBKEY}"
SectionEnd
@ -434,6 +466,9 @@ Function .onInit
SetShellVarContext All
${If} ${RunningX64}
SetRegView 64
StrCpy $InstallDir "$PROGRAMFILES64\${NAME}"
${Else}
StrCpy $InstallDir "$PROGRAMFILES32\${NAME}"
${EndIf}
!insertmacro EnsureAdminRights
SetDetailsPrint listonly
@ -448,6 +483,8 @@ Function .onInit
${MementoSectionRestore}
; !insertmacro DownloadRequest "https://legacyupdate.net/" "$PLUGINSDIR\test" ""
${If} ${IsWin2000}
; Determine whether Win2k prereqs need to be installed
Call NeedsW2KSP4
@ -586,23 +623,14 @@ Function .onInit
; Try not to be too intrusive on Windows 10 and newer, which are (for now) fine
${If} ${AtLeastWin10}
!insertmacro RemoveSection ${ROOTCERTS}
!insertmacro TaskDialog `'Legacy Update'` \
`'Legacy Update is intended for earlier versions of Windows'` \
`'Visit legacyupdate.net for more information.$\r$\n$\r$\nContinue anyway?'` \
${TDCBF_YES_BUTTON}|${TDCBF_NO_BUTTON} \
${TD_WARNING_ICON}
${If} $0 != ${IDYES}
Quit
${EndIf}
${EndIf}
FunctionEnd
Function PostInstall
${IfNot} ${Silent}
${AndIfNot} ${IsRunOnce}
${If} ${FileExists} "$INSTDIR\LegacyUpdate.dll"
Exec '$SYSDIR\rundll32.exe "$INSTDIR\LegacyUpdate.dll",LaunchUpdateSite firstrun'
${If} ${FileExists} "$InstallDir\LegacyUpdate.dll"
Exec '$SYSDIR\rundll32.exe "$InstallDir\LegacyUpdate.dll",LaunchUpdateSite firstrun'
${ElseIf} ${AtLeastWinVista}
Exec '$SYSDIR\wuauclt.exe /ShowWUAutoScan'
${EndIf}
@ -649,6 +677,9 @@ Function un.onInit
SetShellVarContext All
${If} ${RunningX64}
SetRegView 64
StrCpy $InstallDir "$PROGRAMFILES64\${NAME}"
${Else}
StrCpy $InstallDir "$PROGRAMFILES32\${NAME}"
${EndIf}
!insertmacro EnsureAdminRights
SetDetailsPrint listonly