Update windows 32/64 installer

This commit is contained in:
Ximi1970
2020-03-28 22:33:38 +01:00
parent 15bab54f56
commit 6b4018744a
3 changed files with 415 additions and 10 deletions

View File

@@ -40,9 +40,30 @@ call "C:\Program Files (x86)\Microsoft Visual Studio\2017\WDExpress\VC\Auxiliary
C:\Qt\%QT_VER%\%SPEC%\bin\qmake ..\SysTray-X\SysTray-X.pro -spec win32-msvc
nmake
xcopy /Q /Y release\SysTray-X.exe ..\dist\%WIN%\
xcopy /Q /Y ..\config\win32\SysTray_X.json.template ..\dist\%WIN%\
rename ..\dist\%WIN%\SysTray_X.json.template SysTray_X.json
C:\Qt\%QT_VER%\%SPEC%\bin\windeployqt.exe ..\dist\%WIN%\SysTray-X.exe
if "%WIN%" == "win64" (
xcopy /Q /Y %SYSTEMROOT%\System32\msvcp140.dll ..\dist\%WIN%\
xcopy /Q /Y %SYSTEMROOT%\System32\vcruntime140.dll ..\dist\%WIN%\
)
if "%WIN%" == "win32" (
if exist %SYSTEMROOT%\SysWOW64\ (
xcopy /Q /Y %SYSTEMROOT%\SysWOW64\msvcp140.dll ..\dist\%WIN%\
xcopy /Q /Y %SYSTEMROOT%\SysWOW64\vcruntime140.dll ..\dist\%WIN%\
)
if not exist %SYSTEMROOT%\SysWOW64\ (
xcopy /Q /Y %SYSTEMROOT%\System32\msvcp140.dll ..\dist\%WIN%\
xcopy /Q /Y %SYSTEMROOT%\System32\vcruntime140.dll ..\dist\%WIN%\
)
)
goto :end
:usage

369
dist/SysTray-X-32bit.nsi vendored Normal file
View File

