|
1 | 1 | // Copyright 2021 <github.com/razaqq>
|
2 | 2 |
|
| 3 | +#include "Core/Encoding.hpp" |
3 | 4 | #include "Core/Process.hpp"
|
| 5 | +#include "Core/Result.hpp" |
4 | 6 |
|
5 | 7 | #define WIN32_SHOWWINDOW
|
6 | 8 | #define WIN32_USER
|
@@ -34,18 +36,28 @@ void PotatoAlert::Core::ExitCurrentProcessWithError(uint32_t code)
|
34 | 36 |
|
35 | 37 | bool c::CreateNewProcess(const std::filesystem::path& path, std::string_view args, bool elevated)
|
36 | 38 | {
|
37 |
| - const char* lpVerb = elevated ? "runas" : "open"; |
38 |
| - const std::string pathStr = path.string(); |
39 |
| - const std::string argsStr = std::string(args); |
40 |
| - SHELLEXECUTEINFOA sei = { // TODO: use W version here |
41 |
| - sizeof(sei), |
42 |
| - SEE_MASK_NO_CONSOLE, |
43 |
| - nullptr, |
44 |
| - lpVerb, |
45 |
| - pathStr.c_str(), |
46 |
| - argsStr.c_str(), |
47 |
| - nullptr, |
48 |
| - SW_SHOWNORMAL |
49 |
| - }; |
50 |
| - return ShellExecuteExA(&sei); |
| 39 | + const wchar_t* lpVerb = elevated ? L"runas" : L"open"; |
| 40 | + const std::wstring& pathStr = path.native(); |
| 41 | + |
| 42 | + Result<size_t> size = Utf8ToWide(args); |
| 43 | + if (!size) |
| 44 | + { |
| 45 | + return false; |
| 46 | + } |
| 47 | + std::wstring argsStr(size.value(), L'\0'); |
| 48 | + if (!Utf8ToWide(args, argsStr)) |
| 49 | + { |
| 50 | + return false; |
| 51 | + } |
| 52 | + |
| 53 | + SHELLEXECUTEINFOW sei = {}; // TODO: use W version here |
| 54 | + sei.cbSize = sizeof(SHELLEXECUTEINFOW); |
| 55 | + sei.fMask = SEE_MASK_NO_CONSOLE; |
| 56 | + sei.lpVerb = lpVerb; |
| 57 | + sei.lpFile = pathStr.c_str(); |
| 58 | + sei.lpParameters = argsStr.c_str(); |
| 59 | + sei.lpDirectory = nullptr; |
| 60 | + sei.nShow = SW_SHOWNORMAL; |
| 61 | + |
| 62 | + return ShellExecuteExW(&sei); |
51 | 63 | }
|
0 commit comments