Merge in 'release/8.0.1xx' changes
This commit is contained in:
commit
a64a1e64c9
3 changed files with 68 additions and 3 deletions
|
@ -55,6 +55,7 @@ target_link_libraries(Finalizer shell32.lib)
|
||||||
target_link_libraries(Finalizer advapi32.lib)
|
target_link_libraries(Finalizer advapi32.lib)
|
||||||
target_link_libraries(Finalizer version.lib)
|
target_link_libraries(Finalizer version.lib)
|
||||||
target_link_libraries(Finalizer msi.lib)
|
target_link_libraries(Finalizer msi.lib)
|
||||||
|
target_link_libraries(Finalizer shlwapi.lib)
|
||||||
|
|
||||||
# Add WiX libraries
|
# Add WiX libraries
|
||||||
target_link_libraries(Finalizer wcautil.lib)
|
target_link_libraries(Finalizer wcautil.lib)
|
||||||
|
|
|
@ -492,12 +492,64 @@ LExit:
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RemoveInstallStateFile(LPWSTR sczSdkFeatureBandVersion, LPWSTR sczPlatform)
|
||||||
|
{
|
||||||
|
HRESULT hr = S_OK;
|
||||||
|
LPWSTR sczProgramData = NULL;
|
||||||
|
LPWSTR sczInstallStatePath = NULL;
|
||||||
|
LPWSTR sczPath = NULL;
|
||||||
|
|
||||||
|
hr = ShelGetFolder(&sczProgramData, CSIDL_COMMON_APPDATA);
|
||||||
|
ExitOnFailure(hr, "Failed to get shell folder.");
|
||||||
|
|
||||||
|
hr = PathConcat(sczProgramData, L"dotnet", &sczInstallStatePath);
|
||||||
|
ExitOnFailure(hr, "Failed to concat dotnet to install state path.");
|
||||||
|
|
||||||
|
hr = PathConcat(sczInstallStatePath, L"workloads", &sczInstallStatePath);
|
||||||
|
ExitOnFailure(hr, "Failed to concat workloads to install state path.");
|
||||||
|
|
||||||
|
hr = PathConcat(sczInstallStatePath, sczPlatform, &sczInstallStatePath);
|
||||||
|
ExitOnFailure(hr, "Failed to concat platform (%ls) to install state path.", sczPlatform);
|
||||||
|
|
||||||
|
hr = PathConcat(sczInstallStatePath, sczSdkFeatureBandVersion, &sczInstallStatePath);
|
||||||
|
ExitOnFailure(hr, "Failed to concat feature band (%ls) to install state path.", sczSdkFeatureBandVersion);
|
||||||
|
|
||||||
|
hr = PathConcat(sczInstallStatePath, L"installstate", &sczInstallStatePath);
|
||||||
|
ExitOnFailure(hr, "Failed to concat installstate to install state path.");
|
||||||
|
|
||||||
|
hr = PathConcat(sczInstallStatePath, L"default.json", &sczInstallStatePath);
|
||||||
|
ExitOnFailure(hr, "Failed to concat default.json to install state path.");
|
||||||
|
|
||||||
|
if (FileExistsEx(sczInstallStatePath, NULL))
|
||||||
|
{
|
||||||
|
LogStringLine(REPORT_STANDARD, "Deleting install state file: %ls", sczInstallStatePath);
|
||||||
|
hr = FileEnsureDelete(sczInstallStatePath);
|
||||||
|
ExitOnFailure(hr, "Failed to delete install state file: %ls", sczInstallStatePath);
|
||||||
|
|
||||||
|
hr = PathGetParentPath(sczInstallStatePath, &sczPath);
|
||||||
|
ExitOnFailure(hr, "Failed to get parent path of install state file.");
|
||||||
|
|
||||||
|
LogStringLine(REPORT_STANDARD, "Cleaning up empty workload folders.");
|
||||||
|
DirDeleteEmptyDirectoriesToRoot(sczPath, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LogStringLine(REPORT_STANDARD, "Install state file does not exist: %ls", sczInstallStatePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
LExit:
|
||||||
|
ReleaseStr(sczPath);
|
||||||
|
ReleaseStr(sczInstallStatePath)
|
||||||
|
ReleaseStr(sczProgramData);
|
||||||
|
}
|
||||||
|
|
||||||
int wmain(int argc, wchar_t* argv[])
|
int wmain(int argc, wchar_t* argv[])
|
||||||
{
|
{
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
DWORD dwExitCode = 0;
|
DWORD dwExitCode = 0;
|
||||||
LPWSTR sczDependent = NULL;
|
LPWSTR sczDependent = NULL;
|
||||||
LPWSTR sczFeatureBandVersion = NULL;
|
LPWSTR sczFeatureBandVersion = NULL;
|
||||||
|
LPWSTR sczPlatform = NULL;
|
||||||
BOOL bRestartRequired = FALSE;
|
BOOL bRestartRequired = FALSE;
|
||||||
BOOL bSdkFeatureBandInstalled = FALSE;
|
BOOL bSdkFeatureBandInstalled = FALSE;
|
||||||
int iMajor = 0;
|
int iMajor = 0;
|
||||||
|
@ -507,16 +559,19 @@ int wmain(int argc, wchar_t* argv[])
|
||||||
hr = ::Initialize(argc, argv);
|
hr = ::Initialize(argc, argv);
|
||||||
ExitOnFailure(hr, "Failed to initialize.");
|
ExitOnFailure(hr, "Failed to initialize.");
|
||||||
|
|
||||||
|
hr = StrAllocString(&sczPlatform, argv[3], 0);
|
||||||
|
ExitOnFailure(hr, "Failed to copy platform argument.");
|
||||||
|
|
||||||
// Convert the full SDK version to a feature band version
|
// Convert the full SDK version to a feature band version
|
||||||
hr = ParseSdkVersion(argv[2], &sczFeatureBandVersion);
|
hr = ParseSdkVersion(argv[2], &sczFeatureBandVersion);
|
||||||
ExitOnFailure(hr, "Failed to parse version, %ls.", argv[2]);
|
ExitOnFailure(hr, "Failed to parse version, %ls.", argv[2]);
|
||||||
|
|
||||||
// Create the dependent value, e.g., Microsoft.NET.Sdk,6.0.300,arm64
|
// Create the dependent value, e.g., Microsoft.NET.Sdk,6.0.300,arm64
|
||||||
hr = StrAllocFormatted(&sczDependent, L"Microsoft.NET.Sdk,%ls,%ls", sczFeatureBandVersion, argv[3]);
|
hr = StrAllocFormatted(&sczDependent, L"Microsoft.NET.Sdk,%ls,%ls", sczFeatureBandVersion, sczPlatform);
|
||||||
ExitOnFailure(hr, "Failed to create dependent.");
|
ExitOnFailure(hr, "Failed to create dependent.");
|
||||||
LogStringLine(REPORT_STANDARD, "Setting target dependent to %ls.", sczDependent);
|
LogStringLine(REPORT_STANDARD, "Setting target dependent to %ls.", sczDependent);
|
||||||
|
|
||||||
hr = ::DetectSdk(sczFeatureBandVersion, argv[3], &bSdkFeatureBandInstalled);
|
hr = ::DetectSdk(sczFeatureBandVersion, sczPlatform, &bSdkFeatureBandInstalled);
|
||||||
ExitOnFailure(hr, "Failed to detect installed SDKs.");
|
ExitOnFailure(hr, "Failed to detect installed SDKs.");
|
||||||
|
|
||||||
// If the feature band is still present, do not remove workloads.
|
// If the feature band is still present, do not remove workloads.
|
||||||
|
@ -529,7 +584,7 @@ int wmain(int argc, wchar_t* argv[])
|
||||||
hr = ::RemoveDependent(sczDependent, &bRestartRequired);
|
hr = ::RemoveDependent(sczDependent, &bRestartRequired);
|
||||||
ExitOnFailure(hr, "Failed to remove dependent \"%ls\".", sczDependent);
|
ExitOnFailure(hr, "Failed to remove dependent \"%ls\".", sczDependent);
|
||||||
|
|
||||||
hr = ::DeleteWorkloadRecords(sczFeatureBandVersion, argv[3]);
|
hr = ::DeleteWorkloadRecords(sczFeatureBandVersion, sczPlatform);
|
||||||
ExitOnFailure(hr, "Failed to remove workload records.");
|
ExitOnFailure(hr, "Failed to remove workload records.");
|
||||||
|
|
||||||
if (bRestartRequired)
|
if (bRestartRequired)
|
||||||
|
@ -537,9 +592,12 @@ int wmain(int argc, wchar_t* argv[])
|
||||||
dwExitCode = ERROR_SUCCESS_REBOOT_REQUIRED;
|
dwExitCode = ERROR_SUCCESS_REBOOT_REQUIRED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RemoveInstallStateFile(sczFeatureBandVersion, sczPlatform);
|
||||||
|
|
||||||
LExit:
|
LExit:
|
||||||
ReleaseStr(sczDependent);
|
ReleaseStr(sczDependent);
|
||||||
ReleaseStr(sczFeatureBandVersion);
|
ReleaseStr(sczFeatureBandVersion);
|
||||||
|
ReleaseStr(sczPlatform);
|
||||||
LogUninitialize(TRUE);
|
LogUninitialize(TRUE);
|
||||||
RegUninitialize();
|
RegUninitialize();
|
||||||
WiuUninitialize();
|
WiuUninitialize();
|
||||||
|
|
|
@ -12,6 +12,8 @@
|
||||||
#include <winreg.h>
|
#include <winreg.h>
|
||||||
#include <msi.h>
|
#include <msi.h>
|
||||||
#include <pathcch.h>
|
#include <pathcch.h>
|
||||||
|
#include <shlobj.h>
|
||||||
|
#include <shlwapi.h>
|
||||||
|
|
||||||
// Configure some logging parameters for WiX
|
// Configure some logging parameters for WiX
|
||||||
#define ExitTrace LogErrorString
|
#define ExitTrace LogErrorString
|
||||||
|
@ -26,3 +28,7 @@
|
||||||
#include "pathutil.h"
|
#include "pathutil.h"
|
||||||
#include "strutil.h"
|
#include "strutil.h"
|
||||||
#include "wiutil.h"
|
#include "wiutil.h"
|
||||||
|
#include "dirutil.h"
|
||||||
|
#include "fileutil.h"
|
||||||
|
#include "shelutil.h"
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue