From ae8600c882b7f9527e73fe124797239183d23577 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Mon, 20 Sep 2021 21:25:28 +0800 Subject: [PATCH] feat: update HMCLauncher. Closes #1014. --- .../src/main/resources/assets/HMCLauncher.exe | Bin 96768 -> 97280 bytes HMCLauncher/HMCL/HMCL.APS | Bin 8024 -> 7192 bytes HMCLauncher/HMCL/HMCL.rc | Bin 6686 -> 6686 bytes HMCLauncher/HMCL/java.cpp | 2 +- HMCLauncher/HMCL/main.cpp | 210 +++++++++--------- 5 files changed, 106 insertions(+), 106 deletions(-) diff --git a/HMCL/src/main/resources/assets/HMCLauncher.exe b/HMCL/src/main/resources/assets/HMCLauncher.exe index a233150dd6fc2b087ce1192c60c7fd8003edd53b..d7747908730627f71571b0ed223c42934467315e 100644 GIT binary patch delta 5899 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 diff --git a/HMCLauncher/HMCL/HMCL.APS b/HMCLauncher/HMCL/HMCL.APS index 8801fae64ca321f1ef7544bc4886c360449389e6..1167bbfe4531abb3f853ddf505b25533275b6cf8 100644 GIT binary patch delta 393 zcmca%H^X9r0;ADHMP*?PDFy}?tC-^a(xT+l;+U+&vc$=a%<`ML*!Kx>vM?|+fB?(p zi;~8Sj3$#=rJI?J7z`(OOJ4-?VrAw}Y>{DP+PE;7k*x!$PK9A|o~)QY6Ic@i!+$7X z;c#KFVu)cVX2@qKWhi1uW=I9HV;Hg+5*f-E5+{eUxK5T}l98=v1R24=;K2~i-~^=q z|33vb$$)`{gK2UglQ=&Xmrh>9B#Kr1BU33B@oJ_sjFbP#i1C6Ag*wz|vZAaq>k0t| zh8dFu*`?V;fZ_>)lW&Pju>r*xrU*{vlaONL1~P95PPUWKo4i4eg-Jqaa-D=88z_Vx z2mwW9CbP+lF|i0wmXnubvJjhWCoje33G`8q*u*Y5aPa&Q2L_KE8_1h0Bqm!i$pHW- Ccw*=P delta 1150 zcmah|O-~a+7=Css1rHjiu-$&7U{IooU|SGd5}TCmA{+OE>~4`JO*RAz92Bs%7d7d@ zaPk69VmRr+3kOX!`~W%O69<8c4yzOXP$ZHo$bu0+~%N= z+d4Be@H-ADljUNqQmvI&>IzY!E9+}D_A)ZSmZXG$-3`eRggE;gjt*VU4UR7Aab$xq@}_)Yy=$k{(M`-;O_WfX|-F(MA@j zWENUM@n#G~hpW!JnyKi;f{GN{%yhds2Ban^XU_5FRNK)k)6>jp3lq4)DepDaJiM*Z zzuOXd0*x@VM!~vHAQbu^hnxcWgYfdRj%Qk)F|BY);AHcrqUuQVI!@gvX^Lf%-Hhg^ zEZfDHAGB51E@9j^v}>kitGMi2CDp<3g#T|^MB7KxEk{MhH)d3Q7Fh`Fl_WKq;11E5 z^<2%>NuVT&z)5xy3&W#zi!M3Gxl^P^D`>u|sU&H_6NM(-rqWz?%Hf$Dz~3dQ?>Qwy zEqHTzy+|vhlK!4-<^~UM~)fM zp-zp&+hMn*@TmhgsP`a?>`PeUSFCxx=0$$J8ocEP1BZL#Xv_1qebbiHYTH0}Yh~VJ zdgo!Bqdm6M16=Il*Q$eFDgd?~on)KQfcPWKo=$0YG?gd%BiJHoz&qCtKr@8c{XMgIWBBlwsA diff --git a/HMCLauncher/HMCL/HMCL.rc b/HMCLauncher/HMCL/HMCL.rc index 47458e288a8e0f44cb88724a09a4f8545bc79a0e..414ec094a488679c460597679a76ebc4e85f6c22 100644 GIT binary patch delta 50 zcmbPdGS6hgA3jEt$$$9_8BI3p^NTYBIoTrelLZ9DCf5ipU^Zef+$=Bb%?Omu7TL@S E0FPr1N&o-= delta 50 zcmbPdGS6hgA3jE-$$$9_8I3mU^NTYBIoTrelLZ9DCf5ipU^Zm1+$=Bb%?Omu7TL@S E0FK%YNdN!< diff --git a/HMCLauncher/HMCL/java.cpp b/HMCLauncher/HMCL/java.cpp index 0b8010f4c..d3fddce7a 100644 --- a/HMCLauncher/HMCL/java.cpp +++ b/HMCLauncher/HMCL/java.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #include "java.h" #include "os.h" #include "version.h" diff --git a/HMCLauncher/HMCL/main.cpp b/HMCLauncher/HMCL/main.cpp index ea6a097c7..aa58359e1 100644 --- a/HMCLauncher/HMCL/main.cpp +++ b/HMCLauncher/HMCL/main.cpp @@ -1,105 +1,105 @@ -#include "stdafx.h" -#include "main.h" -#include "os.h" -#include "java.h" -#include "lang.h" - -Version J8(TEXT("8")); - -extern "C" { - _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; - _declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001; -} - -void RawLaunchJVM(const std::wstring &javaPath, const std::wstring &workdir, - const std::wstring &jarPath) { - if (MyCreateProcess( - L"\"" + javaPath + - L"\" -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=15 -jar \"" + - jarPath + L"\"", - workdir)) - exit(EXIT_SUCCESS); -} - -void LaunchJVM(const std::wstring &javaPath, const std::wstring &workdir, - const std::wstring &jarPath) { - Version javaVersion(L""); - if (!MyGetFileVersionInfo(javaPath, javaVersion)) return; - - if (J8 <= javaVersion) { - RawLaunchJVM(javaPath, workdir, jarPath); - } -} - -int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, - LPWSTR lpCmdLine, int nCmdShow) { - std::wstring path, exeName; - - // Since Jar file is appended to this executable, we should first get the - // location of JAR file. - if (ERROR_SUCCESS != MyGetModuleFileName(NULL, exeName)) return 1; - - std::wstring workdir; - size_t last_slash = exeName.find_last_of(L"/\\"); - if (last_slash != std::wstring::npos && last_slash + 1 < exeName.size()) { - workdir = exeName.substr(0, last_slash); - exeName = exeName.substr(last_slash + 1); - } - - // TODO: check whether the bundled JRE is valid. - // First try the Java packaged together. - bool is64Bit = false; - GetArch(is64Bit); // if failed to determine architecture of operating system, - // consider 32-bit. - - if (is64Bit) { - RawLaunchJVM(L"jre-x64\\bin\\javaw.exe", workdir, exeName); - } else { - RawLaunchJVM(L"jre-x86\\bin\\javaw.exe", workdir, exeName); - } - - if (FindJava(path)) LaunchJVM(path + L"\\bin\\javaw.exe", workdir, exeName); - - // Or we try to search Java in C:\Program Files. - { - WIN32_FIND_DATA data; - HANDLE hFind = FindFirstFile(L"C:\\Program Files\\Java\\*", - &data); // Search all subdirectory - - if (hFind != INVALID_HANDLE_VALUE) { - do { - std::wstring javaw = std::wstring(L"C:\\Program Files\\Java\\") + - data.cFileName + std::wstring(L"\\bin\\javaw.exe"); - if (FindFirstFileExists(javaw.c_str(), 0)) { - LaunchJVM(javaw, workdir, exeName); - } - } while (FindNextFile(hFind, &data)); - FindClose(hFind); - } - } - - // Consider C:\Program Files (x86)\Java - { - WIN32_FIND_DATA data; - HANDLE hFind = FindFirstFile(L"C:\\Program Files (x86)\\Java\\*", - &data); // Search all subdirectory - - if (hFind != INVALID_HANDLE_VALUE) { - do { - std::wstring javaw = std::wstring(L"C:\\Program Files (x86)\\Java\\") + - data.cFileName + L"\\bin\\javaw.exe"; - if (FindFirstFileExists(javaw.c_str(), 0)) { - LaunchJVM(javaw, workdir, exeName); - } - } while (FindNextFile(hFind, &data)); - FindClose(hFind); - } - } - - // Try java in PATH - RawLaunchJVM(L"javaw", workdir, exeName); - - MessageBox(NULL, ERROR_PROMPT, L"Error", MB_ICONERROR | MB_OK); - ShellExecute(0, 0, L"https://java.com/", 0, 0, SW_SHOW); - return 1; -} +#include "stdafx.h" +#include "main.h" +#include "os.h" +#include "java.h" +#include "lang.h" + +Version J8(TEXT("8")); + +extern "C" { +_declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; +_declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001; +} + +void RawLaunchJVM(const std::wstring &javaPath, const std::wstring &workdir, + const std::wstring &jarPath) { + if (MyCreateProcess( + L"\"" + javaPath + + L"\" -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=15 -jar \"" + + jarPath + L"\"", + workdir)) + exit(EXIT_SUCCESS); +} + +void LaunchJVM(const std::wstring &javaPath, const std::wstring &workdir, + const std::wstring &jarPath) { + Version javaVersion(L""); + if (!MyGetFileVersionInfo(javaPath, javaVersion)) return; + + if (J8 <= javaVersion) { + RawLaunchJVM(javaPath, workdir, jarPath); + } +} + +int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, + LPWSTR lpCmdLine, int nCmdShow) { + std::wstring path, exeName; + + // Since Jar file is appended to this executable, we should first get the + // location of JAR file. + if (ERROR_SUCCESS != MyGetModuleFileName(NULL, exeName)) return 1; + + std::wstring workdir; + size_t last_slash = exeName.find_last_of(L"/\\"); + if (last_slash != std::wstring::npos && last_slash + 1 < exeName.size()) { + workdir = exeName.substr(0, last_slash); + exeName = exeName.substr(last_slash + 1); + } + + // TODO: check whether the bundled JRE is valid. + // First try the Java packaged together. + bool is64Bit = false; + GetArch(is64Bit); // if failed to determine architecture of operating system, + // consider 32-bit. + + if (is64Bit) { + RawLaunchJVM(L"jre-x64\\bin\\javaw.exe", workdir, exeName); + } else { + RawLaunchJVM(L"jre-x86\\bin\\javaw.exe", workdir, exeName); + } + + if (FindJava(path)) LaunchJVM(path + L"\\bin\\javaw.exe", workdir, exeName); + + // Or we try to search Java in C:\Program Files. + { + WIN32_FIND_DATA data; + HANDLE hFind = FindFirstFile(L"C:\\Program Files\\Java\\*", + &data); // Search all subdirectory + + if (hFind != INVALID_HANDLE_VALUE) { + do { + std::wstring javaw = std::wstring(L"C:\\Program Files\\Java\\") + + data.cFileName + std::wstring(L"\\bin\\javaw.exe"); + if (FindFirstFileExists(javaw.c_str(), 0)) { + LaunchJVM(javaw, workdir, exeName); + } + } while (FindNextFile(hFind, &data)); + FindClose(hFind); + } + } + + // Consider C:\Program Files (x86)\Java + { + WIN32_FIND_DATA data; + HANDLE hFind = FindFirstFile(L"C:\\Program Files (x86)\\Java\\*", + &data); // Search all subdirectory + + if (hFind != INVALID_HANDLE_VALUE) { + do { + std::wstring javaw = std::wstring(L"C:\\Program Files (x86)\\Java\\") + + data.cFileName + L"\\bin\\javaw.exe"; + if (FindFirstFileExists(javaw.c_str(), 0)) { + LaunchJVM(javaw, workdir, exeName); + } + } while (FindNextFile(hFind, &data)); + FindClose(hFind); + } + } + + // Try java in PATH + RawLaunchJVM(L"javaw", workdir, exeName); + + MessageBox(NULL, ERROR_PROMPT, L"Error", MB_ICONERROR | MB_OK); + ShellExecute(0, 0, L"https://java.com/", 0, 0, SW_SHOW); + return 1; +}