mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-02-23 19:49:43 +01:00
update
This commit is contained in:
@@ -37,7 +37,6 @@ Patch dialog sequence:
|
||||
<DialogRef Id="DiskCostDlg" />
|
||||
<DialogRef Id="ErrorDlg" />
|
||||
<DialogRef Id="FatalError" />
|
||||
<DialogRef Id="FilesInUse" />
|
||||
<DialogRef Id="MsiRMFilesInUse" />
|
||||
<DialogRef Id="PrepareDlg" />
|
||||
<DialogRef Id="ProgressDlg" />
|
||||
|
||||
@@ -1267,80 +1267,6 @@ UINT __stdcall TerminateProcessesCA(MSIHANDLE hInstall)
|
||||
return WcaFinalize(er);
|
||||
}
|
||||
|
||||
UINT __stdcall TerminateOccupiedProcessesCA(MSIHANDLE hInstall)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
UINT er = ERROR_SUCCESS;
|
||||
hr = WcaInitialize(hInstall, "TerminateOccupiedProcessesCA");
|
||||
|
||||
std::vector<DWORD> processes;
|
||||
const size_t maxProcesses = 4096;
|
||||
DWORD bytes = maxProcesses * sizeof(processes[0]);
|
||||
processes.resize(maxProcesses);
|
||||
|
||||
if (!EnumProcesses(processes.data(), bytes, &bytes))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
processes.resize(bytes / sizeof(processes[0]));
|
||||
|
||||
std::array<std::wstring_view, 41> processesToTerminate = {
|
||||
L"COM Surrogate.exe",
|
||||
L"ShellHost.exe",
|
||||
};
|
||||
|
||||
for (const auto procID : processes)
|
||||
{
|
||||
if (!procID)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
wchar_t processName[MAX_PATH] = L"<unknown>";
|
||||
|
||||
HANDLE hProcess{OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE, FALSE, procID)};
|
||||
if (!hProcess)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
HMODULE hMod;
|
||||
DWORD cbNeeded;
|
||||
|
||||
if (!EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded))
|
||||
{
|
||||
CloseHandle(hProcess);
|
||||
continue;
|
||||
}
|
||||
GetModuleBaseNameW(hProcess, hMod, processName, sizeof(processName) / sizeof(wchar_t));
|
||||
|
||||
for (const auto processToTerminate : processesToTerminate)
|
||||
{
|
||||
if (processName == processToTerminate)
|
||||
{
|
||||
const DWORD timeout = 500;
|
||||
auto windowEnumerator = [](HWND hwnd, LPARAM procIDPtr) -> BOOL
|
||||
{
|
||||
auto targetProcID = *reinterpret_cast<const DWORD *>(procIDPtr);
|
||||
DWORD windowProcID = 0;
|
||||
GetWindowThreadProcessId(hwnd, &windowProcID);
|
||||
if (windowProcID == targetProcID)
|
||||
{
|
||||
DWORD_PTR _{};
|
||||
SendMessageTimeoutA(hwnd, WM_CLOSE, 0, 0, SMTO_BLOCK, timeout, &_);
|
||||
}
|
||||
return TRUE;
|
||||
};
|
||||
EnumWindows(windowEnumerator, reinterpret_cast<LPARAM>(&procID));
|
||||
Sleep(timeout);
|
||||
TerminateProcess(hProcess, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
CloseHandle(hProcess);
|
||||
}
|
||||
|
||||
er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
|
||||
return WcaFinalize(er);
|
||||
}
|
||||
|
||||
void initSystemLogger()
|
||||
{
|
||||
|
||||
@@ -16,7 +16,6 @@ EXPORTS
|
||||
TelemetryLogRepairCancelCA
|
||||
TelemetryLogRepairFailCA
|
||||
TerminateProcessesCA
|
||||
TerminateOccupiedProcessesCA
|
||||
InstallEmbeddedMSIXCA
|
||||
InstallDSCModuleCA
|
||||
InstallCmdPalPackageCA
|
||||
|
||||
@@ -103,6 +103,7 @@
|
||||
<SetProperty Action="SetINSTALLFOLDERTOBOOTSTRAPPERINSTALLFOLDER" Id="INSTALLFOLDER" Value="[BOOTSTRAPPERINSTALLFOLDER]" After="DetectPrevInstallPath" Sequence="execute" Condition="BOOTSTRAPPERINSTALLFOLDER <> DEFAULTBOOTSTRAPPERINSTALLFOLDER OR PREVIOUSINSTALLFOLDER = """ />
|
||||
|
||||
<SetProperty Id="InstallScope" Value="$(var.InstallScope)" Before="DetectPrevInstallPath" Sequence="execute"></SetProperty>
|
||||
|
||||
<InstallExecuteSequence>
|
||||
<Custom Action="DetectPrevInstallPath" After="AppSearch" />
|
||||
<Custom Action="SetLaunchPowerToysParam" Before="LaunchPowerToys" />
|
||||
@@ -159,9 +160,7 @@
|
||||
<CustomAction Id="LaunchPowerToys" Return="ignore" Impersonate="yes" Execute="deferred" DllEntry="LaunchPowerToysCA" BinaryRef="PTCustomActions" />
|
||||
|
||||
<CustomAction Id="TerminateProcesses" Return="ignore" Execute="immediate" DllEntry="TerminateProcessesCA" BinaryRef="PTCustomActions" />
|
||||
|
||||
<CustomAction Id="TerminateOccupiedProcesses" Return="ignore" Execute="immediate" DllEntry="TerminateOccupiedProcessesCA" BinaryRef="PTCustomActions" />
|
||||
|
||||
|
||||
<CustomAction Id="SetApplyModulesRegistryChangeSetsParam" Property="ApplyModulesRegistryChangeSets" Value="[INSTALLFOLDER]" />
|
||||
|
||||
<CustomAction Id="SetUnApplyModulesRegistryChangeSetsParam" Property="UnApplyModulesRegistryChangeSets" Value="[INSTALLFOLDER]" />
|
||||
|
||||
Reference in New Issue
Block a user