1diff --git a/out/targets/nsis/NsisTarget.js b/out/targets/nsis/NsisTarget.js
2index 8a3462b185b078a260483635e6d774e2ece6e269..105778c145ab63a26444179215c643a7f22148a0 100644
3--- a/out/targets/nsis/NsisTarget.js
4+++ b/out/targets/nsis/NsisTarget.js
5@@ -366,7 +366,9 @@ class NsisTarget extends core_1.Target {
6 await this.executeMakensis(defines, commands, sharedHeader + (await this.computeFinalScript(script, false, archs)));
7 // http://forums.winamp.com/showthread.php?p=3078545
8 // TODO: remove workaround when wine is fully upgraded to 11
9- if ((0, macosVersion_1.isMacOsCatalina)()) {
10+ // T3 Code builds Windows installers on Linux without wine; read the
11+ // uninstaller out of the stub the way macOS hosts already do.
12+ if ((0, macosVersion_1.isMacOsCatalina)() || process.platform === "linux") {
13 try {
14 await nsisUtil_1.UninstallerReader.exec(installerPath, uninstallerPath);
15 }
16diff --git a/templates/nsis/include/allowOnlyOneInstallerInstance.nsh b/templates/nsis/include/allowOnlyOneInstallerInstance.nsh
17--- a/templates/nsis/include/allowOnlyOneInstallerInstance.nsh
18+++ b/templates/nsis/include/allowOnlyOneInstallerInstance.nsh
19@@ -103,6 +103,9 @@
20 !macroend
21
22 !macro _CHECK_APP_RUNNING
23+ Var /GLOBAL appRunningMessage
24+ Var /GLOBAL appClosingMessage
25+ Var /GLOBAL appCannotBeClosedMessage
26 ${GetProcessInfo} 0 $pid $1 $2 $3 $4
27 ${if} $3 != "${APP_EXECUTABLE_FILENAME}"
28 ${if} ${isUpdated}
29@@ -112,17 +115,23 @@
30
31 !insertmacro FIND_PROCESS "${APP_EXECUTABLE_FILENAME}" $R0
32 ${if} $R0 == 0
33+ StrCpy $appRunningMessage "$(appRunning)"
34+ StrCpy $appClosingMessage "$(appClosing)"
35+ StrCpy $appCannotBeClosedMessage "$(appCannotBeClosed)"
36+ !ifmacrodef customAppRunningMessages
37+ !insertmacro customAppRunningMessages
38+ !endif
39 ${if} ${isUpdated}
40 # allow app to exit without explicit kill
41 Sleep 1000
42 Goto doStopProcess
43 ${endIf}
44- MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(appRunning)" /SD IDOK IDOK doStopProcess
45+ MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$appRunningMessage" /SD IDOK IDOK doStopProcess
46 Quit
47
48 doStopProcess:
49
50- DetailPrint "$(appClosing)"
51+ DetailPrint "$appClosingMessage"
52
53 !insertmacro KILL_PROCESS "${APP_EXECUTABLE_FILENAME}" 0
54 # to ensure that files are not "in-use"
55@@ -153,7 +162,7 @@
56 # App likely running with elevated permissions.
57 # Ask user to close it manually
58 ${if} $R1 > 1
59- MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "$(appCannotBeClosed)" /SD IDCANCEL IDRETRY loop
60+ MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "$appCannotBeClosedMessage" /SD IDCANCEL IDRETRY loop
61 Quit
62 ${else}
63 Goto loop