Improve installer: Make installer UAC aware.
This commit is contained in:
parent
f4c7a65de0
commit
00a05d44c2
@ -120,6 +120,11 @@ REM ------------------------------------------
|
|||||||
attrib +R "%OUT_FILE%.zip"
|
attrib +R "%OUT_FILE%.zip"
|
||||||
attrib +R "%OUT_FILE%.exe"
|
attrib +R "%OUT_FILE%.exe"
|
||||||
REM ------------------------------------------
|
REM ------------------------------------------
|
||||||
|
REM :: CREATE SIGNATURE ::
|
||||||
|
REM ------------------------------------------
|
||||||
|
"%PATH_GNUPG1%\gpg.exe" --detach-sign "%OUT_FILE%.exe"
|
||||||
|
attrib +R "%OUT_FILE%.exe.sig"
|
||||||
|
REM ------------------------------------------
|
||||||
echo.
|
echo.
|
||||||
echo BUIDL COMPLETED SUCCESSFULLY :-)
|
echo BUIDL COMPLETED SUCCESSFULLY :-)
|
||||||
echo.
|
echo.
|
||||||
|
@ -7,6 +7,7 @@ set "PATH_UPXBIN="
|
|||||||
set "PATH_MKNSIS="
|
set "PATH_MKNSIS="
|
||||||
set "PATH_MSVC90="
|
set "PATH_MSVC90="
|
||||||
set "PATH_QTMSVC="
|
set "PATH_QTMSVC="
|
||||||
|
set "PATH_GNUPG1="
|
||||||
REM ------------------------------------------
|
REM ------------------------------------------
|
||||||
for /f "tokens=2,*" %%s in (buildenv.txt) do (
|
for /f "tokens=2,*" %%s in (buildenv.txt) do (
|
||||||
if "%%s"=="PATH_SEVENZ" set "PATH_SEVENZ=%%~t"
|
if "%%s"=="PATH_SEVENZ" set "PATH_SEVENZ=%%~t"
|
||||||
@ -15,6 +16,7 @@ for /f "tokens=2,*" %%s in (buildenv.txt) do (
|
|||||||
if "%%s"=="PATH_MKNSIS" set "PATH_MKNSIS=%%~t"
|
if "%%s"=="PATH_MKNSIS" set "PATH_MKNSIS=%%~t"
|
||||||
if "%%s"=="PATH_MSVC90" set "PATH_MSVC90=%%~t"
|
if "%%s"=="PATH_MSVC90" set "PATH_MSVC90=%%~t"
|
||||||
if "%%s"=="PATH_QTMSVC" set "PATH_QTMSVC=%%~t"
|
if "%%s"=="PATH_QTMSVC" set "PATH_QTMSVC=%%~t"
|
||||||
|
if "%%s"=="PATH_GNUPG1" set "PATH_GNUPG1=%%~t"
|
||||||
)
|
)
|
||||||
REM ------------------------------------------
|
REM ------------------------------------------
|
||||||
:: echo PATH_SEVENZ=%PATH_SEVENZ%
|
:: echo PATH_SEVENZ=%PATH_SEVENZ%
|
||||||
@ -36,5 +38,6 @@ if not exist "%PATH_QTMSVC%\bin\qtvars.bat" GOTO:EOF
|
|||||||
if not exist "%PATH_QTMSVC%\bin\uic.exe" GOTO:EOF
|
if not exist "%PATH_QTMSVC%\bin\uic.exe" GOTO:EOF
|
||||||
if not exist "%PATH_QTMSVC%\bin\moc.exe" GOTO:EOF
|
if not exist "%PATH_QTMSVC%\bin\moc.exe" GOTO:EOF
|
||||||
if not exist "%PATH_QTMSVC%\bin\rcc.exe" GOTO:EOF
|
if not exist "%PATH_QTMSVC%\bin\rcc.exe" GOTO:EOF
|
||||||
|
if not exist "%PATH_GNUPG1%\gpg.exe" GOTO:EOF
|
||||||
REM ------------------------------------------
|
REM ------------------------------------------
|
||||||
set "LAMEXP_ERROR=0"
|
set "LAMEXP_ERROR=0"
|
||||||
|
@ -4,3 +4,4 @@
|
|||||||
#define PATH_MKNSIS "E:\NSIS"
|
#define PATH_MKNSIS "E:\NSIS"
|
||||||
#define PATH_MSVC90 "D:\Microsoft Visual Studio 9.0"
|
#define PATH_MSVC90 "D:\Microsoft Visual Studio 9.0"
|
||||||
#define PATH_QTMSVC "E:\Qt\MSVC\4.7.1"
|
#define PATH_QTMSVC "E:\Qt\MSVC\4.7.1"
|
||||||
|
#define PATH_GNUPG1 "E:\GnuPG"
|
||||||
|
215
etc/NSIS/parameters.nsh
Normal file
215
etc/NSIS/parameters.nsh
Normal file
@ -0,0 +1,215 @@
|
|||||||
|
Function StrStr
|
||||||
|
/*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
|
||||||
|
|
||||||
|
;Return output to user
|
||||||
|
Pop $R5
|
||||||
|
Pop $R4
|
||||||
|
Pop $R3
|
||||||
|
Pop $R2
|
||||||
|
Pop $R1
|
||||||
|
Exch $R0
|
||||||
|
FunctionEnd
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; GetParameters
|
||||||
|
; input, none
|
||||||
|
; output, top of stack (replaces, with e.g. whatever)
|
||||||
|
; modifies no other variables.
|
||||||
|
|
||||||
|
Function GetParameters
|
||||||
|
Push $R0
|
||||||
|
Push $R1
|
||||||
|
Push $R2
|
||||||
|
Push $R3
|
||||||
|
|
||||||
|
StrCpy $R2 1
|
||||||
|
StrLen $R3 $CMDLINE
|
||||||
|
|
||||||
|
;Check for quote or space
|
||||||
|
StrCpy $R0 $CMDLINE $R2
|
||||||
|
StrCmp $R0 '"' 0 +3
|
||||||
|
StrCpy $R1 '"'
|
||||||
|
Goto loop
|
||||||
|
StrCpy $R1 " "
|
||||||
|
|
||||||
|
loop:
|
||||||
|
IntOp $R2 $R2 + 1
|
||||||
|
StrCpy $R0 $CMDLINE 1 $R2
|
||||||
|
StrCmp $R0 $R1 get
|
||||||
|
StrCmp $R2 $R3 get
|
||||||
|
Goto loop
|
||||||
|
|
||||||
|
get:
|
||||||
|
IntOp $R2 $R2 + 1
|
||||||
|
StrCpy $R0 $CMDLINE 1 $R2
|
||||||
|
StrCmp $R0 " " get
|
||||||
|
StrCpy $R0 $CMDLINE "" $R2
|
||||||
|
|
||||||
|
Pop $R3
|
||||||
|
Pop $R2
|
||||||
|
Pop $R1
|
||||||
|
Exch $R0
|
||||||
|
FunctionEnd
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; GetParameterValue
|
||||||
|
; Chris Morgan<cmorgan@alum.wpi.edu> 5/10/2004
|
||||||
|
; -Updated 4/7/2005 to add support for retrieving a command line switch
|
||||||
|
; and additional documentation
|
||||||
|
;
|
||||||
|
; Searches the command line input, retrieved using GetParameters, for the
|
||||||
|
; value of an option given the option name. If no option is found the
|
||||||
|
; default value is placed on the top of the stack upon function return.
|
||||||
|
;
|
||||||
|
; This function can also be used to detect the existence of just a
|
||||||
|
; command line switch like /OUTPUT Pass the default and "OUTPUT"
|
||||||
|
; on the stack like normal. An empty return string "" will indicate
|
||||||
|
; that the switch was found, the default value indicates that
|
||||||
|
; neither a parameter or switch was found.
|
||||||
|
;
|
||||||
|
; Inputs - Top of stack is default if parameter isn't found,
|
||||||
|
; second in stack is parameter to search for, ex. "OUTPUT"
|
||||||
|
; Outputs - Top of the stack contains the value of this parameter
|
||||||
|
; So if the command line contained /OUTPUT=somedirectory, "somedirectory"
|
||||||
|
; will be on the top of the stack when this function returns
|
||||||
|
;
|
||||||
|
; Register usage
|
||||||
|
;$R0 - default return value if the parameter isn't found
|
||||||
|
;$R1 - input parameter, for example OUTPUT from the above example
|
||||||
|
;$R2 - the length of the search, this is the search parameter+2
|
||||||
|
; as we have '/OUTPUT='
|
||||||
|
;$R3 - the command line string
|
||||||
|
;$R4 - result from StrStr calls
|
||||||
|
;$R5 - search for ' ' or '"'
|
||||||
|
|
||||||
|
Function GetParameterValue
|
||||||
|
Exch $R0 ; get the top of the stack(default parameter) into R0
|
||||||
|
Exch ; exchange the top of the stack(default) with
|
||||||
|
; the second in the stack(parameter to search for)
|
||||||
|
Exch $R1 ; get the top of the stack(search parameter) into $R1
|
||||||
|
|
||||||
|
;Preserve on the stack the registers used in this function
|
||||||
|
Push $R2
|
||||||
|
Push $R3
|
||||||
|
Push $R4
|
||||||
|
Push $R5
|
||||||
|
|
||||||
|
Strlen $R2 $R1+2 ; store the length of the search string into R2
|
||||||
|
|
||||||
|
Call GetParameters ; get the command line parameters
|
||||||
|
Pop $R3 ; store the command line string in R3
|
||||||
|
|
||||||
|
# search for quoted search string
|
||||||
|
StrCpy $R5 '"' ; later on we want to search for a open quote
|
||||||
|
Push $R3 ; push the 'search in' string onto the stack
|
||||||
|
Push '"/$R1=' ; push the 'search for'
|
||||||
|
Call StrStr ; search for the quoted parameter value
|
||||||
|
Pop $R4
|
||||||
|
StrCpy $R4 $R4 "" 1 ; skip over open quote character, "" means no maxlen
|
||||||
|
StrCmp $R4 "" "" next ; if we didn't find an empty string go to next
|
||||||
|
|
||||||
|
# search for non-quoted search string
|
||||||
|
StrCpy $R5 ' ' ; later on we want to search for a space since we
|
||||||
|
; didn't start with an open quote '"' we shouldn't
|
||||||
|
; look for a close quote '"'
|
||||||
|
Push $R3 ; push the command line back on the stack for searching
|
||||||
|
Push '/$R1=' ; search for the non-quoted search string
|
||||||
|
Call StrStr
|
||||||
|
Pop $R4
|
||||||
|
|
||||||
|
; $R4 now contains the parameter string starting at the search string,
|
||||||
|
; if it was found
|
||||||
|
next:
|
||||||
|
StrCmp $R4 "" check_for_switch ; if we didn't find anything then look for
|
||||||
|
; usage as a command line switch
|
||||||
|
# copy the value after /$R1= by using StrCpy with an offset of $R2,
|
||||||
|
# the length of '/OUTPUT='
|
||||||
|
StrCpy $R0 $R4 "" $R2 ; copy commandline text beyond parameter into $R0
|
||||||
|
# search for the next parameter so we can trim this extra text off
|
||||||
|
Push $R0
|
||||||
|
Push $R5 ; search for either the first space ' ', or the first
|
||||||
|
; quote '"'
|
||||||
|
; if we found '"/output' then we want to find the
|
||||||
|
; ending ", as in '"/output=somevalue"'
|
||||||
|
; if we found '/output' then we want to find the first
|
||||||
|
; space after '/output=somevalue'
|
||||||
|
Call StrStr ; search for the next parameter
|
||||||
|
Pop $R4
|
||||||
|
StrCmp $R4 "" done ; if 'somevalue' is missing, we are done
|
||||||
|
StrLen $R4 $R4 ; get the length of 'somevalue' so we can copy this
|
||||||
|
; text into our output buffer
|
||||||
|
StrCpy $R0 $R0 -$R4 ; using the length of the string beyond the value,
|
||||||
|
; copy only the value into $R0
|
||||||
|
goto done ; if we are in the parameter retrieval path skip over
|
||||||
|
; the check for a command line switch
|
||||||
|
|
||||||
|
; See if the parameter was specified as a command line switch, like '/output'
|
||||||
|
check_for_switch:
|
||||||
|
Push $R3 ; push the command line back on the stack for searching
|
||||||
|
Push '/$R1' ; search for the non-quoted search string
|
||||||
|
Call StrStr
|
||||||
|
Pop $R4
|
||||||
|
StrCmp $R4 "" done ; if we didn't find anything then use the default
|
||||||
|
StrCpy $R0 "" ; otherwise copy in an empty string since we found the
|
||||||
|
; parameter, just didn't find a value
|
||||||
|
|
||||||
|
done:
|
||||||
|
Pop $R5
|
||||||
|
Pop $R4
|
||||||
|
Pop $R3
|
||||||
|
Pop $R2
|
||||||
|
Pop $R1
|
||||||
|
Exch $R0 ; put the value in $R0 at the top of the stack
|
||||||
|
FunctionEnd
|
||||||
|
|
||||||
|
!macro GetCommandlineParameter param default var
|
||||||
|
Push "${param}" ; push the search string onto the stack
|
||||||
|
Push "${default}" ; push a default value onto the stack
|
||||||
|
Call GetParameterValue
|
||||||
|
Pop ${var}
|
||||||
|
!macroend
|
@ -1,12 +1,63 @@
|
|||||||
RequestExecutionLevel admin
|
|
||||||
!define ZIP2EXE_NAME `LameXP v${LAMEXP_VERSION} ${LAMEXP_SUFFIX} [Build #${LAMEXP_BUILD}]`
|
!define ZIP2EXE_NAME `LameXP v${LAMEXP_VERSION} ${LAMEXP_SUFFIX} [Build #${LAMEXP_BUILD}]`
|
||||||
!define ZIP2EXE_OUTFILE `${LAMEXP_OUTPUT_FILE}`
|
!define ZIP2EXE_OUTFILE `${LAMEXP_OUTPUT_FILE}`
|
||||||
!define ZIP2EXE_COMPRESSOR_LZMA
|
!define ZIP2EXE_COMPRESSOR_LZMA
|
||||||
!define ZIP2EXE_COMPRESSOR_SOLID
|
!define ZIP2EXE_COMPRESSOR_SOLID
|
||||||
!define ZIP2EXE_INSTALLDIR `$PROGRAMFILES\${ZIP2EXE_NAME}`
|
!define ZIP2EXE_INSTALLDIR `$PROGRAMFILES\${ZIP2EXE_NAME}`
|
||||||
|
|
||||||
|
RequestExecutionLevel user
|
||||||
BrandingText `Date created: ${LAMEXP_DATE}`
|
BrandingText `Date created: ${LAMEXP_DATE}`
|
||||||
|
ShowInstDetails show
|
||||||
|
|
||||||
|
!define MUI_PAGE_CUSTOMFUNCTION_SHOW CheckForUpdate
|
||||||
|
|
||||||
|
!include `UAC.nsh`
|
||||||
|
!include `parameters.nsh`
|
||||||
!include `${NSISDIR}\Contrib\zip2exe\Base.nsh`
|
!include `${NSISDIR}\Contrib\zip2exe\Base.nsh`
|
||||||
!include `${NSISDIR}\Contrib\zip2exe\Modern.nsh`
|
!include `${NSISDIR}\Contrib\zip2exe\Modern.nsh`
|
||||||
|
|
||||||
|
Function .onInit
|
||||||
|
UAC_TryAgain:
|
||||||
|
!insertmacro UAC_RunElevated
|
||||||
|
${Switch} $0
|
||||||
|
${Case} 0
|
||||||
|
${IfThen} $1 = 1 ${|} Quit ${|}
|
||||||
|
${IfThen} $3 <> 0 ${|} ${Break} ${|}
|
||||||
|
${If} $1 = 3
|
||||||
|
MessageBox MB_ICONEXCLAMATION|MB_TOPMOST|MB_SETFOREGROUND "This installer requires admin access, please try again!" /SD IDNO IDOK UAC_TryAgain IDNO 0
|
||||||
|
${EndIf}
|
||||||
|
${Case} 1223
|
||||||
|
MessageBox MB_ICONEXCLAMATION|MB_TOPMOST|MB_SETFOREGROUND "This installer requires admin privileges, please try again!" /SD IDNO IDOK UAC_TryAgain IDNO 0
|
||||||
|
Quit
|
||||||
|
${Case} 1062
|
||||||
|
MessageBox MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND "Logon service not running, aborting!"
|
||||||
|
Quit
|
||||||
|
${Default}
|
||||||
|
MessageBox MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND "Unable to elevate installer! (Error code: $0)"
|
||||||
|
Quit
|
||||||
|
${EndSwitch}
|
||||||
|
FunctionEnd
|
||||||
|
|
||||||
|
Function .onInstSuccess
|
||||||
|
!insertmacro UAC_AsUser_ExecShell "open" "$INSTDIR\LameXP.exe" "" "$INSTDIR" SW_SHOWNORMAL
|
||||||
|
FunctionEnd
|
||||||
|
|
||||||
!insertmacro SECTION_BEGIN
|
!insertmacro SECTION_BEGIN
|
||||||
File /r `${LAMEXP_SOURCE_PATH}\*.*`
|
File /r `${LAMEXP_SOURCE_PATH}\*.*`
|
||||||
!insertmacro SECTION_END
|
!insertmacro SECTION_END
|
||||||
|
|
||||||
|
Function CheckForUpdate
|
||||||
|
!insertmacro GetCommandlineParameter "Update" "error" $R0
|
||||||
|
StrCmp $R0 "error" 0 +2
|
||||||
|
Return
|
||||||
|
|
||||||
|
FindWindow $R0 "#32770" "" $HWNDPARENT
|
||||||
|
GetDlgItem $R1 $R0 1019
|
||||||
|
SendMessage $R1 ${EM_SETREADONLY} 1 0
|
||||||
|
|
||||||
|
FindWindow $R0 "#32770" "" $HWNDPARENT
|
||||||
|
GetDlgItem $R1 $R0 1001
|
||||||
|
EnableWindow $R1 0
|
||||||
|
|
||||||
|
GetDlgItem $R1 $HWNDPARENT 1
|
||||||
|
SendMessage $R1 ${WM_SETTEXT} 0 "STR:Update"
|
||||||
|
FunctionEnd
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
#define VER_LAMEXP_MAJOR 4
|
#define VER_LAMEXP_MAJOR 4
|
||||||
#define VER_LAMEXP_MINOR_HI 0
|
#define VER_LAMEXP_MINOR_HI 0
|
||||||
#define VER_LAMEXP_MINOR_LO 0
|
#define VER_LAMEXP_MINOR_LO 0
|
||||||
#define VER_LAMEXP_BUILD 97
|
#define VER_LAMEXP_BUILD 99
|
||||||
#define VER_LAMEXP_SUFFIX TechPreview
|
#define VER_LAMEXP_SUFFIX TechPreview
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user