From ca64880a01472f12592db26b40d5e10911493494 Mon Sep 17 00:00:00 2001 From: hstyi Date: Wed, 16 Jul 2025 16:03:45 +0800 Subject: [PATCH] chore: windows inno setup --- build.gradle.kts | 1 + src/main/kotlin/app/termora/Application.kt | 22 +++++++++++++++--- .../app/termora/ApplicationInitializr.kt | 11 ++++++++- src/main/resources/icons/termora_128x128.bmp | Bin 0 -> 49290 bytes src/main/resources/termora.iss | 2 +- 5 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/icons/termora_128x128.bmp diff --git a/build.gradle.kts b/build.gradle.kts index 1ab7795..d694cda 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -548,6 +548,7 @@ fun packOnWindows(distributionDir: Directory, finalFilenameWithoutExtension: Str "/DMyAppVersion=${appVersion}", "/DMyOutputDir=${distributionDir.asFile.absolutePath}", "/DMySetupIconFile=${FileUtils.getFile(projectDir, "src", "main", "resources", "icons", "termora.ico")}", + "/DMyWizardSmallImageFile=${FileUtils.getFile(projectDir, "src", "main", "resources", "icons", "termora_128x128.bmp")}", "/DMySourceDir=${FileUtils.getFile(dir, projectName).absolutePath}", "/F${finalFilenameWithoutExtension}", FileUtils.getFile(projectDir, "src", "main", "resources", "termora.iss") diff --git a/src/main/kotlin/app/termora/Application.kt b/src/main/kotlin/app/termora/Application.kt index 61c8480..f1ff080 100644 --- a/src/main/kotlin/app/termora/Application.kt +++ b/src/main/kotlin/app/termora/Application.kt @@ -81,14 +81,30 @@ object Application { // 从启动参数取 var baseDataDir = System.getProperty("${getName()}.base-data-dir".lowercase()) + // 取不到从环境取 if (StringUtils.isBlank(baseDataDir)) { baseDataDir = System.getenv("${getName()}_BASE_DATA_DIR".uppercase()) } - var dir = File(SystemUtils.getUserHome(), ".${getName()}".lowercase()) - if (StringUtils.isNotBlank(baseDataDir)) { - dir = File(baseDataDir) + // Windows 并且是绿色版,那么判断所在目录是否有 data 目录 + if (SystemInfo.isWindows && getLayout() == AppLayout.Zip && StringUtils.isBlank(baseDataDir)) { + val appPath = getAppPath() + if (StringUtils.isNotBlank(appPath)) { + val file = File(appPath).parentFile + if (file.exists()) { + val dataFile = File(file, "data") + if (dataFile.exists()) { + baseDataDir = dataFile.absolutePath + } + } + } + } + + val dir = if (StringUtils.isNotBlank(baseDataDir)) { + File(baseDataDir) + } else { + File(SystemUtils.getUserHome(), ".${getName()}".lowercase()) } diff --git a/src/main/kotlin/app/termora/ApplicationInitializr.kt b/src/main/kotlin/app/termora/ApplicationInitializr.kt index b0dbcaa..d7e3308 100644 --- a/src/main/kotlin/app/termora/ApplicationInitializr.kt +++ b/src/main/kotlin/app/termora/ApplicationInitializr.kt @@ -6,6 +6,7 @@ import com.pty4j.util.PtyUtil import org.apache.commons.io.FileUtils import org.apache.commons.lang3.StringUtils import org.apache.commons.lang3.SystemUtils +import org.apache.commons.lang3.math.NumberUtils import org.slf4j.LoggerFactory import org.tinylog.configuration.Configuration import java.io.File @@ -16,6 +17,15 @@ class ApplicationInitializr { fun run() { + // 提供一个选项,用于延迟启动,它通常是远程调试时使用 + val delay = System.getProperty("app-delay") + if (delay.isNullOrBlank().not()) { + val millis = NumberUtils.toLong(delay, 0) + if (millis > 0) { + Thread.sleep(millis) + } + } + // 依赖二进制依赖会单独在一个文件夹 setupNativeLibraries() @@ -25,7 +35,6 @@ class ApplicationInitializr { // 检查是否单例 checkSingleton() - if (SystemUtils.IS_OS_MAC_OSX) { System.setProperty("apple.awt.application.name", Application.getName()) } diff --git a/src/main/resources/icons/termora_128x128.bmp b/src/main/resources/icons/termora_128x128.bmp new file mode 100644 index 0000000000000000000000000000000000000000..398e3b2444baaf89ca2aed943c1a7b816ddfa85e GIT binary patch literal 49290 zcmeI5c~Di?9mmbI)0y_)PNtnUfd>e}TY$$RhzbZ{5#nw~Yjh@yF~*wMG)a>*L_t6W z*VIf>(MDN;IRb8nc*I5fBiJ2(rp5t4a|1z3)8EJKVRizI%9_H|O0s_uTW& z{hiP6cYbHN@7^0VFZ1*i!zUBlBz%*N-}|Qg8ZmrM8@94d|CA{tNa_7iaf_edeYVSc z(Q%jiUD6xx3k(eW<(f5Xyzu?mzJ2?CKKmCXKk;65Del$NGPSLsR?33c=Pr< zfl}ZEK>m7pMP6RshX)R9Sid$ZB4lQ$|8#$!AgyPB+QZMs-PhaA*GGlmr*_k-rHI9V zqr(ao3n7W*L^^L*oyN^yBD4(5U>?t|aI+DoEw$?Fw~3 zHF4458R=<-g@rZMwcVYa6RROW+Sax_>E2FJdyHfI8Mf`nKMtL-b#kzDJ5sUuF=npB_!d6SV_Iy);H$%zzSjmNH? z8L%i+jcZ5L*N-s+1`lt(@dgEMG=8Z?8@)YM1V<4ccPbuL0o9arNaMA4*LHYRRFKSw zbU{^34Jyl36MzaZ&pPnleza4W@z|~1#L5t$b=&{G{t~ zh-zqPK$ZDv0vHv1`}H}j9{5=rMNcdXw=J!&+7;oeGpDgkNBJw>7BJz$3K-k%I$0}V zyEBaLu%_4A+DiG;h$4!>NijEEyf9v`aly2m*bkj~*)}Ksj}k*NnU-N7niwD1(b1s@ zZK`V;ff#6vk>NoBIv1$G$e*sIOq^k-U1JFJk(MJc5RDEG27gZG!dP>F|Ctr6g^|EF z8u@#>IZYG5k|`=h=Z_cy&7Q8q5Qvi%Ib6TP)vOS`8vH49C-eVo(?B(+`+41{xQ>cb zC!kaW&Ij}Hs>(`SznCQap$pXXYUveD79ubbzFJy}OGvDdII;Z`{#S~N441}~GJMl{ zVFs5A@_n_Y6=q22-24Nz9{G6}adp*1LAe zzbshi=8xL_=hR8o{>fZGkr@H_pE`M523)qws>V6uC%-&l&R-EHgvHns$B(izbP&cL z2_(+WyBvhS7O?ykAx};U{$CtDBC~3zw}1R)i<7GWFoUC62PYfBM( z*@r)yZ2S)&{9N#tDczB~;IE+nVFy|eL)bs{29A$_|FP^tGTU?d{+A#B5B|rGWlc8z zT#bKDO5%74-kCmy_&2_t<3PpL;Zi6aE?}_FKg5`Xar< zz-4T0^EWThc4@N0N4d*S|4YW7cKHvhzJw(HO&Z|qfe_^Hi4d&!LO>+YZz>Y?I(Krr zfg`cgTJSUe1b@uG#+E;-8Q`N@@^JL_l)q#qzhW_DY(bo?8NVsThRsri@r zxQeVlj5&W;^`f~^=^I~6d+h~_AvNjwt;sJb#h}hXo zzgc^ywb4`cE7NargUP`CGAM!AKR8=#1xQC1pcH?8{J(AflswT0*=nb`y!Y1Lj)uC< z#`+UEpM$wc1q}a1agi3uQ~v}0@c-t&rAi#XNKW=4RNTBbbbN|5|IIomgFx+{@W(Dq z0TYZHL-pQW4YgfOH}AGJgopSdkwp!{AGqM*|yr1w2O+eLbxC_0hqdZ34;Gn zyqRtPL+yVMUW5H31s(D2wkD|H#t$Xl?!Tp(B^~*wc=kVN^8EN8bVh^lGR~Z)o3{eo z*QxVyDfs>?@b7M^Td^d8X6Bzinmi}`A%@-Yr^&DfM))KJz?aO6M=#voR8xHEyo~=) z#y?7pKlxez!Tm4){_+IS(V-@>UK8_yAtg;AZ2`vbt9h{ENh~x6gt#3Wf}_`LAp&H1zo|IVlFcWB7O$+5Jc34Vjj2{{IKu|A_nVhPD1f z6cniQy4%qN{ym+ocxoBe99We}{O3l=n6tY>=g$^9CUIPtz$0j2c)(%~gtBr>1pF`j z_j_vCq=KMFYbrZL($V?ufAg;$4Yi%k)yK2t(>LT9C4Zb04NB|%AOcpLSb3;mBaXn> z{`dWPRNOIyZJ!1AzvE``Vcq|ZWzV^>;l15$w_6%|y4yTm?hnwq>eLUgKqUTy*WXy< zM_lIrWrTrUGwlHcq5?#q1-ASV$0c*pdK6zS4)$QE!n#p%Dqa&0sn*NuPC;YL+NvRkkhL0b@`9RhxPXN-nn2KraguU?0>J3jnj_~Z-$7uNDx+k9d z!|Fe+fAYl*Yv+XNZ4@%LhlnCj&6U4j#PW9}YK!MWWBmBQ`;tE~IFQj`2Qm6{-87Zf z%hebRBY8TQp%F@${)(oM2-2+`lI0xYE~@$7JNwAw%OVZOC*nzfwbfO41R1UJ5bI() z8$o9m;Mn4|EfS6f`+4I92a5X~nU?$R^{;<=HCa+aJH;zhq>3=(dAs#uGmtI-Db)9} zN7*>d$tI3%95NVPt44*#96j~qDp}om*o8kV%)b;8q=mGj=RdXpM_C$afKsJ2s*qsy zH|M{l&Y!DR0AVuHlco1b8D1$R)p|tsPZr`>uVT^2X(F4Gpf*n#xe5$bK!M<|_4Y_h zN#f+OtFlH1`1s&K#LE^XptX_)%U%&+3DC!cvWb)@o2XQrl@JeAMs+Y4n4cJZtF0B) zl+~S|UD!rN`L)=n+2nC>L0Z>9%}CZBSzU~!Fc49IJpRfV{90V)nritz5A<*nb-73&00>O#v_dV|UTPK~sZM#$?xSv6eF! z#0&8ET(4P*S|*34vm@>5*Zdu0^%eETN03hFlXj;5|9lM zl1TF)LK3m1MIny#D4Zf9EG8lhuVjsniCmBv`@6;SRxDlc=*nf!u6uG*(#v?T(#?kY zUW4VZwWD!s)ub8tj9_Sr4=Wq0i2p9)MJjj$^|fo)N=r*iN=nev73Sw-uz?S@`T6-p zg$2czFXMVE0=jim!S4vCDu9lWxzgAU!1DB1u zZ+F2q=*R)$najz_JaOX&gObl&P+6ptDjTsqAm9W9guz3J;|*cF%Xb1h6jcxe1OY)n5D)|e0YN|z5CjAPK|l}? Y1Ox#=KoAfF1OY)n5D)|efpH@6fB3x8sQ>@~ literal 0 HcmV?d00001 diff --git a/src/main/resources/termora.iss b/src/main/resources/termora.iss index 94dca14..d13e992 100644 --- a/src/main/resources/termora.iss +++ b/src/main/resources/termora.iss @@ -38,7 +38,7 @@ SolidCompression=yes WizardStyle=classic ;WizardStyle=modern SetupIconFile={#MySetupIconFile} -;WizardSmallImageFile= +WizardSmallImageFile={#MyWizardSmallImageFile} [Languages] Name: "english"; MessagesFile: "compiler:Default.isl"