From 5ebe6e6598c92177cedf96f6f77f0ebe66786c3c Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Wed, 27 May 2020 19:46:46 +0200 Subject: [PATCH 1/9] Remove double assignment --- SerialExaminer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 85c9501..af61105 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -32,7 +32,7 @@ def newCol(col = 1): C += col def zeroCol(col = 0): global C, R - C = R = 0 + R = 0 C = col def splitLine(line): if line.split('.')[0].isdigit(): From 77a2291d55bd95548f286838ba9f9713f41c781c Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Wed, 27 May 2020 22:19:42 +0200 Subject: [PATCH 2/9] Add 64 bit installer code --- installer-x64.nsi | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 installer-x64.nsi diff --git a/installer-x64.nsi b/installer-x64.nsi new file mode 100644 index 0000000..5d2dfe7 --- /dev/null +++ b/installer-x64.nsi @@ -0,0 +1,48 @@ +;SeriEx Installer +!include "MUI2.nsh" + +;------------------ +;Atributes +Name "SerialExaminer" +OutFile "SerialExaminerSetup-x64.exe" +InstallDir "$PROGRAMFILES\SerialExaminer" +RequestExecutionLevel admin +;Unicode True + +;------------------ +;Icons +!define MUI_UNICON "unico.ico" +!define MUI_ICON "ico.ico" + +;------------------ +;Installer +!insertmacro MUI_PAGE_DIRECTORY +!insertmacro MUI_PAGE_INSTFILES + +Section "SerialExaminer" SerialExaminer + SetOutPath $INSTDIR + File /r "dist-x64\SerialExaminer\*" + CreateDirectory "$INSTDIR\keys" + + WriteRegStr HKLM "SOFTWARE\SerialExaminer" "InstallPath" "$INSTDIR" + WriteRegStr HKLM "Software\SerialExaminer" "DisplayName" "SerialExaminer" + WriteRegStr HKLM "Software\SerialExaminer" "UninstallString" '"$INSTDIR\Uninstall.exe"' + + WriteUninstaller "$INSTDIR\Uninstall.exe" +SectionEnd + +Section "Desktop shortcut" + CreateShortcut "$DESKTOP\SerialExaminer.lnk" "$INSTDIR\SerialExaminer.exe" +SectionEnd + +;------------------ +;Uninstaller +!insertmacro MUI_UNPAGE_CONFIRM +!insertmacro MUI_UNPAGE_INSTFILES + +Section "Uninstall" + Delete "$DESKTOP\SerialExaminer.lnk" + Delete "$INSTDIR\Uninstall.exe" + RMDir /r "$INSTDIR" + DeleteRegKey HKLM "Software\SerialExaminer" +SectionEnd From 7a983e897cce739901edc0db714afd7c07522020 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Thu, 28 May 2020 14:55:38 +0200 Subject: [PATCH 3/9] Remove exclamation marks from the interface --- SerialExaminer.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index af61105..56cda47 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -112,7 +112,7 @@ def build(self, frame): newRow() self.examinateButtonFont = tkFont.Font(size=15) self.examinateButton = Button(frame, font = self.examinateButtonFont) - self.examinateButton['text'] = "Check!" + self.examinateButton['text'] = "Check" self.examinateButton['command'] = self.examinate self.examinateButton['state'] = DISABLED self.examinateButton.grid(row = R, column = C, columnspan = 3, sticky = 'we') @@ -370,7 +370,7 @@ def build(self, frame): newRow() self.nextWindowFont = tkFont.Font(size = 14) self.nextWindow = Button(frame, font = self.nextWindowFont) - self.nextWindow['text'] = "Create Key!" + self.nextWindow['text'] = "Create Key" self.nextWindow['command'] = self.mainKeyCreator self.nextWindow.grid(row = R, column = C, columnspan = 7, sticky = 'we') # key config done button # @@ -576,7 +576,7 @@ def mainLabelUpdate(self): self.mainLabel['text'] = "Question " + str(self.questionNo) if self.questionNo > questionCount: self.above.keyDone['state'] = NORMAL - self.above.nextWindow['text'] = "ReCreate Key!" + self.above.nextWindow['text'] = "ReCreate Key" self.die() def die(self): From fb1e6aad4ec7aa281236298226453b383b3e8b81 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Thu, 28 May 2020 15:13:07 +0200 Subject: [PATCH 4/9] Update images --- docs/img/check_button.png | Bin 6444 -> 6352 bytes docs/img/exam_file.png | Bin 6779 -> 0 bytes docs/img/key_parameters.png | Bin 6824 -> 6832 bytes docs/img/main_window.png | Bin 10443 -> 7007 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/img/exam_file.png diff --git a/docs/img/check_button.png b/docs/img/check_button.png index 5889b4f980c115fce32afc8b135e8ff743cee5ad..9057c3466a105e1eb0b8d70f7cf548d55f2af369 100644 GIT binary patch literal 6352 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 delta 6315 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 D#cXrN diff --git a/docs/img/exam_file.png b/docs/img/exam_file.png deleted file mode 100644 index 9408cf002cd08f7ef35cb27265a8ec6d168a70a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6779 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 diff --git a/docs/img/key_parameters.png b/docs/img/key_parameters.png index fcf0c4de2b0cdd21cad211d756bd261e9018048f..278c191851a69eb4fc590b3e8ff6bc4078c8d86a 100644 GIT binary patch literal 6832 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 literal 6824 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 diff --git a/docs/img/main_window.png b/docs/img/main_window.png index cfcab09ef5cd543791322dcbe8717f608e3b02b6..4252a4f134f150432dd44f8feae7db71b9cbaadf 100644 GIT binary patch literal 7007 zcmZ{JcQ~A1w{{|WnaS&01hhJDz|P`yd%G~Cd7|PJ)W9+-MU59_P5-|x);5? zb&K^-1EON+_hKt^)|tK27kg#0Cbmoa^tDD((9;*kPd39bw1@9qWMutg=%m(@6~Zjq zI_`B2YX7pdq)vv}-q(}^>`S!D*aG|;^yyP;9-+}dz8Koan;MzL;NimJk~abN4fYMv zD;7$l(?^XBy>%rGH3mT|dy7~u5>?h}%+H@c(`0Ee;h3`Pm5_ON&OplMi$&$|*|Wn~0p>_2P-)7T#3Y13 zt>tpu>dMm4P#jbmrR9?9%7d6k(Z{S7hFnR?o%Oj(`LTD{-m92&m<_&g6`8Q7zNb*+ z!qj1%R)DI-?0$<8BM-S$4!Nv-%m+h-vjXa0UToLm)a@ro`=Nq!?js0d< ztpO0#(DQ(9HffQ&d_q1-X=d~SAlh{3tCGbqZSbo^Mml{UinK%o6sRUwiUGO*_BdvZ z%VyDz!Yn)auva)axDM85pLz}%o5N07vj7Jt^39=QsHQ)INg+9|F3RVx zmu*iz+<7Ms%xLK%jIf8yDN7RC=(U1)NC{cUfFalWk2P#w;szK^XO>@0yyQU#;CB%i z{mTKpv2laE3gLLQD<^~eBuevboJBLXJN-Kl97;|mLJyTgnpTPF|H)VP8u39S)bCma zPgM^yLN|HUr&&;kyy~#ox4#Fejqd)q^xz|Kjve;wpr@J)YX>lpJGZ_fM{P<6c@m}1 zNnfo+k%lUZocke1Nu8%-G`S5-?1A*DtkZJ??_>%hn zSGO8-?<$W(OA8q8ga|rkYDO2@*w|>NF^;*HUnMFs(9t;$W?+8YT)$Dd%lZVsM?y-2 zAXQa`z(U{OrAgs>03qKTQoeaCrGGbUyq};=SqjTTsFFe{0=jI5zD#GKlz>{ABIM!Q za>mBS+-z~VYYq;8ak7yrGNfZ5Lwi$RxBDBx5@a^27KA&3-UADwD|%CZ3OOI5r!2gmZk!mO3M@4uUS>B&6@y-(efCfL!?vgDX@J4Mn6f3Pc9KqAnz3g zJ>#5_BPuEA{S-GW>zRJ(T(z+N+$nVTG9Wytaz!|`?gMD_;jx9nhTrMh#IuvEmND9j zYjR3yIXA95{oGJ9)_$XndjGWCr$0DR%T7Fh76g|w4PpK)#j}4b43&4<=w0{E*9Y~Q zbVdK5b@vX#;CCEfD(p+S7Q7)asBiq%IOlhQgFSz3;srmOqtb#uS330{?@n+%uU89K z#lF@KI&-00etXFMte;5tIVw2WK23(Z*s?Z`hN-9+8}5*k(xz0gZ=qx)c9a;Mo4U73 zlu4iRL}c9KQMXG6sa5b;W4;$K-iJ))R4V(LBRSuWM=(62+6f_;;WbDLnkXm9cO`Ss zBct9ZFy*JmgY1Vs%f*6@JT`9=*uDE#aPjM=xr`1G!4d&*u;&^hm|iV9NQ$|ru_oYn zF1MT;eXa=!6)Wd)<$hHsNDnbpZrk--fpDQa@GDHwBE%hUIX%KEBr>m4IQ~Q&;=<6t zC$xyADyTPON{)77_&a%i0)({8z3FUQ0&*hZXQ2KE^(m51io`%*?D3pheZV$`MXiTD z5lF-Dn}Jcex~!^ks{E^=lS1ae&l?#}8b?&I9y)p3=MG1fiGewcAzsx^N(^MIBWG}5 zvi85{`Wd*qQfN@Y0t!6fyT4|&$M&O?=^J@JvA(=6pqWhx*8x{xcBek2Hj@rX0YP1A zL0)1CMdkl~TLAqpYv{tr`mAlxw5B_nR$TbaYQn+QhZa}V?s7c2bh{ajeu$6>WH z?H8tuO4}I%WT^lC63nVM(%(J7vDa^)d(A{30pdCLA$sA{xK<*%uVNs! z>n<(N|A^4MInKvtE1%)DTQA3mX~sVMbKE04>m8bznHh?)S(~6ZQUTOHc%Rs@F!3Z6 zQKuuVixhph=1M!(7D+wdyS?oumEiGa^+VzeA0p`LXp{$Sm#wKIL_h~t zPtGs|@Oj6JKKx4JA{3)snZDy5h`#n9&L_&Yf-df49=_xG8V@DFUCuV!i9>k8D%zWMkqdxbPBi)3=JXodH(Q#d;Lp;wvnrN5az9>WxD3M9=q_(`9~|~Vqu5Z zh;e629Dj_HV#wYEHs~L#ScMmhfszg?1dEi5OvLZjWN6kPj`A`-&dZ&ZE^qTDDA}M> zF%uD(c_GuAP(SEQ)Bk~`+eYkZ3&OP?0sojRxjjW~H806WJ5?dIP1Q}ryB=laQ?)n< z7O)D))hV7d@-xB+CQ5p2X40V_MnXztJ2^$HsQ0(yhBI)M!vceB){;?xbm`e4wK*FVhcLpZ5H6Fm8tT2yiv~v z$O=*6eAmh9KEdSq+2{bIM}LHi0;@C7EW`fT1pL;-r@HtaT|86I=XIp%TTFl_`KuKW zw~=El$0l^NMtGxr6Jq zNZyqIoA8?}i-yWeRA9S;J?OfUr|H|Dtr8*0LD>!hz=-xfuWDViyp#M_ezcPy880E8 zH|D0hr+XT;t8~&BX~s$;lN8p7ZC*%id~w24S7x3mzqY0sqUUdX4Dj+Z{1yEl@1~Ms zKP^*<~Zf%i+0FG$_v;`0ax`J z$>brVPbfu9SvEa%w{p|dKG~1V{j75x+F2QO=X@!>DPdnww^U}bI%Ck6extbR!u9(G z{qlEODTuWgJ=KXN4A0Zr*w;P6>tdwCt1=~Vl%`#Ce;jfWRy z?YrMD@Z5!fHy$}*4-F+}5>4K`8a^QCE!X*ts-e=IoyPPu76ue_9rx~^BU$vSq$Q5N z$rRWTA=)#3!nXH~dLOMYcz%lS`D%I%akV$B&BGhV*vd)1V?~T9#YuVQ!KxJ*e?Q|5 zMM09MqA=@s$V*RSnENon2YY47>1U?L zB$O;#&VmcVza&SMbz=@GUaddvq0syp)A)mja~1jm%*m82-$ZjuSM#^X>_?OG9)+f2 z4m+QvvzVoxO2~tja3|Nm_U$%Da;6mD(|Zcag-dKqoLPCND2(@nQq!RDGYhg}yPSaQ zX}Sf%bHFSM>|bF?O>l^&TGb@|sP?bO$EFUzPtx0A++ z4XpYLNFc4x7ah=gPt(cE3bQ(2WRy(#YDBNR*(vXNs8sl^DM-$c+Ln()%pk`q>iNZ> zfdNe9k-T~IEr9lqFkmG!f;;&c&s0jbH@mV)k=={yEFMN|YpYivVj=EI5F>10dXW?r zt3I1~pL!>h(ESm^D6y+Jfw`L*5Om}II3HJ+A6aJL+4+kGAri3-qzO;OLjVyTT<{P; z!Gq?-Ljbb^qGyG!vX$rW6J6NB8A$`0q~8M_es-V0oWSFKc>6p)E9VH zRe}YK(#?aOj3Gfe zIo|1h8`MA8pci_EIaW2nmfy=!JK%75469?HfwuK;)_8?2?ALkw&XrZO$)iKOt(74d z!sB~cYr5xiXW+xn>`VtGho>}v#E3!4`TF-do(hLqclKC7T1*TnGYw|pGg& zGNzbu1H~*IL}O3!_}2Odav%~YsXFJPplt2mwpGN!);AY6s=_1q<;`}!FiG70JTYTG zcb6M|D-;5IYm=$mwlx1hQ<0W=Iq0@~-w_BCex?5_Esbg|QC>>Ttq6U&CK^(Ud(q@& zlU>b{|6MLLNO&%@?wg|mV!kjGt#d9!D(dM9wtkIYtQ8_(b)wX@9=rltk{36{onr7vlRcXUovSU<|!y58iTm z_6*FTB4@D?*-e$apCg5kh3%0oXp!Ulr1Pj%%=vSR{Z?E1zv{vyp1`nb*ZQI4aeb@^ zOq1^6M{C?10o#Fef(49a6O#14^)L#<8j;}>sq}!UolIS%o$AP68{s)%I3Yz~urS#E zBV4_~RUT9vpmG1VDquvatKy9@{f;L4M@W4RXZ`c%(uB)lUkBgPyiFd}bZ#5pfYUPn z_>*0(VRONFX7_6{lmvMDbkFVkpRU@uwf9#X8&J~Dt1Gg0NS}%iVN$G@$RyHavzbGo zqkPBKPetyTz-0NBv;XBqD(TR|ao5Z8HKT^Y(^g3McRz=$p|G{P2;TXzrUA9ccQ&(( zVDVul=7?0;AaR+w@L)T~p+Oh3e`4kNKEgf{ zUtNDX*{T7E$Y_~~7s7pt4cUnKR3hh3ImvQ$@{TW4r(->ujAHV)q`&Wz#iTq{79RAM zz<;QdM?DsUxK4@O%GP!)f+vJC&XKJi=x>7Pb~hg6#U=e`7aTKFai@RyP`pkDQ(SI^4z# z1vj$b+?E^r772|v)kA(QGN}<0c4P#hiy^gSNL6qzieUb%QKa@YcC#gG9IHJ}vzd)_ z<5+gumA4O{E?9qLr<*uhn1%7frzf+dCFgvDu885+el*Mo48b&;m4RztAmelNiE+?)xEK>6QH(aY~ zezo@6kFaBiBTYtqNfX4TT+NyG{Ewzqv&%%K`4DHrep5bsup-}n=foPoz6-v!*H!ka zE>tPQx^vQT|LA+)iJ44=?#JGK6-2mB?_%Iy>B~IF`p?v)gMKS^*ceCCEjxYeR6wjI zkTIl)y*gx7hUc;5Ue~uurrm9Q5ni!lZm)}RCY(%q`htWM^6KPO#Lum7b?>J1sUDAo zwSAMQOqNHnM|6`l;lGnV~TZ5w+KsrU;=h874D{7RlC%}89U3# z>T)sERxX^@{wm{gNXHd*0rnw?k>^!kefWbsTD}2@CMA zCM|cbR~tX2Ht}$4X3G?#@eh{25ZnRA4E1t(+`cgVL9G-lag zipCUiPzbvmq)L&MJD#M{jG5PlKkP+?E3E}G90`#TY@A$#L$<6l?%GsoSkONeeSQF3 z0_4u>bU=&>Q8pIlMJp+OI=K4*M8e?y&V%mY#qlp#-o$wL0!0Q*a`N|;Y)0ebwtwW* zCM1Ua-EG-wWdn8(r{89>>^Hn$BaE0A*i10%+M_0mca~K|>RWJnEP-P&_ml$1YU-kV zkF%LL<|PJ{I4Oqc)85`W09D=#rLU8fAr6n%ZSAnGu}76ksxwUEM#-kJR@8ueov;mDIdKo zpW(kMn^Jv$q1X+c~@#W8jC;Exgc99A$16hA#)3*L;6Pf;7yNaGvvnQ`1HBUu(Cgn&H&jrrVquX}hwGXM1ac z8Tu2`vM;V>8&Brvq?AwQ>>jMpQ&AaC8fN}xY7=d0In|h?Ex`VmRR)dT-e_>g!L4Q3 zC$r;cH!EcTqo|L?GWr%dAt$gC?FU!YS^=5QqR3qyy)jRjRb>dSk#`Q<@VnD^Qvaym zQ?;c?>JP+~G3C|dZLk@1rP_6O-&AG52j*EweBwpy;5wJ9TG0a}DE6AT?oKVjJQ;s= zeMg-ysbIleeHb<_=gkFYDx+l<#y#YS5Nt`4FU{0Y7}J_txLdH_?8G~@G)xjxOHqcohbAWc)t{jx=)ZQ{lnD{Zsn_Tg`ltpHDKajAqKJ!{D`Tm zoZd>VEUntcRk>n7LXz&yv`cPEbHNt`SUqgO6FnVcU}Sz?NG5d52knmz6dH0yiePIH zHHyZ%^Q;3OGFIl-EN7uN^w!N?U0<7$nzFch^IIhDugOUuxxEu?tVKodLOsN>y)eVz z2j#LbM)yt)f4_$n0fr6JPn*=o7;B|Q;DOuKC><0MtHD%=6 z*YH#bdfH#!^%|7L(df+bHFBY&_A?CwGgJF(C1h&ss?}U4VZqK9U-Z5O8z3VDUseo+Y4y4R006YX?rMBrL)67uxIKD&8qV zh>F)9+S^2$<$dBArHdM9u=23>61q_|e-Q~~_WPs+O=~Bb3Tqy)JGd-}|0ON(v2C(v z$hJ9DMqoc!F!zk-sK4Sod2sGSpC)!8YB1R7Q`<(Be+Q`xUMnvF9UzDFf9|>eZ%pu` z<*ZtmIA_Bf;XADk-=TrH)u4jOfRjbBxe{pL{g=Cm@4BVW{@{p#O~jwAr{T&GVm}tv za00^o;^Vq=_osVx=WxUcr#ia~foGlS_9%wty>#VJ&a07~HeLKle%;fL;)YsF`nA%_ U(%?n>PqAAXk98nrs<6=i0s-W8%m4rY literal 10443 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 Date: Thu, 28 May 2020 15:17:48 +0200 Subject: [PATCH 5/9] Update readme --- README.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 54813dc..b011306 100644 --- a/README.md +++ b/README.md @@ -15,13 +15,19 @@ - [Records in result display](https://github.com/Pixel48/SerialExaminer#records-in-result-display) ## Installation - Download the latest [SerialExaminer installer](https://github.com/Pixel48/SerialExaminer/releases/latest) + Download installer from the [latest release](https://github.com/Pixel48/SerialExaminer/releases/latest) `SerialExaminerSetup.exe` is 32-bit. For 64-bit systems, download `SerialExaminerSetup-x64.exe` - > For now, downloading the installer will launch [UAC](https://en.wikipedia.org/wiki/User_Account_Control) *Unknown publisher* alert because it is not digitally signed - For now I can't afford digital certification + > For now, downloading the installer will launch [UAC](https://en.wikipedia.org/wiki/User_Account_Control) *Unknown publisher* alert because it is not digitally signed - I can't afford digital certification + + > For now, some anti-virus programs may detect the installer as a potential threat because it is not downloaded frequently, so it is not marked as safe (it is unknown to the anti-virus) ## Usage - How to use SerialExaminer interface + Guide how to use SerialExaminer interface + - [Generating an exam key](https://github.com/Pixel48/SerialExaminer#generating-an-exam-key) + - [Importing an exam key](https://github.com/Pixel48/SerialExaminer#importing-an-exam-key) + - [Checking tests](https://github.com/Pixel48/SerialExaminer#checking-tests) + - [Searching for cheaters](https://github.com/Pixel48/SerialExaminer#searching-for-cheaters) ![Main window dummy](./docs/img/main_window.png) From cb12a20f98160f333874e9ca11ef7e20251aa88c Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Thu, 28 May 2020 15:18:49 +0200 Subject: [PATCH 6/9] Move part of table of contents --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index b011306..b700929 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,7 @@ ### Table of Contents - [Installation](https://github.com/Pixel48/SerialExaminer#installation) - [Usage](https://github.com/Pixel48/SerialExaminer#usage) - - [Generating an exam key](https://github.com/Pixel48/SerialExaminer#generating-an-exam-key) - - [Importing an exam key](https://github.com/Pixel48/SerialExaminer#importing-an-exam-key) - - [Checking tests](https://github.com/Pixel48/SerialExaminer#checking-tests) - - [Searching for cheaters](https://github.com/Pixel48/SerialExaminer#searching-for-cheaters) - [Limits](https://github.com/Pixel48/SerialExaminer#limits) - - [Answers in exam key](https://github.com/Pixel48/SerialExaminer#answers-in-exam-key) - - [Records in result display](https://github.com/Pixel48/SerialExaminer#records-in-result-display) ## Installation Download installer from the [latest release](https://github.com/Pixel48/SerialExaminer/releases/latest) From 0b8fb445407fbf8b05b080735a27a3ad22a07571 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Thu, 28 May 2020 15:29:47 +0200 Subject: [PATCH 7/9] Maimtain installer code --- installer-x64.nsi | 11 +++++------ installer.nsi | 9 ++++----- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/installer-x64.nsi b/installer-x64.nsi index 5d2dfe7..4235aac 100644 --- a/installer-x64.nsi +++ b/installer-x64.nsi @@ -4,8 +4,8 @@ ;------------------ ;Atributes Name "SerialExaminer" -OutFile "SerialExaminerSetup-x64.exe" -InstallDir "$PROGRAMFILES\SerialExaminer" +OutFile "SerialExaminerSetup.exe" +InstallDir "$PROGRAMFILES64\SerialExaminer" RequestExecutionLevel admin ;Unicode True @@ -25,8 +25,8 @@ Section "SerialExaminer" SerialExaminer CreateDirectory "$INSTDIR\keys" WriteRegStr HKLM "SOFTWARE\SerialExaminer" "InstallPath" "$INSTDIR" - WriteRegStr HKLM "Software\SerialExaminer" "DisplayName" "SerialExaminer" - WriteRegStr HKLM "Software\SerialExaminer" "UninstallString" '"$INSTDIR\Uninstall.exe"' + WriteRegStr HKLM "SOFTWARE\SerialExaminer" "DisplayName" "SerialExaminer" + WriteRegStr HKLM "SOFTWARE\SerialExaminer" "UninstallString" '"$INSTDIR\Uninstall.exe"' WriteUninstaller "$INSTDIR\Uninstall.exe" SectionEnd @@ -42,7 +42,6 @@ SectionEnd Section "Uninstall" Delete "$DESKTOP\SerialExaminer.lnk" - Delete "$INSTDIR\Uninstall.exe" RMDir /r "$INSTDIR" - DeleteRegKey HKLM "Software\SerialExaminer" + DeleteRegKey HKLM "SOFTWARE\SerialExaminer" SectionEnd diff --git a/installer.nsi b/installer.nsi index 8080e51..18de3c4 100644 --- a/installer.nsi +++ b/installer.nsi @@ -5,7 +5,7 @@ ;Atributes Name "SerialExaminer" OutFile "SerialExaminerSetup.exe" -InstallDir "$PROGRAMFILES\SerialExaminer" +InstallDir "$PROGRAMFILES32\SerialExaminer" RequestExecutionLevel admin ;Unicode True @@ -25,8 +25,8 @@ Section "SerialExaminer" SerialExaminer CreateDirectory "$INSTDIR\keys" WriteRegStr HKLM "SOFTWARE\SerialExaminer" "InstallPath" "$INSTDIR" - WriteRegStr HKLM "Software\SerialExaminer" "DisplayName" "SerialExaminer" - WriteRegStr HKLM "Software\SerialExaminer" "UninstallString" '"$INSTDIR\Uninstall.exe"' + WriteRegStr HKLM "SOFTWARE\SerialExaminer" "DisplayName" "SerialExaminer" + WriteRegStr HKLM "SOFTWARE\SerialExaminer" "UninstallString" '"$INSTDIR\Uninstall.exe"' WriteUninstaller "$INSTDIR\Uninstall.exe" SectionEnd @@ -42,7 +42,6 @@ SectionEnd Section "Uninstall" Delete "$DESKTOP\SerialExaminer.lnk" - Delete "$INSTDIR\Uninstall.exe" RMDir /r "$INSTDIR" - DeleteRegKey HKLM "Software\SerialExaminer" + DeleteRegKey HKLM "SOFTWARE\SerialExaminer" SectionEnd From d1d012871cef01dbcf48dbcd251280d576d464e7 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Thu, 28 May 2020 16:58:44 +0200 Subject: [PATCH 8/9] Add uninstaller support to installers --- installer-x64.nsi | 41 ++++++++++++++++++++++++++++++----------- installer.nsi | 41 ++++++++++++++++++++++++++++++----------- 2 files changed, 60 insertions(+), 22 deletions(-) diff --git a/installer-x64.nsi b/installer-x64.nsi index 4235aac..853f0c1 100644 --- a/installer-x64.nsi +++ b/installer-x64.nsi @@ -1,21 +1,27 @@ -;SeriEx Installer +; SeriEx Installer !include "MUI2.nsh" ;------------------ -;Atributes +; defines +!define PROGRAM_NAME "SerialExaminer" +!define UNINST_KEY "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${PROGRAM_NAME}" +!define INST_KEY "SOFTWARE\${PROGRAM_NAME}" + +;------------------ +; Atributes Name "SerialExaminer" OutFile "SerialExaminerSetup.exe" -InstallDir "$PROGRAMFILES64\SerialExaminer" +InstallDir "$PROGRAMFILES64\${PROGRAM_NAME}" RequestExecutionLevel admin -;Unicode True +; Unicode True ;------------------ -;Icons +; Icons !define MUI_UNICON "unico.ico" !define MUI_ICON "ico.ico" ;------------------ -;Installer +; Installer !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES @@ -24,11 +30,23 @@ Section "SerialExaminer" SerialExaminer File /r "dist-x64\SerialExaminer\*" CreateDirectory "$INSTDIR\keys" - WriteRegStr HKLM "SOFTWARE\SerialExaminer" "InstallPath" "$INSTDIR" - WriteRegStr HKLM "SOFTWARE\SerialExaminer" "DisplayName" "SerialExaminer" - WriteRegStr HKLM "SOFTWARE\SerialExaminer" "UninstallString" '"$INSTDIR\Uninstall.exe"' + WriteRegStr HKLM "${INST_KEY}" "InstallDir" "$INSTDIR" + WriteRegStr HKLM "${INST_KEY}" "DisplayName" "SerialExaminer" + WriteRegStr HKLM "${INST_KEY}" "DisplayVersion" "0.4.1" + WriteRegStr HKLM "${INST_KEY}" "DisplayIcon" "$\"$INSTDIR\ico.ico$\"" + WriteRegStr HKLM "${INST_KEY}" "Publisher" "GitHub.com/Pixel48" + WriteRegStr HKLM "${INST_KEY}" "UninstallString" "$INSTDIR\Uninstall.exe" WriteUninstaller "$INSTDIR\Uninstall.exe" + + WriteRegStr HKLM "${UNINST_KEY}" "InstallDir" "$INSTDIR" + WriteRegStr HKLM "${UNINST_KEY}" "DisplayName" "${PROGRAM_NAME}" + WriteRegStr HKLM "${UNINST_KEY}" "DisplayVersion" "0.4.1" + WriteRegStr HKLM "${UNINST_KEY}" "DisplayIcon" "$\"$INSTDIR\ico.ico$\"" + WriteRegStr HKLM "${UNINST_KEY}" "Publisher" "GitHub.com/Pixel48" + WriteRegStr HKLM "${UNINST_KEY}" "UninstallString" "$\"$INSTDIR\Uninstall.exe$\"" + WriteRegDWORD HKLM "${UNINST_KEY}" "NoModify" 1 + WriteRegDWORD HKLM "${UNINST_KEY}" "NoRepair" 1 SectionEnd Section "Desktop shortcut" @@ -36,12 +54,13 @@ Section "Desktop shortcut" SectionEnd ;------------------ -;Uninstaller +; Uninstaller !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES Section "Uninstall" Delete "$DESKTOP\SerialExaminer.lnk" RMDir /r "$INSTDIR" - DeleteRegKey HKLM "SOFTWARE\SerialExaminer" + DeleteRegKey HKLM "${INST_KEY}" + DeleteRegKey HKLM "${UNINST_KEY}" SectionEnd diff --git a/installer.nsi b/installer.nsi index 18de3c4..69f576c 100644 --- a/installer.nsi +++ b/installer.nsi @@ -1,21 +1,27 @@ -;SeriEx Installer +; SeriEx Installer !include "MUI2.nsh" ;------------------ -;Atributes +; defines +!define PROGRAM_NAME "SerialExaminer" +!define UNINST_KEY "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${PROGRAM_NAME}" +!define INST_KEY "SOFTWARE\${PROGRAM_NAME}" + +;------------------ +; Atributes Name "SerialExaminer" OutFile "SerialExaminerSetup.exe" -InstallDir "$PROGRAMFILES32\SerialExaminer" +InstallDir "$PROGRAMFILES32\${PROGRAM_NAME}" RequestExecutionLevel admin -;Unicode True +; Unicode True ;------------------ -;Icons +; Icons !define MUI_UNICON "unico.ico" !define MUI_ICON "ico.ico" ;------------------ -;Installer +; Installer !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES @@ -24,11 +30,23 @@ Section "SerialExaminer" SerialExaminer File /r "dist\SerialExaminer\*" CreateDirectory "$INSTDIR\keys" - WriteRegStr HKLM "SOFTWARE\SerialExaminer" "InstallPath" "$INSTDIR" - WriteRegStr HKLM "SOFTWARE\SerialExaminer" "DisplayName" "SerialExaminer" - WriteRegStr HKLM "SOFTWARE\SerialExaminer" "UninstallString" '"$INSTDIR\Uninstall.exe"' + WriteRegStr HKLM "${INST_KEY}" "InstallDir" "$INSTDIR" + WriteRegStr HKLM "${INST_KEY}" "DisplayName" "SerialExaminer" + WriteRegStr HKLM "${INST_KEY}" "DisplayVersion" "0.4.1" + WriteRegStr HKLM "${INST_KEY}" "DisplayIcon" "$\"$INSTDIR\ico.ico$\"" + WriteRegStr HKLM "${INST_KEY}" "Publisher" "GitHub.com/Pixel48" + WriteRegStr HKLM "${INST_KEY}" "UninstallString" "$INSTDIR\Uninstall.exe" WriteUninstaller "$INSTDIR\Uninstall.exe" + + WriteRegStr HKLM "${UNINST_KEY}" "InstallDir" "$INSTDIR" + WriteRegStr HKLM "${UNINST_KEY}" "DisplayName" "${PROGRAM_NAME}" + WriteRegStr HKLM "${UNINST_KEY}" "DisplayVersion" "0.4.1" + WriteRegStr HKLM "${UNINST_KEY}" "DisplayIcon" "$\"$INSTDIR\ico.ico$\"" + WriteRegStr HKLM "${UNINST_KEY}" "Publisher" "GitHub.com/Pixel48" + WriteRegStr HKLM "${UNINST_KEY}" "UninstallString" "$\"$INSTDIR\Uninstall.exe$\"" + WriteRegDWORD HKLM "${UNINST_KEY}" "NoModify" 1 + WriteRegDWORD HKLM "${UNINST_KEY}" "NoRepair" 1 SectionEnd Section "Desktop shortcut" @@ -36,12 +54,13 @@ Section "Desktop shortcut" SectionEnd ;------------------ -;Uninstaller +; Uninstaller !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES Section "Uninstall" Delete "$DESKTOP\SerialExaminer.lnk" RMDir /r "$INSTDIR" - DeleteRegKey HKLM "SOFTWARE\SerialExaminer" + DeleteRegKey HKLM "${INST_KEY}" + DeleteRegKey HKLM "${UNINST_KEY}" SectionEnd From 8fab8256911981ca72a631ffe4258e8cbd0e8bcf Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Thu, 28 May 2020 17:18:12 +0200 Subject: [PATCH 9/9] Change version tag --- SerialExaminer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 56cda47..4cc0bb2 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -9,7 +9,7 @@ import os, pickle import openpyxl -versionTag = '0.4.1' +versionTag = '0.5.0' # SOME GLOBALS R = 0