setup: add --help and --no_dotnet commands

This commit is contained in:
yuyoyuppe
2020-08-26 13:46:19 +03:00
committed by Andrey Nekrasov
parent 4e969a3701
commit 870f1095cd
5 changed files with 47 additions and 13 deletions

View File

@@ -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)
{