@@ -0,0 +1,369 @@
!define Name "SysTray-X"
Name "${Name}"
Outfile "${Name}-setup32.exe"
; MUI Settings
!define MUI_ICON "..\app\SysTray-X\files\icons\SysTray-X.ico"
!define MUI_UNICON "..\app\SysTray-X\files\icons\SysTray-X.ico"
;https://nsis.sourceforge.io/Docs/MultiUser/Readme.html
!define MULTIUSER_USE_PROGRAMFILES
!define MULTIUSER_INSTALLMODE_INSTDIR "$(^Name)"
!define MULTIUSER_EXECUTIONLEVEL Highest
!define MULTIUSER_MUI
!define MULTIUSER_INSTALLMODE_COMMANDLINE
!include MultiUser.nsh
!include MUI2.nsh
!insertmacro MULTIUSER_PAGE_INSTALLMODE
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English
!include "TextFunc.nsh"
!insertmacro TrimNewLines
!define MyStrStr "!insertmacro MyStrStr"
!macro MyStrStr ResultVar String SubString
Push `${String}`
Push `${SubString}`
!ifdef __UNINSTALL__
Call un.MyStrStr
!else
Call MyStrStr
!endif
Pop `${ResultVar}`
!macroend
!define MyStrRep "!insertmacro MyStrRep"
!macro MyStrRep output string old new
Push `${string}`
Push `${old}`
Push `${new}`
!ifdef __UNINSTALL__
Call un.MyStrRep
!else
Call MyStrRep
!endif
Pop ${output}
!macroend
!define ReplaceInFile "!insertmacro ReplaceInFile"
!macro ReplaceInFile SOURCE_FILE SEARCH_TEXT REPLACEMENT
Push `${SOURCE_FILE}`
Push `${SEARCH_TEXT}`
Push `${REPLACEMENT}`
!ifdef __UNINSTALL__
Call un.RIF
!else
Call RIF
!endif
!macroend
Section "Install"
SetOutPath "$INSTDIR"
WriteUninstaller "$INSTDIR\Uninstall.exe"
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\systray-x@Ximi1970" "DisplayName" "$(^Name)"
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\systray-x@Ximi1970" "UninstallString" "$INSTDIR\Uninstall.exe"
File "..\app\SysTray-X\files\icons\SysTray-X.ico"
File /r "..\app\dist\win32\*"
StrCpy $0 "$INSTDIR\SysTray-X.exe"
${MyStrRep} $0 $0 "\" "\\"
${ReplaceInFile} "$INSTDIR\SysTray_X.json" "SYSTRAY_X_PATH" "$0"
StrCpy $0 "$INSTDIR\SysTray_X.json"
${MyStrRep} $0 $0 "\" "\\"
WriteRegStr SHCTX "Software\Mozilla\NativeMessagingHosts\SysTray_X" "" "$0"
${If} $MultiUser.InstallMode == "CurrentUser"
;
; Find all profiles
;
ClearErrors
FileOpen $0 "$INSTDIR\..\..\Roaming\Thunderbird\profiles.ini" r
IfErrors end
loop:
FileRead $0 $1
IfErrors close
${TrimNewLines} "$1" $1
${MyStrStr} $2 $1 "Path="
StrCmp $2 "" loop 0
${MyStrRep} $2 $2 "/" "\"
SetOutPath "$INSTDIR\..\..\Roaming\Thunderbird\$2\extensions"
File "..\systray-x@Ximi1970.xpi"
goto loop
close:
FileClose $0
end:
${Else}
${If} ${FileExists} `$PROGRAMFILES\Mozilla Thunderbird\*.*`
SetOutPath "$PROGRAMFILES\Mozilla Thunderbird\distribution\extensions"
File "..\systray-x@Ximi1970.xpi"
${EndIf}
${EndIf}
;
; Menu item
;
CreateDirectory "$SMPROGRAMS\${Name}"
CreateShortCut "$SMPROGRAMS\${Name}\Uninstall.lnk" "$INSTDIR\Uninstall.exe" "SysTray-X Uninstall" "$INSTDIR\SysTray-X.ico"
;
; Install Visual Studio Redist
;
ReadRegStr $1 HKLM "SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\X86" "Installed"
StrCmp $1 1 installed
;not installed, so run the installer
; ExecWait '$INSTDIR\vc_redist.x86.exe /passive /quiet /norestart'
installed:
SectionEnd
Section "Uninstall"
# Remove Menu
Delete "$SMPROGRAMS\${Name}\Uninstall.lnk"
# Try to remove the Menu folder
RmDir "$SMPROGRAMS\${Name}"
${If} $MultiUser.InstallMode == "CurrentUser"
;
; Clean all profiles
;
ClearErrors
FileOpen $0 "$INSTDIR\..\..\Roaming\Thunderbird\profiles.ini" r
IfErrors end
loop:
FileRead $0 $1
IfErrors close
${TrimNewLines} "$1" $1
${MyStrStr} $2 $1 "Path="
StrCmp $2 "" loop 0
${MyStrRep} $2 $2 "/" "\"
Delete "$INSTDIR\..\..\Roaming\Thunderbird\$2\extensions\systray-x@Ximi1970.xpi"
goto loop
close:
FileClose $0
end:
${Else}
${If} ${FileExists} `$PROGRAMFILES\Mozilla Thunderbird\*.*`
Delete "$PROGRAMFILES\Mozilla Thunderbird\distribution\extensions\systray-x@Ximi1970.xpi"
${EndIf}
${EndIf}
;
; Clean default
;
RmDir /r "$INSTDIR"
DeleteRegKey SHCTX "Software\Mozilla\NativeMessagingHosts\SysTray_X"
DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\systray-x@Ximi1970"
SectionEnd
Function .onInit
!insertmacro MULTIUSER_INIT
FunctionEnd
Function un.onInit
!insertmacro MULTIUSER_UNINIT
FunctionEnd
;
; Modified StrStr function
;
!macro Func_MyStrStr un
Function ${un}MyStrStr
/* After this point:
------------------------------------------
$R0 = SubString (input)
$R1 = String (input)
$R2 = SubStringLen (temp)
$R3 = StrLen (temp)
$R4 = StartCharPos (temp)
$R5 = TempStr (temp)*/
;Get input from user
Exch $R0
Exch
Exch $R1
Push $R2
Push $R3
Push $R4
Push $R5
;Get "String" and "SubString" length
StrLen $R2 $R0
StrLen $R3 $R1
;Start "StartCharPos" counter
StrCpy $R4 0
;Loop until "SubString" is found or "String" reaches its end
loop:
;Remove everything before and after the searched part ("TempStr")
StrCpy $R5 $R1 $R2 $R4
;Compare "TempStr" with "SubString"
StrCmp $R5 $R0 done
;If not "SubString", this could be "String"'s end
IntCmp $R4 $R3 done 0 done
;If not, continue the loop
IntOp $R4 $R4 + 1
Goto loop
done:
/*After this point:
------------------------------------------
$R0 = ResultVar (output)*/
;Remove part before "SubString" on "String" (if there has one)
StrCpy $R0 $R1 `` $R4
;Remove also "SubString" on "String"
StrCpy $R0 $R0 `` $R2
;Return output to user
Pop $R5
Pop $R4
Pop $R3
Pop $R2
Pop $R1
Exch $R0
FunctionEnd
!macroend
!insertmacro Func_MyStrStr ""
!insertmacro Func_MyStrStr "un."
!macro Func_MyStrRep un
Function ${un}MyStrRep
Exch $R2 ;new
Exch 1
Exch $R1 ;old
Exch 2
Exch $R0 ;string
Push $R3
Push $R4
Push $R5
Push $R6
Push $R7
Push $R8
Push $R9
StrCpy $R3 0
StrLen $R4 $R1
StrLen $R6 $R0
StrLen $R9 $R2
loop:
StrCpy $R5 $R0 $R4 $R3
StrCmp $R5 $R1 found
StrCmp $R3 $R6 done
IntOp $R3 $R3 + 1 ;move offset by 1 to check the next character
Goto loop
found:
StrCpy $R5 $R0 $R3
IntOp $R8 $R3 + $R4
StrCpy $R7 $R0 "" $R8
StrCpy $R0 $R5$R2$R7
StrLen $R6 $R0
IntOp $R3 $R3 + $R9 ;move offset by length of the replacement string
Goto loop
done:
Pop $R9
Pop $R8
Pop $R7
Pop $R6
Pop $R5
Pop $R4
Pop $R3
Push $R0
Push $R1
Pop $R0
Pop $R1
Pop $R0
Pop $R2
Exch $R1
FunctionEnd
!macroend
!insertmacro Func_MyStrRep ""
!insertmacro Func_MyStrRep "un."
!macro Func_RIF un
Function ${un}RIF
ClearErrors ; want to be a newborn
Exch $0 ; REPLACEMENT
Exch
Exch $1 ; SEARCH_TEXT
Exch 2
Exch $2 ; SOURCE_FILE
Push $R0 ; SOURCE_FILE file handle
Push $R1 ; temporary file handle
Push $R2 ; unique temporary file name
Push $R3 ; a line to sar/save
Push $R4 ; shift puffer
IfFileExists $2 +1 RIF_error ; knock-knock
FileOpen $R0 $2 "r" ; open the door
GetTempFileName $R2 ; who's new?
FileOpen $R1 $R2 "w" ; the escape, please!
RIF_loop: ; round'n'round we go
FileRead $R0 $R3 ; read one line
IfErrors RIF_leaveloop ; enough is enough
RIF_sar: ; sar - search and replace
Push "$R3" ; (hair)stack
Push "$1" ; needle
Push "$0" ; blood
!ifdef __UNINSTALL__
Call un.MyStrRep
!else
Call MyStrRep
!endif
StrCpy $R4 "$R3" ; remember previous state
Pop $R3 ; gimme s.th. back in return!
StrCmp "$R3" "$R4" +1 RIF_sar ; loop, might change again!
FileWrite $R1 "$R3" ; save the newbie
Goto RIF_loop ; gimme more
RIF_leaveloop: ; over'n'out, Sir!
FileClose $R1 ; S'rry, Ma'am - clos'n now
FileClose $R0 ; me 2
Delete "$2.old" ; go away, Sire
Rename "$2" "$2.old" ; step aside, Ma'am
Rename "$R2" "$2" ; hi, baby!
ClearErrors ; now i AM a newborn
Goto RIF_out ; out'n'away
RIF_error: ; ups - s.th. went wrong...
SetErrors ; ...so cry, boy!
RIF_out: ; your wardrobe?
Pop $R4
Pop $R3
Pop $R2
Pop $R1
Pop $R0
Pop $2
Pop $0
Pop $1
FunctionEnd
!macroend
!insertmacro Func_RIF ""
!insertmacro Func_RIF "un."

