bootstrapper: handle the unhandled

This commit is contained in:
yuyoyuppe
2020-09-07 16:42:15 +03:00
committed by Andrey Nekrasov
parent 305a04ce69
commit c2d6f740a1
4 changed files with 60 additions and 15 deletions

View File

@@ -91,7 +91,8 @@ std::unordered_set<CmdArgs> parseCmdArgs(const int nCmdArgs, LPWSTR* argList)
} }
return result; return result;
} }
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
int bootstrapper()
{ {
using namespace localized_strings; using namespace localized_strings;
winrt::init_apartment(); winrt::init_apartment();
@@ -215,7 +216,7 @@ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{ {
break; break;
} }
progressParams.progress = min(0.99f, progressParams.progress + 0.001f); progressParams.progress = std::min(0.99f, progressParams.progress + 0.001f);
notifications::update_progress_bar_toast(TOAST_TAG, progressParams); notifications::update_progress_bar_toast(TOAST_TAG, progressParams);
} }
} }.detach(); } }.detach();
@@ -257,6 +258,9 @@ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{ {
updateProgressBar(.5f, INSTALLING_DOTNET); updateProgressBar(.5f, INSTALLING_DOTNET);
} }
try
{
if (installDotnet && if (installDotnet &&
!updating::dotnet_is_installed() && !updating::dotnet_is_installed() &&
!updating::install_dotnet(cmdArgs.contains(CmdArgs::silent)) && !updating::install_dotnet(cmdArgs.contains(CmdArgs::silent)) &&
@@ -264,6 +268,11 @@ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{ {
notifications::show_toast(DOTNET_INSTALL_ERROR, TOAST_TITLE); notifications::show_toast(DOTNET_INSTALL_ERROR, TOAST_TITLE);
} }
}
catch (...)
{
MessageBoxW(nullptr, L".NET Core installation", L"Unknown exception encountered!", MB_OK | MB_ICONERROR);
}
updateProgressBar(.75f, INSTALLING_NEW_VERSION); updateProgressBar(.75f, INSTALLING_NEW_VERSION);
@@ -294,3 +303,27 @@ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
return 0; return 0;
} }
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
return bootstrapper();
}
catch (const std::exception& ex)
{
MessageBoxA(nullptr, ex.what(), "Unhandled stdexception encountered!", MB_OK | MB_ICONERROR);
}
catch (winrt::hresult_error const& ex)
{
winrt::hstring message = ex.message();
MessageBoxW(nullptr, message.c_str(), L"Unhandled winrt exception encountered!", MB_OK | MB_ICONERROR);
}
catch (...)
{
auto lastErrorMessage = get_last_error_message(GetLastError());
std::wstring message = lastErrorMessage ? std::move(*lastErrorMessage) : L"";
MessageBoxW(nullptr, message.c_str(), L"Unknown exception encountered!", MB_OK | MB_ICONERROR);
}
return 0;
}

View File

@@ -1,5 +1,6 @@
#pragma once #pragma once
#define NOMINMAX
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <Windows.h> #include <Windows.h>
#include <shellapi.h> #include <shellapi.h>

View File

@@ -403,8 +403,13 @@ void notifications::show_toast_with_activations(std::wstring message,
} }
} }
} }
try
{
notifier.Show(notification); notifier.Show(notification);
}
catch (...)
{
}
} }
void notifications::update_progress_bar_toast(std::wstring_view tag, progress_bar_params params) void notifications::update_progress_bar_toast(std::wstring_view tag, progress_bar_params params)

View File

@@ -26,6 +26,8 @@ inline std::vector<wil::unique_process_handle> getProcessHandlesByName(const std
handleAccess |= PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_VM_READ; handleAccess |= PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_VM_READ;
for (const DWORD processId : processIds) for (const DWORD processId : processIds)
{
try
{ {
wil::unique_process_handle hProcess{ OpenProcess(handleAccess, FALSE, processId) }; wil::unique_process_handle hProcess{ OpenProcess(handleAccess, FALSE, processId) };
wchar_t name[MAX_PATH + 1]; wchar_t name[MAX_PATH + 1];
@@ -38,5 +40,9 @@ inline std::vector<wil::unique_process_handle> getProcessHandlesByName(const std
result.push_back(std::move(hProcess)); result.push_back(std::move(hProcess));
} }
} }
catch (...)
{
}
}
return result; return result;
} }