From 82ab2922e0d5284ae645327356617e5b0caf117c Mon Sep 17 00:00:00 2001 From: Manuel Cortez Date: Thu, 17 Feb 2022 14:05:13 -0600 Subject: [PATCH] Added bootstrapper binaries and code --- updater/bootstrappers/bootstrap-lin.sh | 33 ++++++++++ updater/bootstrappers/bootstrap-mac.sh | 36 +++++++++++ updater/bootstrappers/bootstrap.exe | Bin 0 -> 12800 bytes updater/bootstrappers/bootstrap.pb | 83 +++++++++++++++++++++++++ 4 files changed, 152 insertions(+) create mode 100644 updater/bootstrappers/bootstrap-lin.sh create mode 100644 updater/bootstrappers/bootstrap-mac.sh create mode 100644 updater/bootstrappers/bootstrap.exe create mode 100644 updater/bootstrappers/bootstrap.pb diff --git a/updater/bootstrappers/bootstrap-lin.sh b/updater/bootstrappers/bootstrap-lin.sh new file mode 100644 index 0000000..59420ba --- /dev/null +++ b/updater/bootstrappers/bootstrap-lin.sh @@ -0,0 +1,33 @@ +#!/bin/bash +MoveToTarget() { + #This takes to 2 arguments: source and target + echo ""$1" "$2"" + cp -rf "$1"/* "$2" + rm -r "$1" +} + +WaitForProcessToEnd() { + #This takes 1 argument. The PID to wait for + #Unlike the AutoIt version, this sleeps 1 second + while [ $(kill -0 "$1") ]; do + sleep 1 + done +} + +RunApplication() { + #This takes 1 application, the path to the thing to execute + python "$1" +} + +#our main code block +pid="$1" +SourcePath="$2" +DestPath="$3" +ToExecute="$4" +WaitForProcessToEnd $pid +MoveToTarget $SourcePath $DestPath +RunApplication $ToExecute +exit + + + diff --git a/updater/bootstrappers/bootstrap-mac.sh b/updater/bootstrappers/bootstrap-mac.sh new file mode 100644 index 0000000..71e49a7 --- /dev/null +++ b/updater/bootstrappers/bootstrap-mac.sh @@ -0,0 +1,36 @@ +#!/bin/bash -x +MoveToTarget() { + #This takes to 2 arguments: source and target + echo ""$1" "$2"" + cp -rf "$1"/* "$2" + rm -r "$1" +} + +WaitForProcessToEnd() { + #This takes 1 argument. The PID to wait for + #Unlike the AutoIt version, this sleeps 1 second + while [ $(kill -0 "$1") ]; do + sleep 1 + done +} + +RunApplication() { + #This takes 1 application, the path to the thing to execute + echo "toExec: "$1"" + exec "$1" +} + +#our main code block +pid="$1" +SourcePath="$2" +DestPath="$3" +ToExecute="$4" +WaitForProcessToEnd $pid +MoveToTarget "$SourcePath" "$DestPath" +RunApplication "$ToExecute" + +osascript<u(}0V`u$f|V9&k+CEeX@pi;?TX!5 zfm}(!8EwmSybbMfn&ccOu}jiA=fnp$O>5V66M;Aqq$I~UwM|VDe>6@8R&^9xK?{~O z{oOaS(gJpxKYC7^6OYb&^WJ^;-TS-u-Ff%TXlouk%B+kr8;Y(o_8jhXZRYjwt`1{( z{*veCv+w2nXz6oV)jwLgt0NF~bw|ScBmOQ|t3MP9ORjyQD-sL20wLG7onBX0xJ@jX zH!ru?6zy>{R-HA6Ju_auGp+3n=E(X)mgO$C7?g!3)rmWm&D2LlZHs}MD1@J1-KfnD zhH-(BcxUcrmq@tw)-u+{8;nh4bJG7xwYQG3$A5>Ul2$kZ<5}c0$+%p^7isfLe#VH6`-qG$qR#BK86zbI8#_A}bPo#IT#S-&ZDwq! zBod9Zg2sKa7Y)*R2TI1Z+0c|h`MCLq=7Eme5GWmlx}&;≫IVjLE0$oTB{}ons!5 z4F-x+W8f_s;QWu{8P%RIM0MdNRL?8`i!}>XkfaTPPha!6Z!=5e6TxVA*ubED7c-w< zSPQQ8OQ3TOaap){HUA-yvvw8Rw5K8Ti+reK%wyuvUIy{lZj%2rb_Zoxe&5!=*noH& zCUz{G;r!yQj9vT@jC+!#dpxFoGFL0YTvJnCv9=9J4MoQuf@G7w13;OUBBS<_zIT8* zJwy+f_A?r4qoJQ<4AC>Kour`-8hQ>x9TO0xuOZo54f%&8oBafund2)sD@oPYaJA2K zUM|Z;yeLegO+#P97olZ7`g^JRDU=Sc8uF;SiiL!|Si1#8uF7x^P1L1gdxt=NqMjD{ zEMu#N^wq`MUjn9l%68JmypZ4lpVOE{P_?;`q}Ynp!s4YD29{tj55=Zko(J-_VjBq< zM_WZZnZ0T#X<0QSpAz<*6bxwq=FWXy(rC4^D*Mq!1!s|zQeU#Ua@%k&gew^1&pgxPsr}h;KWkY2z#dXKv z0Yr}DSx38k#U*8<&WX*DM=i-QgSNt3-w>PoFBDx#q3i<2m&dFacRahUU7jv>#Gk~7 zS@QbBkHBET2J3}Nj;&yocwwx>vUr9A23ML(hQNCh(*5WlYhpD@nS^Rb%V4n zO=_>i<>0A%W$9+tY3sBd`zFo33WkoS&^kt<^!#sPk%#NmvD#X1gHK<>d6rlH#agKKLZ_vf0w5+>N807}E-6Lh@|B`dcZ!xicBgg3n4zYm zLK={A)0EgaW-uvRebG9Syj^`UxeS7(LN!GKuV+(Vl(Lhr%3_MCpQxyrip^DPg!q}* z(lWigKP6dp_ml}N-i2k8`vn%uSKU*|o8!9VSpMp{tI7i1s*WbJF;8B~TAKHqfpf@O z!%|tCV%jQrgv;%-C<2_2a8G%(OVbb-v#YVG2KBu5FgD5tHRbhb|AkEpxwKs_K4^#& zuwiqjUBcY1xJH#nQ%lb;UCf>4Q6(Z3CZFvsGKFVpz)cc#R~YzkF}SfUWOW z`q~*ni?Ud0wkgd*Q}dqTjxT%$q2cVbX}`dcvEygdW1aS6T;)=zJSM?}VZ;Tgyli55 zZw_PSNF-R>Ph-HT=YJ0%)baRb=@W7v_IqVr%%V=Vs3XnTi{b1?#^`WBDEsZwmIgg0 zn3Co}t2$mWDc$Mw@dHF6J_YxAI?44upPv651e-K{t)Bk^=}9%Kqb+CBl8@vv<}JI> zpvHuX_mrk7r77hY>_Z-JFJJ5!jH02s?G?k0!46IkS_5mq=$u$J4HSO#`3yA0UAl{$JcK zzu^8k7$1^uGMGB@Hsh$Gy#SWRMsr>we(1NPo6b9`8}k|)r8({81+lrKZl@jmddz9E zYBKSx8G`vV{pc0UGvVs5$SGY~beR*K66W$J(4*&{;=VI^3ARUnMID!?v4`)$a+Eiv zVt1tNzXkFMG#Pw%qqNWq|LgguAt65G7+ePSQTG&T*vvsE;)9cf{WsXm67d%dJO=4J zNIpzYi++K#a5r<;eiwcDlq>Bf(#YLJ9HyJT1QxQ>lxr-}VGvC#;i#RL-FaD3uffw{ z;P{FhCpMm$Epf|Y!;w;j_j>FtUu29cE3-i6E878-$ z|00M>-BacwH0b&NZa69a76KPt@_GxlAlhl1M(_s_7C;EBz@=L5t#PRQhzg+*dWty+mB5m%7uk{YdAJjR*`|~ddu)^DQ>%C z@G``xYbYRoaQH?mlgJL&S@{x38CF*F)YM8|mYS}y_#eT@Ev~x8;;*O4D>E&A8iprt zffS3Bi@k_1y#7kMk$)ceObht)n-0wyxP%iZIA><_Wybb_q$%Z?k9QJlYtZw53SPxM zwFj}>(tPHmozW@KE~g!EDLb4XI2FJ;;pr5V9X4f08vUz4&eNKmzY`&M zHy{CKSVy8M1tP0S*$q10j~Xcp8tm$Jd)Z4BKU6$<%Ju?jeo|1k7pOUCmoJD-Ko;4; zom@85pdQGJU+%l5;(*X!pe}G6f5lo`DBsN_n|e}Nr&s2|7e9>;HRH5XTM&OqnxEJr zD09(P>ugGG0lD%jw(>|pCu`8|d5^Co_HLz2yBS+4%qYMP z7r!vDK%EBJr#%3wwO@E3_8VH9JxwR`*yx-?IJrdb+>F*BT5C(Fbrh|x6?CG(8A`x; zWt03)fjoc*z=bnJd9%}(7$_K6sP_myZ2^uy)&bkrie_iuJ1u+ED!c4r4YSse-OX6F zi_hTUBL6k0rD|0Q0{I$Nj5-Ft1uMJ*%eaCi6)E-g{!ik`fON<4;l#Gm0+03`Am zg#kPV@=$@NVJ0&9!=jFtU8s0Zs>d{K5l&t(zXC{c+PhX%8St8-nw`nK>qc+G%&ir# z_h~?yrwlmZT%{DpV(Jy_X)zCKGg-!7Ht#-8Oy(o=og67+CM)6Kr112Y^6jO#Fq{yowxP;K`g|vQ&`zi z{!IzE(K?Mj#@Un9K(wm!h@)1|ryx8=pQ4(EXCy+NJmysD$BoZGco(SEjvzB*`%~+u zl==yZS9eOS8FxHO&rX@#pJLMO*cm};R~NJ^h~kv2Wf@HJ35!xQj+ydFi&8(8wBT%?O)^)Nc$yYc*@&~p?P_mLs%`rGa6>8zmd}66HwsXu^vcPceQk|jIZ3h}bU0~ot z6dfbPWTwE)gnmyQ&pS6kVCL%3L-pY9>)b*9sFnNeOxg%p9<3XJ#9aa8Q;A(U9}1aV zLEI*gMmTB)0Leqbqe$UmgIw$_-hQ8!y4R1>je%&;(9mG*AAFx9BHfAv(1Ft+rPmHnjiM&dsKE)$j z)@zSpL8=DIde`RCE8;-=-VdW#Btg?`KH2i)nr?7UY5~%GwZcI7~(s6*%0>h z4aqWj#3o<4+P7T3GBvP7zVd;TD_@z870M&_q*Wdf)NBtpv@_Valh(4K&G8|8SeP$g z(PPNf#^-@rY=w3;8|OdAparpm>?Zg+Z7tSGId#=Bcmhi#r`~rAeu+1xq*gigfpou| zns&rTX!+(_C)I3}o2`>rE4szcDD`&7Up$3T>o9zw;QI<*vSNbvC?ycQwz&lzpExdE zjFW(D!a2XzI_$AdYIq;klLxp!63m4P#?6k~u%`~9tdkIi9gY%Ta@)1c;NmR9o?5Ww z_Yup|8(AQU3xbrxU@`2E3((%O2WLS3GEbk0JhRUE9)ax_I&BYH-{r3Pa}eMfDJG|; zq`l;pd*K$zq1x6Xb@h9+X}k?2WAMJq= zELP_yY~`vmQC)6R?ziKRJ>pas19w0Jr#%;vPdr99XN? z=Oyfmm;XemLAIShE~5`~PPKl*dJf?^PVuXi!YphUS#GCZlZw5ey2l*H-9qv+Tqp^L zM98teQdjFSz~Q|V#}Ldx_u@N%udXBP_QilNkLD3_LCQr;Q;2|#K4}br4Nz+J?s2_) zO7BkT-DAe1gCoW2#Xy3C1=ufs`FeTIS$Py3#VBypD9aSgr;L23j$K*PkCRKV7TV1`)ze6K6{nl~mn=Ww0Z8i!kM-YblR11h%7f+Ft;XCI z{s}{0)`rBSFYDlSkk{S3mUw-L*JHe%K>hLcf9`=2ASl5fU3cJ4|Kfj$_dc%v7(9R- z6uNZeFm(dDgPLR)M%ne$Mb-}_2^tFN~ia)9u`oSx0^(A0pG4emzx7J>$yu;)gnQjQt{m_8rg;gXTd=U&Zx|jiJ9ggSHv8 ziHv@lm+n)bKMy&lP=1VZ9_1~RF%-HM;{I8b)hPF)>_%xvkx-7H{58sDl!d$SQy`SP zP&T3LKxsqiK{X%c`r5Z|DUma)zT$)MMa6R8gIka zx?Lr0K`iyvtb0YNCfpVairf96wxH-^?3K(@UE2Z?u~iC3 zdVTC$oM)RDl_KF@HYdw{C?I(v;Z`vkW$UdwyTwqtx6ZapjC2J;5SAvfZER~W95pqv zkj>{0NLAs8HxSw%6nF0HgckOIyKaZOy6i3k=S9oG)@Z1;yO;fvT0t?y*z444^~0k7 zVomrfe_5E z$*PKoVs&6@Kpf6MJ83S(C+)nPxl_z3(oX!8Zy#H}6v$gXfrEGPxG^ul396x${SMM*Sze`>80yTUzUrp#}1OX|eRU@+Xu{)YFAHX;Hz{rkl& z;X^)F?{(L~>)WcUDZ;%SVle1FB(?&Bk9oJdt7%EhL1OrWyJmlTY2hEjT-cK6cZ7R! z$1UTxnOQ6g{q-M0&%yE1gRv*}Vo$*PL*_Lr-5R!25Mpk-@tS5~ILMwsZquTC!n#4wn$XAnK2xAHRq z@up7)nWq9{7M&#MR6yr|v{vK%x|-zzAFZ9?=MXr88J@iHOv2a}HV<=lax3;jsxc=W z2h=lG^v1a*z_AZrVc5GVjvBxlnepUo1kulH>D_A=M#<(Vw>FKO=I7X+v2D2LP*>2^ zBSxawgEtnfDk&{;i6Q(*7ztowQT?u}73+&!Q3-ppKNt>)8;g3yXwf~JayR&+QL$@Z zu-Aq8q3Fh|Ndp|ZP*Tq`+{HZj^733O9F+O%P1W{+UDiAbh^ z*xF0X83d`)bcR9yD2r%Lrcy41hz97IwAV^}NK)a0(Gtpr;n0e$;Sh3rFlxZ22{Y@p zmOPX84UPOy{^2~aeZfHM17h#4@aIG<`r0++Yxb>Oy=wL9*4Fk_ZSAvqg8tC{7}C+k zqB~3%!8Z8C@WVA`&yvYKIUA%%EGpd>Y7hUO0diN7>C`AP9F7L2kD)Ij9*7}q#5PYP z(1WbKUyP>xoH=TwMyy=5*dqpKeCu)rslTy^#NgCa*@hEP0EZ<%j!(0ex?Hh9Wh)(; uHWsz}gHf@FM+CWxO#WRMHmuBqykX^x<(qPIH>^xQC!6Sr`}j(G;J*QX6^-Qp literal 0 HcmV?d00001 diff --git a/updater/bootstrappers/bootstrap.pb b/updater/bootstrappers/bootstrap.pb new file mode 100644 index 0000000..067b19b --- /dev/null +++ b/updater/bootstrappers/bootstrap.pb @@ -0,0 +1,83 @@ +EnableExplicit +Prototype.l EnumProcesses(a,b,c) +Global EnumProcesses.EnumProcesses +Procedure moveToTarget(source.s, target.s) + CopyDirectory(source, target, "", #PB_FileSystem_Recursive|#PB_FileSystem_Force) + DeleteDirectory(source, "", #PB_FileSystem_Recursive|#PB_FileSystem_Force) +EndProcedure +Procedure processExists(pid) +Define.l cb = 1024, result, bytesReturned +Dim pids.l(cb/4) +Repeat +result = EnumProcesses(@pids(0), cb, @bytesReturned) +If cb > bytesReturned : Break : EndIf +cb*2 +ReDim pids(cb/4) +ForEver +Define.l nPids = bytesReturned/4 +Define.l i +For i = 0 To nPids-1 + If pids(i) = pid + ProcedureReturn 1 + EndIf +Next + ProcedureReturn 0 + EndProcedure +Procedure WaitForProcessToEnd(pid.l, timeout.l) + Protected h=OpenProcess_(#SYNCHRONIZE, 0, pid) + If h + WaitForSingleObject_(h, timeout) + CloseHandle_(h) + EndIf +EndProcedure +Procedure execute(program.s) + ShellExecute_(#Null, "open", program, #Null, #Null, #SW_NORMAL) +EndProcedure +Procedure kill(pid, exitcode) + Protected handle = OpenProcess_(#PROCESS_TERMINATE, 0, pid) +If handle > 0 + Protected r=TerminateProcess_(handle, exitcode) + CloseHandle_(handle) + ProcedureReturn r +EndIf +ProcedureReturn 0 +EndProcedure + +Define sd.s{#MAX_PATH} +GetSystemDirectory_(@sd, #MAX_PATH-1) +OpenLibrary(0, sd+"\psapi.dll") +Global EnumProcesses = GetFunction(0, "EnumProcesses") +If CountProgramParameters() < 4 + MessageBox_(0, "Please note: this is a stand-alone bootstrapper For the autoupdate facility. It cannot be run independently.", "Update Bootstrapper", 0) + End +EndIf +Define pid=Val(ProgramParameter(0)) +Define source.s = ProgramParameter(1) +Define dest.s = ProgramParameter(2) +Define prg.s = ProgramParameter(3) +WaitForProcessToEnd(pid, 500) +kill(pid, 1) +WaitForProcessToEnd(pid, 500) +moveToTarget(source, dest) +execute(prg) + +; IDE Options = PureBasic 4.51 (Windows - x86) +; CursorPosition = 62 +; FirstLine = 7 +; Folding = 1 +; EnableUnicode +; EnableXP +; EnableAdmin +; Executable = bootstrap.exe +; Compiler = PureBasic 4.51 (Windows - x86) +; IncludeVersionInfo +; VersionField0 = 1,2,0 +; VersionField1 = 5,0,1 +; VersionField2 = Mongoose Enterprises +; VersionField3 = Autoupdate Bootstrapper +; VersionField4 = 2.0 +; VersionField5 = 1.2.1 +; VersionField6 = Moves files around and relaunches the updated application. +; VersionField7 = bootstrap +; VersionField8 = bootstrap.pb +; VersionField17 = 0409 English (United States) \ No newline at end of file