View File

@@ -6,14 +6,6 @@ Outfile "${Name}-setup64.exe"
!define MUI_ICON "..\app\SysTray-X\files\icons\SysTray-X.ico"
!define MUI_UNICON "..\app\SysTray-X\files\icons\SysTray-X.ico"
; installing VC redist
;http://forums.winamp.com/showthread.php?t=367574
;https://nsis.sourceforge.io/Docs/MultiUser/Readme.html
!define MULTIUSER_USE_PROGRAMFILES64
@@ -23,6 +15,7 @@ Outfile "${Name}-setup64.exe"
!define MULTIUSER_INSTALLMODE_COMMANDLINE
!include MultiUser.nsh
!include MUI2.nsh
!include x64.nsh
!insertmacro MULTIUSER_PAGE_INSTALLMODE
!insertmacro MUI_PAGE_DIRECTORY
@@ -115,18 +108,35 @@ Section "Install"
SetOutPath "$PROGRAMFILES32\Mozilla Thunderbird\distribution\extensions"
File "..\systray-x@Ximi1970.xpi"
${EndIf}
${If} ${FileExists} `$PROGRAMFILES64\Mozilla Thunderbird\*.*`
SetOutPath "$PROGRAMFILES64\Mozilla Thunderbird\distribution\extensions"
File "..\systray-x@Ximi1970.xpi"
${EndIf}
${EndIf}
;
; Menu item
;
CreateDirectory "$SMPROGRAMS\${Name}"
CreateShortCut "$SMPROGRAMS\${Name}\Uninstall.lnk" "$INSTDIR\Uninstall.exe" "SysTray-X Uninstall" "$INSTDIR\SysTray-X.ico"
;
; Install Visual Studio Redist
;
${If} ${RunningX64}
ReadRegStr $1 HKLM "SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\X64" "Installed"
StrCmp $1 1 installed
${Else}
ReadRegStr $1 HKLM "SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\X86" "Installed"
StrCmp $1 1 installed
${EndIf}
;not installed, so run the installer
; ExecWait '$INSTDIR\vc_redist.x64.exe /passive /quiet /norestart'
installed:
SectionEnd
Section "Uninstall"
@@ -156,7 +166,7 @@ Section "Uninstall"
FileClose $0
end:
${Else}
${If} ${FileExists} `$PROGRAMFILES32\Mozilla Thunderbird\*.*`
Delete "$PROGRAMFILES32\Mozilla Thunderbird\distribution\extensions\systray-x@Ximi1970.xpi"
${EndIf}
@@ -175,6 +185,11 @@ Section "Uninstall"
SectionEnd
Function .onInit
${IfNot} ${RunningX64}
MessageBox MB_OK|MB_ICONSTOP 'This is the 64 bit installer$\r$\nPlease download the 32 bit version $\r$\nClick Ok to quit Setup.'
Quit
${EndIf}
!insertmacro MULTIUSER_INIT
FunctionEnd