mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-08 20:27:36 +02:00
[General]Reduce installer size by flattening application paths (#27451)
* Flatten everything and succeed build * Figure out Settings assets * Remove UseCommonOutputDirectory tag * Proper settings app path * [VCM] Fix assets location * Fix some runtime paths * [RegistryPreview]Use MRTCore specific pri file * [Hosts]Use MRTCore specific pri file * [Settings]Use MRTCore specific pri file * [Peek]Use MRTCore specific pri file * [FileLocksmith]Use MRTCore specific pri file * [ScreenRuler]Use MRTCore specific pri file * [PowerRename]Use MRTCore specific pri file * [Peek]Move assets to own folder * [FileLocksmith] Use own Assets path * [Hosts]Use own assets folder * [PowerRename]Use own assets dir * [MeasureTool] Use its own assets folder * [ImageResizer]Use its own assets path * Fix spellcheck * Fix tab instead of space in project files * Normalize target frameworks and platforms * Remove WINRT_NO_MAKE_DETECTION flag. No longer needed? * Fix AOT and Hosts locations * Fix Dll version differences on dependency * Add Common.UI.csproj as refernce to fix dll versions * Update ControlzEx to normalize dll versions * Update System.Management version to 7.0.2 * Add GPOWrapper to Registry Preview to fix dll versions * [PTRun]Reference Microsoft.Extensions.Hosting to fix dll versions * Fix remaining output paths / dll version conflicts * [KeyboardManager]Executables still on their own directories * Fix Monaco paths * WinAppSDK apps get to play outside again * Enable VCM settings again * Fix KBM Editor path again * [Monaco]Set to own Assets dir * Fix installer preamble; Fix publish. remove unneeded publishes * Remove Hardlink functions * Installer builds again (still needs work to work) * Readd Monaco to spellcheck excludes * Fix spellcheck and call publish.cmd again * [Installer] Remove components that don't need own dirs * [Installer] Refactor Power Launcher * [Installer] Refactor Color Picker * [Installer] Refactor Monaco assets * [Installer]Generate File script no longer needs to remove files * [Installer]Refactor FileLocksmith * [Installer] Refactor Hosts * [Installer]Refactor Image Resizer * [Installer]Refactor MouseUtils * [Installer]Refactor MWB * [Installer]Refactor MeasureTool * [Installer]Refactor Peek * [Installer]Refactor PowerRename and registry fixes * [Installer]Refactor RegistryPreview * [Installer]Refactor ShortcutGuide * [Installer]Refactor Settings * [Installer]Clean up some unused stuff * [Installer]Clean up stuff for user install * [Installer]Fix WinUi3Apps wxs * [Installer]Fix misplaced folders * [Installer]Move x86 VCM dll to right path * Fix monaco language list location * [Installer]Fix VCM directory reference * [CI]Fix signing * [Installer] Fix resources folder for release CI * [ci]Looks like we still ship NLog on PowerToys Run * [Settings]Add dependency to avoid dll collision with Experimentation * [RegistryPreview]Move XAML files to own path * [RegistryPreview]Fix app icon * [Hosts]Move XAML files to their own path * [FileLocksmith]Move XAML files to their own path * [Peek]Move XAML files to own path * [ScreenRuler]Move XAML files to its own path * [Settings]Move XAML to its own path * [ColorPicker]Move Resources to Assets * [ShortcutGuide]Move svgs to own Assets path * [Awake]Move images to assets path * [Runner]Remove debug checks for PowerToys Run assets * [PTRun]Move images to its own assets path * [ImageResizer]Icon for context menu on own assets path * [PowerRename]Move ico to its own path * Remove unneeded intermediary directories * Remove further int dirs * Move tests to its own output path * Fix spellcheck * spellcheck: remove warnings * [CppAnalyzers]Ignore rule in a tool * [CI]Check if all deps.json files reference same versions * fix spellcheck * [ci]Fix task identation * [ci]Add script to guard against asset conflicts * [ci]Add more deps.json audit steps in the release build * Add xbf to spellcheck expects * Fix typo in asset conflict check scripts * Fix some more dependency conflicts * Downgrade CsWinRT to have the same dll version as sdk * [ci]Do a recursive check for every deps.json * Fix spellcheck error inside comment * [ci]Fix asset script error * [ci]Name deps.json verify tasks a bit better * [ci]Improve deps json verify script output * [ci]Update WinRT version to the same running in CI * Also upgrade CsWinRT in NOTICE.MD * [PowerRename]Move XAML files to own path * [Common]Fix Settings executable path * [ci]Verify there's no xbf files in app directories * [installer]Fix firewall path * [Monaco]Move new files to their proper assets path * [Monaco]Fix paths for new files after merge * [Feedback]Removed unneeded build conditions * [Feedback]Clear vcxproj direct reference to frameworks * [Feedback]RunPlugins name to hold PTRun plugins * [Feedback]Remove unneeded foreach * [Feedback]Shortcut Guide svgs with ** in project file * [Feedback]Fix spellcheck
This commit is contained in:
@@ -16,8 +16,6 @@
|
||||
#include <winrt/Windows.Foundation.h>
|
||||
#include <winrt/Windows.Management.Deployment.h>
|
||||
|
||||
#include "DepsFilesLists.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
HINSTANCE DLL_HANDLE = nullptr;
|
||||
@@ -1076,359 +1074,6 @@ UINT __stdcall UnRegisterContextMenuPackagesCA(MSIHANDLE hInstall)
|
||||
return WcaFinalize(er);
|
||||
}
|
||||
|
||||
const std::wstring WinAppSDKConsumers[] =
|
||||
{
|
||||
L"Settings",
|
||||
L"modules\\PowerRename",
|
||||
L"modules\\MeasureTool",
|
||||
L"modules\\FileLocksmith",
|
||||
L"modules\\Hosts",
|
||||
L"modules\\RegistryPreview",
|
||||
L"modules\\Peek",
|
||||
};
|
||||
|
||||
UINT __stdcall CreateWinAppSDKHardlinksCA(MSIHANDLE hInstall)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
UINT er = ERROR_SUCCESS;
|
||||
std::wstring installationFolder, winAppSDKFilesSrcDir;
|
||||
|
||||
hr = WcaInitialize(hInstall, "CreateWinAppSDKHardlinksCA");
|
||||
ExitOnFailure(hr, "Failed to initialize");
|
||||
|
||||
hr = getInstallFolder(hInstall, installationFolder);
|
||||
ExitOnFailure(hr, "Failed to get installation folder");
|
||||
|
||||
winAppSDKFilesSrcDir = installationFolder + L"dll\\WinAppSDK\\";
|
||||
|
||||
for (auto file : winAppSdkFiles)
|
||||
{
|
||||
for (auto consumer : WinAppSDKConsumers)
|
||||
{
|
||||
std::error_code ec;
|
||||
std::filesystem::create_hard_link((winAppSDKFilesSrcDir + file).c_str(), (installationFolder + consumer + L"\\" + file).c_str(), ec);
|
||||
|
||||
if (ec.value() != S_OK)
|
||||
{
|
||||
std::wstring errorMessage{ L"Error creating hard link for: " };
|
||||
errorMessage += file;
|
||||
errorMessage += L", error code: " + std::to_wstring(ec.value());
|
||||
Logger::error(errorMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LExit:
|
||||
er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
|
||||
return WcaFinalize(er);
|
||||
}
|
||||
|
||||
const std::wstring PTInteropConsumers[] =
|
||||
{
|
||||
L"modules\\ColorPicker",
|
||||
L"modules\\PowerOCR",
|
||||
L"modules\\launcher",
|
||||
L"modules\\FancyZones",
|
||||
L"modules\\ImageResizer",
|
||||
L"Settings",
|
||||
L"modules\\Awake",
|
||||
L"modules\\MeasureTool",
|
||||
L"modules\\PowerAccent",
|
||||
L"modules\\FileLocksmith",
|
||||
L"modules\\Hosts",
|
||||
L"modules\\Peek",
|
||||
L"modules\\FileExplorerPreview",
|
||||
L"modules\\MouseWithoutBorders",
|
||||
L"modules\\MouseUtils\\MouseJumpUI",
|
||||
L"modules\\RegistryPreview",
|
||||
};
|
||||
|
||||
UINT __stdcall CreatePTInteropHardlinksCA(MSIHANDLE hInstall)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
UINT er = ERROR_SUCCESS;
|
||||
std::wstring installationFolder, interopFilesSrcDir;
|
||||
|
||||
hr = WcaInitialize(hInstall, "CreatePTInteropHardlinksCA");
|
||||
ExitOnFailure(hr, "Failed to initialize");
|
||||
|
||||
hr = getInstallFolder(hInstall, installationFolder);
|
||||
ExitOnFailure(hr, "Failed to get installation folder");
|
||||
|
||||
interopFilesSrcDir = installationFolder + L"dll\\Interop\\";
|
||||
|
||||
for (auto file : powerToysInteropFiles)
|
||||
{
|
||||
for (auto consumer : PTInteropConsumers)
|
||||
{
|
||||
std::error_code ec;
|
||||
std::filesystem::create_hard_link((interopFilesSrcDir + file).c_str(), (installationFolder + consumer + L"\\" + file).c_str(), ec);
|
||||
|
||||
if (ec.value() != S_OK)
|
||||
{
|
||||
std::wstring errorMessage{ L"Error creating hard link for: " };
|
||||
errorMessage += file;
|
||||
errorMessage += L", error code: " + std::to_wstring(ec.value());
|
||||
Logger::error(errorMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LExit:
|
||||
er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
|
||||
return WcaFinalize(er);
|
||||
}
|
||||
|
||||
UINT __stdcall CreateDotnetRuntimeHardlinksCA(MSIHANDLE hInstall)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
UINT er = ERROR_SUCCESS;
|
||||
std::wstring installationFolder, dotnetRuntimeFilesSrcDir, colorPickerDir, powerOCRDir, launcherDir, fancyZonesDir,
|
||||
imageResizerDir, settingsDir, awakeDir, measureToolDir, powerAccentDir, fileExplorerAddOnsDir, hostsDir, fileLocksmithDir,
|
||||
mouseJumpDir, registryPreviewDir, peekDir, mwbDir;
|
||||
|
||||
hr = WcaInitialize(hInstall, "CreateDotnetRuntimeHardlinksCA");
|
||||
ExitOnFailure(hr, "Failed to initialize");
|
||||
|
||||
hr = getInstallFolder(hInstall, installationFolder);
|
||||
ExitOnFailure(hr, "Failed to get installation folder");
|
||||
|
||||
dotnetRuntimeFilesSrcDir = installationFolder + L"dll\\dotnet\\";
|
||||
colorPickerDir = installationFolder + L"modules\\ColorPicker\\";
|
||||
powerOCRDir = installationFolder + L"modules\\PowerOCR\\";
|
||||
launcherDir = installationFolder + L"modules\\launcher\\";
|
||||
fancyZonesDir = installationFolder + L"modules\\FancyZones\\";
|
||||
imageResizerDir = installationFolder + L"modules\\ImageResizer\\";
|
||||
settingsDir = installationFolder + L"Settings\\";
|
||||
awakeDir = installationFolder + L"modules\\Awake\\";
|
||||
measureToolDir = installationFolder + L"modules\\MeasureTool\\";
|
||||
powerAccentDir = installationFolder + L"modules\\PowerAccent\\";
|
||||
fileExplorerAddOnsDir = installationFolder + L"modules\\FileExplorerPreview\\";
|
||||
hostsDir = installationFolder + L"modules\\Hosts\\";
|
||||
fileLocksmithDir = installationFolder + L"modules\\FileLocksmith\\";
|
||||
mwbDir = installationFolder + L"modules\\MouseWithoutBorders\\";
|
||||
mouseJumpDir = installationFolder + L"modules\\MouseUtils\\MouseJumpUI\\";
|
||||
registryPreviewDir = installationFolder + L"modules\\RegistryPreview\\";
|
||||
peekDir = installationFolder + L"modules\\Peek\\";
|
||||
|
||||
for (auto file : dotnetRuntimeFiles)
|
||||
{
|
||||
std::error_code ec;
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (colorPickerDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (powerOCRDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (launcherDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (fancyZonesDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (imageResizerDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (settingsDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (awakeDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (measureToolDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (powerAccentDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (fileExplorerAddOnsDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (hostsDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (fileLocksmithDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (mwbDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (mouseJumpDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (registryPreviewDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (peekDir + file).c_str(), ec);
|
||||
|
||||
if (ec.value() != S_OK)
|
||||
{
|
||||
std::wstring errorMessage{ L"Error creating hard link for: " };
|
||||
errorMessage += file;
|
||||
errorMessage += L", error code: " + std::to_wstring(ec.value());
|
||||
Logger::error(errorMessage);
|
||||
er = ERROR_INSTALL_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
for (auto file : dotnetRuntimeWPFFiles)
|
||||
{
|
||||
std::error_code ec;
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (awakeDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (colorPickerDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (powerOCRDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (launcherDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (fancyZonesDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (imageResizerDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (powerAccentDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (fileExplorerAddOnsDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (hostsDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (mouseJumpDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (registryPreviewDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (peekDir + file).c_str(), ec);
|
||||
std::filesystem::create_hard_link((dotnetRuntimeFilesSrcDir + file).c_str(), (mwbDir + file).c_str(), ec);
|
||||
|
||||
if (ec.value() != S_OK)
|
||||
{
|
||||
std::wstring errorMessage{ L"Error creating hard link for: " };
|
||||
errorMessage += file;
|
||||
errorMessage += L", error code: " + std::to_wstring(ec.value());
|
||||
Logger::error(errorMessage);
|
||||
er = ERROR_INSTALL_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
LExit:
|
||||
er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
|
||||
return WcaFinalize(er);
|
||||
}
|
||||
|
||||
UINT __stdcall DeleteWinAppSDKHardlinksCA(MSIHANDLE hInstall)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
UINT er = ERROR_SUCCESS;
|
||||
std::wstring installationFolder;
|
||||
|
||||
hr = WcaInitialize(hInstall, "DeleteWinAppSDKHardlinksCA");
|
||||
ExitOnFailure(hr, "Failed to initialize");
|
||||
|
||||
hr = getInstallFolder(hInstall, installationFolder);
|
||||
ExitOnFailure(hr, "Failed to get installation folder");
|
||||
|
||||
try
|
||||
{
|
||||
for (auto file : winAppSdkFiles)
|
||||
{
|
||||
for (auto consumer : WinAppSDKConsumers)
|
||||
{
|
||||
DeleteFile((installationFolder + consumer + L"\\" + file).c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (std::exception e)
|
||||
{
|
||||
std::string errorMessage{ "Exception thrown while trying to delete WAS hardlinks: " };
|
||||
errorMessage += e.what();
|
||||
Logger::error(errorMessage);
|
||||
|
||||
er = ERROR_INSTALL_FAILURE;
|
||||
}
|
||||
|
||||
LExit:
|
||||
er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
|
||||
return WcaFinalize(er);
|
||||
}
|
||||
|
||||
UINT __stdcall DeletePTInteropHardlinksCA(MSIHANDLE hInstall)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
UINT er = ERROR_SUCCESS;
|
||||
std::wstring installationFolder, interopFilesSrcDir;
|
||||
|
||||
hr = WcaInitialize(hInstall, "DeletePTInteropHardlinksCA");
|
||||
ExitOnFailure(hr, "Failed to initialize");
|
||||
|
||||
hr = getInstallFolder(hInstall, installationFolder);
|
||||
ExitOnFailure(hr, "Failed to get installation folder");
|
||||
|
||||
try
|
||||
{
|
||||
for (auto file : powerToysInteropFiles)
|
||||
{
|
||||
for (auto consumer : PTInteropConsumers)
|
||||
{
|
||||
DeleteFile((installationFolder + consumer + L"\\" + file).c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (std::exception e)
|
||||
{
|
||||
std::string errorMessage{ "Exception thrown while trying to delete PowerToys Interop and VC Redist hardlinks: " };
|
||||
errorMessage += e.what();
|
||||
Logger::error(errorMessage);
|
||||
|
||||
er = ERROR_INSTALL_FAILURE;
|
||||
}
|
||||
|
||||
LExit:
|
||||
er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
|
||||
return WcaFinalize(er);
|
||||
}
|
||||
|
||||
UINT __stdcall DeleteDotnetRuntimeHardlinksCA(MSIHANDLE hInstall)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
UINT er = ERROR_SUCCESS;
|
||||
std::wstring installationFolder, colorPickerDir, powerOCRDir, launcherDir, fancyZonesDir,
|
||||
imageResizerDir, settingsDir, awakeDir, measureToolDir, powerAccentDir, fileExplorerAddOnsDir,
|
||||
hostsDir, fileLocksmithDir, mouseJumpDir, registryPreviewDir, peekDir, mwbDir;
|
||||
|
||||
hr = WcaInitialize(hInstall, "DeleteDotnetRuntimeHardlinksCA");
|
||||
ExitOnFailure(hr, "Failed to initialize");
|
||||
|
||||
hr = getInstallFolder(hInstall, installationFolder);
|
||||
ExitOnFailure(hr, "Failed to get installation folder");
|
||||
|
||||
colorPickerDir = installationFolder + L"modules\\ColorPicker\\";
|
||||
powerOCRDir = installationFolder + L"modules\\PowerOCR\\";
|
||||
launcherDir = installationFolder + L"modules\\launcher\\";
|
||||
fancyZonesDir = installationFolder + L"modules\\FancyZones\\";
|
||||
imageResizerDir = installationFolder + L"modules\\ImageResizer\\";
|
||||
settingsDir = installationFolder + L"Settings\\";
|
||||
awakeDir = installationFolder + L"modules\\Awake\\";
|
||||
measureToolDir = installationFolder + L"modules\\MeasureTool\\";
|
||||
powerAccentDir = installationFolder + L"modules\\PowerAccent\\";
|
||||
fileExplorerAddOnsDir = installationFolder + L"modules\\FileExplorerPreview\\";
|
||||
hostsDir = installationFolder + L"modules\\Hosts\\";
|
||||
fileLocksmithDir = installationFolder + L"modules\\FileLocksmith\\";
|
||||
mwbDir = installationFolder + L"modules\\MouseWithoutBorders\\";
|
||||
mouseJumpDir = installationFolder + L"modules\\MouseUtils\\MouseJumpUI\\";
|
||||
registryPreviewDir = installationFolder + L"modules\\RegistryPreview\\";
|
||||
peekDir = installationFolder + L"modules\\Peek\\";
|
||||
|
||||
try
|
||||
{
|
||||
for (auto file : dotnetRuntimeFiles)
|
||||
{
|
||||
DeleteFile((colorPickerDir + file).c_str());
|
||||
DeleteFile((powerOCRDir + file).c_str());
|
||||
DeleteFile((launcherDir + file).c_str());
|
||||
DeleteFile((fancyZonesDir + file).c_str());
|
||||
DeleteFile((imageResizerDir + file).c_str());
|
||||
DeleteFile((settingsDir + file).c_str());
|
||||
DeleteFile((awakeDir + file).c_str());
|
||||
DeleteFile((measureToolDir + file).c_str());
|
||||
DeleteFile((powerAccentDir + file).c_str());
|
||||
DeleteFile((fileExplorerAddOnsDir + file).c_str());
|
||||
DeleteFile((hostsDir + file).c_str());
|
||||
DeleteFile((fileLocksmithDir + file).c_str());
|
||||
DeleteFile((mouseJumpDir + file).c_str());
|
||||
DeleteFile((registryPreviewDir + file).c_str());
|
||||
DeleteFile((peekDir + file).c_str());
|
||||
DeleteFile((mwbDir + file).c_str());
|
||||
}
|
||||
|
||||
for (auto file : dotnetRuntimeWPFFiles)
|
||||
{
|
||||
DeleteFile((awakeDir + file).c_str());
|
||||
DeleteFile((colorPickerDir + file).c_str());
|
||||
DeleteFile((powerOCRDir + file).c_str());
|
||||
DeleteFile((launcherDir + file).c_str());
|
||||
DeleteFile((fancyZonesDir + file).c_str());
|
||||
DeleteFile((imageResizerDir + file).c_str());
|
||||
DeleteFile((powerAccentDir + file).c_str());
|
||||
DeleteFile((fileExplorerAddOnsDir + file).c_str());
|
||||
DeleteFile((hostsDir + file).c_str());
|
||||
DeleteFile((mouseJumpDir + file).c_str());
|
||||
DeleteFile((registryPreviewDir + file).c_str());
|
||||
DeleteFile((peekDir + file).c_str());
|
||||
DeleteFile((mwbDir + file).c_str());
|
||||
}
|
||||
}
|
||||
catch (std::exception e)
|
||||
{
|
||||
std::string errorMessage{ "Exception thrown while trying to delete dotnet runtime hardlinks: " };
|
||||
errorMessage += e.what();
|
||||
Logger::error(errorMessage);
|
||||
|
||||
er = ERROR_INSTALL_FAILURE;
|
||||
}
|
||||
|
||||
LExit:
|
||||
er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
|
||||
return WcaFinalize(er);
|
||||
}
|
||||
|
||||
UINT __stdcall TerminateProcessesCA(MSIHANDLE hInstall)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
@@ -4,12 +4,6 @@ EXPORTS
|
||||
CheckGPOCA
|
||||
ApplyModulesRegistryChangeSetsCA
|
||||
CreateScheduledTaskCA
|
||||
CreateWinAppSDKHardlinksCA
|
||||
DeleteWinAppSDKHardlinksCA
|
||||
CreatePTInteropHardlinksCA
|
||||
DeletePTInteropHardlinksCA
|
||||
CreateDotnetRuntimeHardlinksCA
|
||||
DeleteDotnetRuntimeHardlinksCA
|
||||
DetectPrevInstallPathCA
|
||||
RemoveScheduledTasksCA
|
||||
TelemetryLogInstallSuccessCA
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
inline const std::vector<std::wstring> winAppSdkFiles = {
|
||||
L"CoreMessagingXP.dll",
|
||||
L"DWriteCore.dll",
|
||||
L"DwmSceneI.dll",
|
||||
L"MRM.dll",
|
||||
L"Microsoft.DirectManipulation.dll",
|
||||
L"Microsoft.InputStateManager.dll",
|
||||
L"Microsoft.Internal.FrameworkUdk.dll",
|
||||
L"Microsoft.UI.Composition.OSSupport.dll",
|
||||
L"Microsoft.UI.Input.dll",
|
||||
L"Microsoft.UI.Windowing.Core.dll",
|
||||
L"Microsoft.UI.Windowing.dll",
|
||||
L"Microsoft.UI.Xaml.Controls.dll",
|
||||
L"Microsoft.UI.Xaml.Controls.pri",
|
||||
L"Microsoft.UI.Xaml.Internal.dll",
|
||||
L"Microsoft.UI.Xaml.Phone.dll",
|
||||
L"Microsoft.Web.WebView2.Core.dll",
|
||||
L"Microsoft.Windows.AppNotifications.Projection.dll",
|
||||
L"Microsoft.Windows.ApplicationModel.Resources.dll",
|
||||
L"Microsoft.WindowsAppRuntime.Bootstrap.dll",
|
||||
L"Microsoft.Windows.PushNotifications.Projection.dll",
|
||||
L"Microsoft.Windows.System.Projection.dll",
|
||||
L"Microsoft.WindowsAppRuntime.Insights.Resource.dll",
|
||||
L"Microsoft.WindowsAppRuntime.Release.Net.dll",
|
||||
L"Microsoft.WindowsAppRuntime.dll",
|
||||
L"Microsoft.ui.xaml.dll",
|
||||
L"Microsoft.ui.xaml.resources.19h1.dll",
|
||||
L"Microsoft.ui.xaml.resources.common.dll",
|
||||
L"PushNotificationsLongRunningTask.ProxyStub.dll",
|
||||
L"WinUIEdit.dll",
|
||||
L"WindowsAppRuntime.png",
|
||||
L"WindowsAppSdk.AppxDeploymentExtensions.Desktop.dll",
|
||||
L"WindowsAppSdk.AppxDeploymentExtensions.Desktop-EventLog-Instrumentation.dll",
|
||||
L"dcompi.dll",
|
||||
L"dwmcorei.dll",
|
||||
L"marshal.dll",
|
||||
L"wuceffectsi.dll"
|
||||
};
|
||||
|
||||
inline const std::vector<std::wstring> powerToysInteropFiles = {
|
||||
L"concrt140.dll",
|
||||
L"msvcp140.dll",
|
||||
L"msvcp140_1.dll",
|
||||
L"msvcp140_2.dll",
|
||||
L"msvcp140_atomic_wait.dll",
|
||||
L"msvcp140_codecvt_ids.dll",
|
||||
L"PowerToys.Interop.dll",
|
||||
L"vcamp140.dll",
|
||||
L"vccorlib140.dll",
|
||||
L"vcomp140.dll",
|
||||
L"vcruntime140.dll",
|
||||
L"vcruntime140_1.dll"
|
||||
};
|
||||
|
||||
inline const std::vector<std::wstring> dotnetRuntimeFiles = { };
|
||||
|
||||
inline const std::vector<std::wstring> dotnetRuntimeWPFFiles = { };
|
||||
@@ -6,7 +6,6 @@
|
||||
<ProjectGuid>{32f3882b-f2d6-4586-b5ed-11e39e522bd3}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>PowerToysSetupCustomActions</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
|
||||
<ProjectName>PowerToysSetupCustomActions</ProjectName>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
@@ -49,21 +48,17 @@
|
||||
<PreBuildEvent>
|
||||
<Command>
|
||||
call cmd /C "copy ""$(ProjectDir)DepsFilesLists.h"" ""$(ProjectDir)DepsFilesLists.h.bk"""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\AlwaysOnTop.wxs"" ""$(ProjectDir)..\PowerToysSetup\AlwaysOnTop.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\Awake.wxs"" ""$(ProjectDir)..\PowerToysSetup\Awake.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\BaseApplications.wxs"" ""$(ProjectDir)..\PowerToysSetup\BaseApplications.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\ColorPicker.wxs"" ""$(ProjectDir)..\PowerToysSetup\ColorPicker.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\Core.wxs"" ""$(ProjectDir)..\PowerToysSetup\Core.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\FancyZones.wxs"" ""$(ProjectDir)..\PowerToysSetup\FancyZones.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\FileExplorerPreview.wxs"" ""$(ProjectDir)..\PowerToysSetup\FileExplorerPreview.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\FileLocksmith.wxs"" ""$(ProjectDir)..\PowerToysSetup\FileLocksmith.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\Hosts.wxs"" ""$(ProjectDir)..\PowerToysSetup\Hosts.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\ImageResizer.wxs"" ""$(ProjectDir)..\PowerToysSetup\ImageResizer.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\KeyboardManager.wxs"" ""$(ProjectDir)..\PowerToysSetup\KeyboardManager.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\MeasureTool.wxs"" ""$(ProjectDir)..\PowerToysSetup\MeasureTool.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\MouseUtils.wxs"" ""$(ProjectDir)..\PowerToysSetup\MouseUtils.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\MouseWithoutBorders.wxs"" ""$(ProjectDir)..\PowerToysSetup\MouseWithoutBorders.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\Peek.wxs"" ""$(ProjectDir)..\PowerToysSetup\Peek.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\PowerAccent.wxs"" ""$(ProjectDir)..\PowerToysSetup\PowerAccent.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\PowerRename.wxs"" ""$(ProjectDir)..\PowerToysSetup\PowerRename.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\Product.wxs"" ""$(ProjectDir)..\PowerToysSetup\Product.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\RegistryPreview.wxs"" ""$(ProjectDir)..\PowerToysSetup\RegistryPreview.wxs.bk""""
|
||||
@@ -71,11 +66,10 @@
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\Run.wxs"" ""$(ProjectDir)..\PowerToysSetup\Run.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\Settings.wxs"" ""$(ProjectDir)..\PowerToysSetup\Settings.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\ShortcutGuide.wxs"" ""$(ProjectDir)..\PowerToysSetup\ShortcutGuide.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\TextExtractor.wxs"" ""$(ProjectDir)..\PowerToysSetup\TextExtractor.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\Tools.wxs"" ""$(ProjectDir)..\PowerToysSetup\Tools.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\VideoConference.wxs"" ""$(ProjectDir)..\PowerToysSetup\VideoConference.wxs.bk""""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\WinAppSDK.wxs"" ""$(ProjectDir)..\PowerToysSetup\WinAppSDK.wxs.bk""""
|
||||
call powershell.exe -NonInteractive -executionpolicy Unrestricted -File parseRuntimes.ps1 -runtimedepsjsonpath "$(ProjectDir)..\..\$(Platform)\$(Configuration)\Settings\PowerToys.Settings.deps.json" -wpfdepsjsonpath "$(ProjectDir)..\..\$(Platform)\$(Configuration)\modules\ColorPicker\PowerToys.ColorPickerUI.deps.json" -depsfileslistspath "$(ProjectDir)DepsFilesLists.h" -productwxspath "$(ProjectDir)..\PowerToysSetup\Core.wxs"
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\WinUI3Applications.wxs"" ""$(ProjectDir)..\PowerToysSetup\WinUI3Applications.wxs.bk""""
|
||||
if not "$(PerUser)" == "true" call powershell.exe -NonInteractive -executionpolicy Unrestricted -File ..\PowerToysSetup\generateAllFileComponents.ps1 -platform $(Platform)
|
||||
if "$(PerUser)" == "true" call powershell.exe -NonInteractive -executionpolicy Unrestricted -File ..\PowerToysSetup\generateAllFileComponents.ps1 -platform $(Platform) -installscopeperuser $(PerUser)
|
||||
</Command>
|
||||
|
||||
@@ -1,85 +0,0 @@
|
||||
[CmdletBinding()]
|
||||
Param(
|
||||
[Parameter(Mandatory = $True, Position = 1)]
|
||||
[string]$runtimedepsjsonpath,
|
||||
[Parameter(Mandatory = $True, Position = 2)]
|
||||
[string]$wpfdepsjsonpath,
|
||||
[Parameter(Mandatory = $True, Position = 3)]
|
||||
[string]$depsfileslistspath,
|
||||
[Parameter(Mandatory = $True, Position = 4)]
|
||||
[string]$productwxspath
|
||||
)
|
||||
|
||||
function Get-RuntimePack ($depsJsonFile, $runtimeName) {
|
||||
Write-Host "Parsing $runtimeName Runtime"
|
||||
$runtimePackList = ([array]$depsJsonFile.targets.PSObject.Properties)[-1].Value.PSObject.Properties | Where-Object { $_.Name -match "runtimepack.$runtimeName" };
|
||||
|
||||
if ($runtimePackList.Length -eq 0) {
|
||||
Write-Host -ForegroundColor Red "$runtimeName has not been found"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Enumerate through array of custom objects and parse the names of the property values into a HashTable
|
||||
$runtimePackList | ForEach-Object {
|
||||
$runtimes += @{"$($_.Name -replace "runtimepack\.(\S+)\.\S+/\S+",'$1')" = $_.Value.PSObject.Properties.Value | ForEach-Object {
|
||||
$_.PSObject.Properties.Name
|
||||
}
|
||||
}
|
||||
}
|
||||
Write-Output $runtimes;
|
||||
}
|
||||
|
||||
function Update-RuntimeHashTable () {
|
||||
$runtimes = Get-RuntimePack $runtimeFile "Microsoft.NETCore.App.Runtime"
|
||||
$runtimes = Get-RuntimePack $wpfRuntimeFile "Microsoft.WindowsDesktop.App.Runtime"
|
||||
|
||||
# Find the dlls that exist in both the .NET Runtime and WPF Runtime deps list and filter out of WPF
|
||||
$runtimeFileComparison = Compare-Object -ReferenceObject $runtimes["Microsoft.NETCore.App.Runtime"] -DifferenceObject $runtimes["Microsoft.WindowsDesktop.App.Runtime"] -IncludeEqual -ExcludeDifferent
|
||||
|
||||
$runtimes["Microsoft.WindowsDesktop.App.Runtime"] = $runtimes["Microsoft.WindowsDesktop.App.Runtime"] | Where-Object { $_ -notin $runtimeFileComparison.InputObject }
|
||||
|
||||
Write-Output $runtimes;
|
||||
}
|
||||
|
||||
function Update-RuntimeFileList($runtimeToken, $runtimeKey) {
|
||||
$depsFilesLists -replace "($runtimeToken = )(.*);", "`$1 {`r`n$(($runtimes[$runtimeKey] | ForEach-Object {' L"'+$_+'"'} | Sort-Object) -join ",`r`n") };"
|
||||
}
|
||||
|
||||
function Update-ProductWxsRuntimeFileList($runtimeToken, $runtimeKey) {
|
||||
$productWxs -replace "(define $runtimeToken=)(.*)?>", "`$1$($runtimes[$runtimeKey] -join ';')?>"
|
||||
}
|
||||
|
||||
function Update-DotnetFilesComponentGuid() {
|
||||
$productWxs -replace "Dlls_DotnetFiles_Component"" Guid=""([{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?)""", "Dlls_DotnetFiles_Component"" Guid=""$((New-Guid).ToString().ToUpper())"""
|
||||
}
|
||||
|
||||
# Read the DepsFilesLists.h file
|
||||
$depsFilesLists = Get-Content $depsfileslistspath;
|
||||
|
||||
# Read Product.wxs file
|
||||
$productWxs = Get-Content $productwxspath;
|
||||
|
||||
# Read the deps.json file and convert it to a JSON object
|
||||
$runtimeFile = Get-Content $runtimedepsjsonpath | ConvertFrom-Json;
|
||||
$wpfRuntimeFile = Get-Content $wpfdepsjsonpath | ConvertFrom-Json;
|
||||
|
||||
$runtimes = @{}
|
||||
|
||||
$runtimes = Update-RuntimeHashTable
|
||||
|
||||
Write-Host "Writing Microsoft.NETCore.App.Runtime files"
|
||||
$depsFilesLists = Update-RuntimeFileList "dotnetRuntimeFiles" "Microsoft.NETCore.App.Runtime"
|
||||
$productWxs = Update-ProductWxsRuntimeFileList "DotnetRuntimeFiles" "Microsoft.NETCore.App.Runtime"
|
||||
|
||||
Write-Host "Writing Microsoft.WindowsDesktop.App.Runtime files"
|
||||
$depsFilesLists = Update-RuntimeFileList "dotnetRuntimeWPFFiles" "Microsoft.WindowsDesktop.App.Runtime"
|
||||
$productWxs = Update-ProductWxsRuntimeFileList "DotnetRuntimeWPFFiles" "Microsoft.WindowsDesktop.App.Runtime"
|
||||
|
||||
Write-Host "Update DotnetFiles Component GUID"
|
||||
$productWxs = Update-DotnetFilesComponentGuid
|
||||
|
||||
Write-Host "Updating $depsfileslistspath"
|
||||
Set-Content -Path $depsfileslistspath -Value $depsFilesLists
|
||||
|
||||
Write-Host "Updating $productwxspath"
|
||||
Set-Content -Path $productwxspath -Value $productWxs
|
||||
Reference in New Issue
Block a user