From eab4463c2dde963354dcb0c7d57f7da33aceb36d Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Thu, 14 Feb 2019 15:34:52 +0800 Subject: [PATCH] HMCLauncher: verify if JVM version is between 8 and 10 --- .../src/main/resources/assets/HMCLauncher.exe | Bin 94208 -> 95744 bytes HMCLauncher/HMCL/HMCL.APS | Bin 50652 -> 8024 bytes HMCLauncher/HMCL/HMCL.rc | Bin 6602 -> 6686 bytes HMCLauncher/HMCL/HMCL.vcxproj | 4 +++ HMCLauncher/HMCL/HMCL.vcxproj.filters | 3 ++ HMCLauncher/HMCL/Version.cpp | 4 ++- HMCLauncher/HMCL/Version.h | 20 +++++++++++ HMCLauncher/HMCL/java.cpp | 2 +- HMCLauncher/HMCL/lang.h | 4 +++ HMCLauncher/HMCL/main.cpp | 25 +++++++++---- HMCLauncher/HMCL/os.cpp | 33 ++++++++++++++++++ HMCLauncher/HMCL/os.h | 5 ++- 12 files changed, 91 insertions(+), 9 deletions(-) create mode 100644 HMCLauncher/HMCL/lang.h diff --git a/HMCL/src/main/resources/assets/HMCLauncher.exe b/HMCL/src/main/resources/assets/HMCLauncher.exe index a4b610ff429999922b057227d27fe8479e464947..9a6ece8e21e0571c97e31322f01faab333dbffc6 100644 GIT binary patch delta 37179 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 z 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 R1Yo$*-j&Bkzqu#C^B+KHCcpl6As!$l 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 YR_17#pU-j4o$|Ac#UIeAcZ$XT1<`bFK>z>% literal 50652 zcmeG_30PEB+h+tBP&TtP6=BM)J`=$Wa03KVk}W{RG>1hLQvpF#M3%rTKmR0K)IT%K z{{PW0Ni;Q5lmVAaGnY?O%LRyBQ9%hr7`XrY-aBWwa~WU;M$_-Vm*>nm=iScxzUMv5 zJ#*(m2q7{^48tWTYFsW*>kDZDnL@@v&M*=c-q=)CAZZ5)@fbOMQha1w{Pd`Vu;|&- z<6{!yA|j{9MaIU&PoLoH;S-h+9T627$ClX-`?v_?PXlq9@_%B*I*>;BFR_r9NL(Z* z);@{=m$zq-+&v&b9_$_L<3$`Dh7uD52FiWiz5QMfboT||5N85fdV6}xQ3tuFx4V!3 zc%U6Z%s8<7IR8n(>0z4>z3$fzrzEizD{QbxfV$Icqg586?J;)$O@*E*xM3CIiU+(+52XP$gKzdM+ zS4glt&@0G)QlN*Ie6qXGBs9o{^yK3`{C$1h{XA9Zp+lUU97!)t0>9uue;>;4;NU=P z`1qiyzFw5w(b0kQCWN}1ltN741q^~dI>y5JeZ(-95F2x$*Cr5O;z4|fJ()uyNDNS} z?jYnp-h|(A80%5Bd)pLGwxA}%u%evVp5l6@O|tA*S*VpuW1qH3Qh(t0m9s%Khb?je z7R5H;Vt@wFRvNZZ8fA3HaA;vDKs~v@#$a!g8J+|N4Mw*rdKsprivL6yqu9KsSCIF3 zKNykzWc(y=PcI*DKd&IR`w<%qLGJD6;WNn-f?F$eh*s!OHFN}VV#``TH0OxfLK^j0 zov*^6N|*?V1Bm9lG#KU_LL96c=Oqs^l1wL)NIZ!I`gkZukpvP(qRDJ1$3yHV06YS) z(;<%}u>e6TIzqw#9}V~@mcJ3sQS$Y}AOO?>{?xM;E($E6gjF9G9d>*J4N{^2Zo0?0 zT{!i!%?g(<05)=HSq(Jsu*e7}djY=bYQeUu9@MZTao1a22$4aNVT>TL-Ab%^vA;6F zZ@fjPp0H#R3-1Y@foL`+QzOXcW`_i0Ek1DkII{hu%`K=H&vy59CuC=4XJuGNLX1d& zPp}ujtE;Qa%F2!%JGNrQ3SVE}FTVKV+_`hb#l=&nP8~OH+?Fj{cJ0~~6BDy^>C*iC z{55OV%$zy1qWnHEikIktXWavS*)Y6d)GQ423xZ)Lyq-{}j4QvLSv2tIf{p=GzkA+$!5@7YX6K6cHvZ$e;l8%SV|^nlQYjkaf~0cexbSP z{^C_>1yj5vMEesfKQ{bsq}#w733LrLDLFL~L99h5Ko z%d~6$3QMaYe;$;=$Js|^LtX1mtvj)|qOkM$8%3cf2R!Khe#)b|9L1y3iL-iJ)ZM+H zVBU9KaiZ3y;pB;OMg9F7S*Z=Rc}#8k9BFBaqHlw;)YWQ8jKkeSkIII)GNp=!13w>0 zt^4zTuN8EvKP3ICtRVBx!JXcok-TBL@{dF7y7ggRjk_OF|GcvIf0u15YN&WL@u){? zzFC9JwPWef`rEmsNvG{*)cS5puJH<%BX$Pm=nD! z&d;uY{_xNkMeVhlw#)8TnAnVM*dlvzY5A`)#$D^ojJu6Qs-aUjtuKh@~!$cI~seXi$EQS48!ng#0ZO6in; z@-mpIfFHDLqn0BiE`DJSpD}IgHmQ-;Sbm{8aG0XVNB~_RH zu-(s?*xajqHKbwi*rli9b5dOLrFMCem}{;bw=u3+`6aieD0*Mb7_k4XDQEl(e;-^E zUh*kGE@zy&oOUSBwc|v^^*j$(CiBdV^$&}8ITe4H%j`LOFe4|kKJJ}EZ&obtwWGfL z(!;cbOy>nR&#f!2wjF)LSgUbsmqYGx+F`u1%|74QcjM3kmjV`zW)qol6^8U%CX18re z-!d6pc3-}-_o!R_Vy(W6H~R8XO-^5{jg`+$FE5ObE{F%lik(3-(iLxIEin3$smb}% zYUBOqly$bFOHGs?98HZpytC_!^qExpeE=OQpATOnCUj)khAS zsML1PTz~Q72*;i7Dy>iV>HqzoAwKg|cK8141Cd>HUHmf@HqY!}6;2twl}uO1o&Ao6 zhi9m!pH1U^<{jI){^BNX_8E1vOV?>}uk|0HntUvm9zML*X4Ogy)%2BNE3%8O3%~bF zh0Qa+=5oV0-wJjR2KzWreb%4pP$fNnF=Tg0Dc&e~d--{89~YWV$X56oK?V@+?1ekk z69UI51kOv24L7`G8K|EE6kNf1+JJg z8HKq0+zPj*G9cydV?hvH!uwbmz}z6I?_-UjLN6`%vG776dIBXOb3#3PkaZD=NQ4cN)#zWa@?IcFibWUDDuJL!VMS-!ZDPhW_ov zKkfFnreAyQZ;>CvmA?7=;QJ!<4+wM8WflGD7z;+y+Isk3lyg zjd~x0dl!1Ou#chV@$?K{c>ezA(IYBF%ta4~9(YDQ!0ltqc^4XDjuR<&!EcMO-nlc( z&iJ8Yow8GUVZEL5%+2vE0*(>PIeqZZzyuBpI(Fjf=1?{>gM%2ZPRz|sOe`!+OgM6| z$O22|=I~1?xSxbuz_z4fxEH;jNl0h-j#CD5xcf<%l;Psf!_7XE4nGVd)8n?{Zzo!M zCSB{Zr>2{@XHV~58T4PzPwlm$JMb! zExR@^rE9lg3%hI_abfc}Rb|%~+bcW#IKyqgI~E0IFRjn&Job}+b^B#b(BRGAjfARMp-+FP*DW{d4&%ZfnRq^hxR=r%6xFvRteL&eN#h~G2et7KI z?$^zyEjg20^)}glsCuvL!*35H6@by6U_4uH-GwyObMKe(&mmyu1aauUGa-`0c^5&`*;m5(Z~{IbDmL*|N6^&M<0-&(tMOj33B zqnqK^mX~%5bD5M zsOp2FNj*&b9Ib6Ce_vZDe>D4*T+_;ss_s)uHxI70xu3WG9hvj_gt2ogoIahle9pHI zI&WK0Vm0QE#lx%JVtv+GG^~hQ<&gjDGWXRrS3VqLZF6XBhQjd&uNRMQmM`y<;u>LP z{C>|NHNB1xI_R)Ud2n^jAtVaVE-VU&?o#b^Y4FVtT(|F(rYHM4*7VAlwmiCjy_e1X zEqhkHTYN4<@zv#*r_cM?|IP=lS^cEx@mAPaMc$dQU-fAivbLwGy$j1DH%WeOyfPsq zT=v6Skb5iF^gznyJ`MX$jIo|xRvfeS@U-P8T?@OUUb${#x;?qVX$2V4ndvuPx$lId zb@u!Ur*r3Hx|~!>#w$nqjN_|=afMDogcn|IIk zN$DPBVVpa%rq?%Xr!B9HHaclhuyW7xf-Z`@S54B*Kl72Q1Nf_{6sGRD;%Zi zbHFRvCEZHCJ0f4WG~%NNEB7t??$u?F9vu0jyyVEL?!SB;_QrC#BIU|5&nf*rpSUsj z;nbX@14B<=?()jRDG;E_y&FC&ec{Sy-HTo{%6ssmZS>yipjnc^^8D$4x?Z@t_`~WM zr{jydeY$b${!Kr3{y2JtrLjdrb?#yL&-S&^Co>lP)o+&3wMCn3V(z|i#k_}UPi4ZC zMfFEB?FK&>Ao1|Ko^jP?xAGtgD4gsvm znQl2}3zpukb29$W8oxe)DDYj?GkH_Zqeblq> zz1sPoq)H~fc5nL^Cf^O(Q&v9rcz~z0c==hkwfz>?k2MZ8@iXf2&Tmzhj6+}dGrAOf zX?szBGBm#D#kD;b*N>2dd~nw7$~#vP?e1rk@J;fCn67Cr#P-~JX!0UNn{9bF;nKg6 zXJF~D9rkF4ap-$rn4AyWmY1@DWUoJ4Fy#CEvRt!*<1Q8_28JQ~8_pI!1Lt7rpHS*E zA4{EFEdHxc!iAVsmIWmxVU?!0;}0ix55%fed0J{iLvCX57FVYB>%`sW7s|u0b|)c&+9y|kO+pavxE)eIME1%!{$2?;K$?3ce1^;oQW_)) zyQ_i%@aS^Eb75|fnE#}ti`|q)v|sH1|D@PQTWDMybXx&5V~{3*u282|hjpmVz}xj6spzW*`QcopYAasI;?FjPG8 z$3B*I8TXV%9RIqHe>!fTw){!;|I=nS)kn1d$?Siqzn`{T?0>QU`7uD(HeGVyYx4bH zbMbAc^_t2zlsvxeSk}dEN+a4Y_P;QGXnYEDL&YnVYbbd_{b_9Ll8f;##=kIrXnYED zL&YnVYbbd_{dI|ZN+ZU<82`ffq46oq4Hd6cuA$@!^{26|OD@L082`ffq4D{wC&5i3PL;Ut!Ve1$2+K&#AufUJP|i!F#I>;)C|Y0{REiWAAgc zAKur^z!o}y~~1x z@D_QouTa;v&RfW*tqpi5d%I+!PW+hC)`kj(HlnR=!pQ(&I0ix?DIjUplMl!F3*I%) z#tTzSCuV@aMedWVSZO zXnbRv&B@@wQFpXKChTi{>cH;?DGO4Y$A@sv16ioQLY1)0CT(*eju}J5w>~y&qXiw? zJU&o=Y9lXqfHEcx9MV4S_||5hJ}}T(ukj(Y5$f>97w*C`ACIy9B;%Xv(bgPv*Li%X z?8I@To`~NNJFYAo1-|G^Z!fp^bc6=6Ko*SN-=FS21Tj`M3L_f$PvzRe#u3aCNH! zF30y5;w4FAGxlAESdy~uY=*Zs<2#!H%`nB7OBqIqw65@avNTB=fB|7t0AN5!i(MIJ zYd`*bB;Z9{aPi-{rTM>zWGp@ncyzf0vCNO_zq{-v>aQ`+Jn8<>+yA=WUpy{4K`e{< zKjHU5i2m1n|Awy5i3rC-Tloy_|F-JURz6XGF@A6?i1EX&`|V!8+Um!)@`>YD9KTP~ z_!X|JkGpQ@_a-L&-zf^^vO}C4$pzLOMgT8yg9pc=!;hM2Y&|`%I9m=tYM!u zYfj(h;4Sn;C~4*bo$*IK2L+?=5%ci-a=oXjvCKmKplPFZmC zCuxw1AZfJ)`xT$76zYUJ@OaQq>bS(`Muqe!qnQ|?a!?1fl@BnS--LKtM;RzfM(Lkq4(+-@%7Vm?uNt+UT7!T*jIbMTxFeyBhP16={;@P8B2Fz5YG*#fKsob{(2{7*!z!v|9!Ax4@!Q1DG2m`u~8^S{YruIHB?KSaMKF>-Ds>FI+1O zRj2l8H6DNzZ>aW!a;W@gsr}~8kA$}ALf01ib&-p@=t3v9&#goH#GfvH{ZID4FwWak zZ%h2Or#&I>v)KOs_xKa-*Z%)*gt4uQpV|`ty2wRcbfIfY`$9Y0Qy1IUZT+KuqPf2B zUchsLmd;~ZTYqW0nB#8~+uG;I%a=vV+S&&ko->@HG`iS~zY}fkciCEefo*8q2|*q2 zrHg3Wy4s9qW4fMo3VeZWxuG9aZS(Kp_5N*fYu_v2Sr`9YRb?l(Np;YA#)D@zsJGC^ zcoxM!&%v@VMvw>3xA=6bb`_9^Lel61^aWl3mqAK{r0x$Wv%mYMzdh&q68jPpt0(G( zG+JUGWuZ(N+lY=IK<@@A3zA0vK%G$~#ABj$evUlI>!xFK&60r(ZT*u)8C31iwiQqh zMIMT8DKCZ}jXmyE04E!1s?!e4E8rvqe)pEjy!$Q_Wz0XvFe7*ge~*TS$RN>k3^(9u z?gG21A9Tuva*$sb%gxo1wmE+OdQAC+u&0@y>fBP^lKw66QCv&>LSG?|5cV|lQyW{# zo6{fRm~egJ&%HRm3BR+@7Jqmi&;O1D=S2Q@Ac&)9_FDMaxsFedb2xvF$2C>OUoPaw zI_S>M$+TUlXF<;zvA)51B+f0fM$l;FA!(jJU}7n1r~9NP7_UG2mL} z@6d$5&zxD&Gb3lo+yjDwCwY4N%f0<3`%m=pwCL1lPISb)gqe}DmluY`&5m5SC^F7I z>ScgOM$eox3vyta6CK&eIl_7@lKUj3aI*kbv@D=x4Y0a2m*;F6KWCHPJ{o4rDgdGNV$pFbP){VaB#n|Bv=a8l zO=gqVA)iMgL2@*iMPiVYrEwt6VEHgMg|j{w3Gpid%VNlU5=+8>J`r>ZgIXlpKom(} zp|c_CVp!Qr020mO0?7-&OWX1Uj(8Hm>JSUM%wg$~&>cME%W4+M;=@3vg#hyb$tWuV zWJdxYUazqBQJIrjcsx(mP-0IUfo=$l83}9OLY5{PWXaA|U}FBZkZbxe=fhzdtB1+VdLgD@|IV$Ed$NfnEZU7Y354M!e`C zeL)t^CUHO!4gEL|a(*8go9-}nhN09Ks3wppU@OKt1eNNdB^Rh;Ta7dl6-DD*mIk2z z(V+Q>rQy$2Hi!qIjdG4Pp;-<14>V|wH=)6(8r_jEXE3V}f2_{}nsXX7gVZ$Ct~~$= zHQ~##Z$g7Bhcm1Y-1l}YT4TS9Ysu~&6wgWK?}xVn@3L1Yo}0J$cwBEhA^17@*k79a zXO!Ifw<fG~gZdO=ZbMFs^1 zABIGRQieQ+WQGi&ToF*jjUgXQhcjdX#Z!R1a)#o`jY7JUnS_)$jTrQR)&MbBBuHox wqvhnULdBD-giI!X6Xu(oBqYR+WCx?-{ta4?bQ)1|0?iC^nqT%CCwh(#S8lIeRvxxm<6(J=?!^!?a=NT;~%L^B?>oOQK=rI^ho+unTd7cp4Win32Proj HMCL 7.0 + HMCLauncher @@ -94,6 +95,7 @@ Windows true + version.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -129,6 +131,7 @@ true true true + version.lib;%(AdditionalDependencies) @@ -153,6 +156,7 @@ + diff --git a/HMCLauncher/HMCL/HMCL.vcxproj.filters b/HMCLauncher/HMCL/HMCL.vcxproj.filters index e4fb0ec74..06f818873 100644 --- a/HMCLauncher/HMCL/HMCL.vcxproj.filters +++ b/HMCLauncher/HMCL/HMCL.vcxproj.filters @@ -36,6 +36,9 @@ 头文件 + + 头文件 + diff --git a/HMCLauncher/HMCL/Version.cpp b/HMCLauncher/HMCL/Version.cpp index a8b0279a6..9113dc7ef 100644 --- a/HMCLauncher/HMCL/Version.cpp +++ b/HMCLauncher/HMCL/Version.cpp @@ -1,7 +1,9 @@ #include "stdafx.h" #include "Version.h" -Version::Version(const std::wstring & rawString) +using namespace std; + +Version::Version(const wstring & rawString) { int idx = 0; ver[0] = ver[1] = ver[2] = ver[3] = 0; diff --git a/HMCLauncher/HMCL/Version.h b/HMCLauncher/HMCL/Version.h index 2e0784d16..630b67da2 100644 --- a/HMCLauncher/HMCL/Version.h +++ b/HMCLauncher/HMCL/Version.h @@ -9,6 +9,18 @@ public: Version(const std::wstring &rawString); + template + Version(std::initializer_list ver_list) + { + int i = 0; + for (const auto &data : ver_list) + { + if (i >= 4) + break; + ver[i++] = data; + } + } + bool operator<(const Version &other) const { for (int i = 0; i < 4; ++i) @@ -16,5 +28,13 @@ public: return ver[i] < other.ver[i]; return false; } + + bool operator<=(const Version &other) const + { + for (int i = 0; i < 4; ++i) + if (ver[i] != other.ver[i]) + return ver[i] < other.ver[i]; + return true; + } }; diff --git a/HMCLauncher/HMCL/java.cpp b/HMCLauncher/HMCL/java.cpp index 93e806e66..f4f9579d5 100644 --- a/HMCLauncher/HMCL/java.cpp +++ b/HMCLauncher/HMCL/java.cpp @@ -58,7 +58,7 @@ bool FindJavaByRegistryKey(HKEY rootKey, LPCWSTR subKey, std::wstring & path) { if (Version(javaVer) < JAVA_8) oldJavaFound = true; - else if (!(Version(javaVer) < JAVA_11)) + else if (JAVA_11 <= Version(javaVer)) newJavaFound = true; else flag = true; diff --git a/HMCLauncher/HMCL/lang.h b/HMCLauncher/HMCL/lang.h new file mode 100644 index 000000000..b17749023 --- /dev/null +++ b/HMCLauncher/HMCL/lang.h @@ -0,0 +1,4 @@ +#pragma once + +#define ERROR_PROMPT L"Java installation cannot be found in this computer, please download it from https://java.com \n" \ +L"δ̨ҵJava 8~Java 10 https://java.com ذװJava" \ No newline at end of file diff --git a/HMCLauncher/HMCL/main.cpp b/HMCLauncher/HMCL/main.cpp index 905b31141..80717d8c8 100644 --- a/HMCLauncher/HMCL/main.cpp +++ b/HMCLauncher/HMCL/main.cpp @@ -2,16 +2,30 @@ #include "main.h" #include "os.h" #include "java.h" +#include "lang.h" using namespace std; +Version J8(TEXT("8")), J11(TEXT("11")); -void LaunchJVM(const wstring &javaPath, const wstring &jarPath) +void RawLaunchJVM(const wstring &javaPath, const wstring &jarPath) { if (MyCreateProcess(L"\"" + javaPath + L"\" -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=15 -jar \"" + jarPath + L"\"")) exit(EXIT_SUCCESS); } +void LaunchJVM(const wstring &javaPath, const wstring &jarPath) +{ + Version javaVersion(L""); + if (!MyGetFileVersionInfo(javaPath, javaVersion)) + return; + + if (J8 <= javaVersion && javaVersion < J11) + { + RawLaunchJVM(javaPath, jarPath); + } +} + int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) { wstring path, exeName; @@ -37,9 +51,6 @@ int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmd if (FindJava(path)) LaunchJVM(path + L"\\bin\\javaw.exe", exeName); - // Try java in PATH - LaunchJVM(L"javaw", exeName); - // Or we try to search Java in C:\Program Files. { WIN32_FIND_DATA data; @@ -72,8 +83,10 @@ int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmd } } - MessageBox(NULL, L"Java installation cannot be found in this computer, please download it from https://java.com \n" - L"未能在这台电脑上找到Java 8~Java 10,请从 https://java.com 下载安装Java", L"Error", MB_ICONERROR | MB_OK); + // Try java in PATH + RawLaunchJVM(L"javaw", exeName); + + MessageBox(NULL, ERROR_PROMPT, L"Error", MB_ICONERROR | MB_OK); ShellExecute(0, 0, L"https://java.com/", 0, 0, SW_SHOW); return 1; } diff --git a/HMCLauncher/HMCL/os.cpp b/HMCLauncher/HMCL/os.cpp index 820e53819..b86d2108a 100644 --- a/HMCLauncher/HMCL/os.cpp +++ b/HMCLauncher/HMCL/os.cpp @@ -106,3 +106,36 @@ bool GetArch(bool & is64Bit) #error _WIN64 and _WIN32 are both undefined. #endif } + +bool MyGetFileVersionInfo(const std::wstring & filePath, Version &version) +{ + DWORD verHandle = 0; + UINT size = 0; + LPBYTE lpBuffer = NULL; + VS_FIXEDFILEINFO *pFileInfo; + DWORD dwSize = GetFileVersionInfoSize(filePath.c_str(), NULL); + + if (!dwSize) + return false; + + LPBYTE data = new BYTE[dwSize]; + if (!GetFileVersionInfo(filePath.c_str(), 0, dwSize, data)) + { + delete[] data; + return false; + } + + if (!VerQueryValue(data, TEXT("\\"), (LPVOID*)&pFileInfo, &size)) + { + delete[] data; + return false; + } + + version = Version{ + (pFileInfo->dwFileVersionMS >> 16) & 0xFFFF, + (pFileInfo->dwFileVersionMS >> 0) & 0xFFFF, + (pFileInfo->dwFileVersionLS >> 16) & 0xFFFF, + (pFileInfo->dwFileVersionLS >> 0) & 0xFFFF + }; + return true; +} diff --git a/HMCLauncher/HMCL/os.h b/HMCLauncher/HMCL/os.h index 406e661b4..e3207899d 100644 --- a/HMCLauncher/HMCL/os.h +++ b/HMCLauncher/HMCL/os.h @@ -1,6 +1,7 @@ #pragma once #include #include +#include "Version.h" const int MAX_KEY_LENGTH = 255; const int MAX_VALUE_NAME = 16383; @@ -20,4 +21,6 @@ bool MyCreateProcess(const std::wstring &command); // Check if file lpPath exists. bool FindFirstFileExists(LPCWSTR lpPath, DWORD dwFilter); -bool GetArch(bool &is64Bit); \ No newline at end of file +bool GetArch(bool &is64Bit); + +bool MyGetFileVersionInfo(const std::wstring &filePath, Version &version); \ No newline at end of file