mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-05 02:36:19 +02:00
setup: add --help and --no_dotnet commands
This commit is contained in:
committed by
Andrey Nekrasov
parent
4e969a3701
commit
870f1095cd
@@ -9,7 +9,6 @@
|
||||
#include <common/appMutex.h>
|
||||
#include <common/processApi.h>
|
||||
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
#include <runner/action_runner_utils.h>
|
||||
@@ -64,12 +63,24 @@ enum class CmdArgs
|
||||
{
|
||||
silent,
|
||||
noFullUI,
|
||||
noStartPT
|
||||
noStartPT,
|
||||
skipDotnetInstall,
|
||||
showHelp
|
||||
};
|
||||
|
||||
namespace
|
||||
{
|
||||
const std::unordered_map<std::wstring_view, CmdArgs> knownArgs = {
|
||||
{ L"--help", CmdArgs::showHelp },
|
||||
{ L"--no_full_ui", CmdArgs::noFullUI },
|
||||
{ L"--silent", CmdArgs::silent },
|
||||
{ L"--no_start_pt", CmdArgs::noStartPT },
|
||||
{ L"--skip_dotnet_install", CmdArgs::skipDotnetInstall }
|
||||
};
|
||||
}
|
||||
|
||||
std::unordered_set<CmdArgs> parseCmdArgs(const int nCmdArgs, LPWSTR* argList)
|
||||
{
|
||||
const std::unordered_map<std::wstring_view, CmdArgs> knownArgs = { { L"--no_full_ui", CmdArgs::noFullUI }, { L"--silent", CmdArgs::silent }, { L"--no_start_pt", CmdArgs::noStartPT } };
|
||||
std::unordered_set<CmdArgs> result;
|
||||
for (size_t i = 1; i < nCmdArgs; ++i)
|
||||
{
|
||||
@@ -80,7 +91,6 @@ std::unordered_set<CmdArgs> parseCmdArgs(const int nCmdArgs, LPWSTR* argList)
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
|
||||
{
|
||||
using namespace localized_strings;
|
||||
@@ -89,6 +99,17 @@ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
|
||||
int nCmdArgs = 0;
|
||||
LPWSTR* argList = CommandLineToArgvW(GetCommandLineW(), &nCmdArgs);
|
||||
const auto cmdArgs = parseCmdArgs(nCmdArgs, argList);
|
||||
std::wostringstream oss;
|
||||
if (cmdArgs.contains(CmdArgs::showHelp))
|
||||
{
|
||||
oss << "Supported arguments:\n\n";
|
||||
for (auto [arg, _] : knownArgs)
|
||||
{
|
||||
oss << arg << '\n';
|
||||
}
|
||||
MessageBoxW(nullptr, oss.str().c_str(), L"Help", MB_OK | MB_ICONINFORMATION);
|
||||
return 0;
|
||||
}
|
||||
if (!cmdArgs.contains(CmdArgs::noFullUI))
|
||||
{
|
||||
MsiSetInternalUI(INSTALLUILEVEL_FULL, nullptr);
|
||||
@@ -231,16 +252,24 @@ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
|
||||
{
|
||||
notifications::show_toast(UNINSTALL_PREVIOUS_VERSION_ERROR, TOAST_TITLE);
|
||||
}
|
||||
|
||||
updateProgressBar(.5f, INSTALLING_DOTNET);
|
||||
if (!updating::dotnet_is_installed() && !updating::install_dotnet() && !cmdArgs.contains(CmdArgs::silent))
|
||||
const bool installDotnet = !cmdArgs.contains(CmdArgs::skipDotnetInstall);
|
||||
if (installDotnet)
|
||||
{
|
||||
updateProgressBar(.5f, INSTALLING_DOTNET);
|
||||
}
|
||||
if (installDotnet &&
|
||||
!updating::dotnet_is_installed() &&
|
||||
!updating::install_dotnet(cmdArgs.contains(CmdArgs::silent)) &&
|
||||
!cmdArgs.contains(CmdArgs::silent))
|
||||
{
|
||||
notifications::show_toast(DOTNET_INSTALL_ERROR, TOAST_TITLE);
|
||||
}
|
||||
|
||||
updateProgressBar(.75f, INSTALLING_NEW_VERSION);
|
||||
|
||||
const bool installationDone = MsiInstallProductW(installerPath->c_str(), nullptr) == ERROR_SUCCESS;
|
||||
// Always skip dotnet install, because we should've installed it from here earlier
|
||||
std::wstring msiProps = L"SKIPDOTNETINSTALL=1 ";
|
||||
const bool installationDone = MsiInstallProductW(installerPath->c_str(), msiProps.c_str()) == ERROR_SUCCESS;
|
||||
updateProgressBar(1.f, installationDone ? NEW_VERSION_INSTALLATION_DONE : NEW_VERSION_INSTALLATION_ERROR);
|
||||
if (!installationDone)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user