From 3cf00fd4e72a6a2c3696965e1c0e3f55130ebe98 Mon Sep 17 00:00:00 2001 From: Geoffroy Couprie Date: Fri, 5 Mar 2010 19:48:17 +0100 Subject: [PATCH] Win32: don't launch VLC as admin after installing Fixes 3192 --- Makefile.am | 4 + extras/package/win32/UAC.dll | Bin 0 -> 17408 bytes extras/package/win32/UAC.nsh | 191 ++++++++++++++++++++++++++ extras/package/win32/vlc.win32.nsi.in | 86 +++++++++++- 4 files changed, 274 insertions(+), 7 deletions(-) create mode 100644 extras/package/win32/UAC.dll create mode 100644 extras/package/win32/UAC.nsh diff --git a/Makefile.am b/Makefile.am index 08ac51d154..d4ad59e62b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -48,6 +48,8 @@ EXTRA_DIST = \ extras/package/rpm/vlc.altlinux.spec \ extras/package/win32/vlc.win32.nsi.in \ extras/package/win32/spad.nsi.in \ + extras/package/win32/UAC.nsh \ + extras/package/win32/UAC.dll \ extras/package/win32/languages/declaration.nsh \ extras/package/win32/languages/english.nsh \ extras/package/win32/languages/french.nsh @@ -772,6 +774,8 @@ package-win32-base-debug: package-win-common # Script installer cp "$(top_builddir)/extras/package/win32/vlc.win32.nsi" "$(win32_destdir)/" cp "$(top_builddir)/extras/package/win32/spad.nsi" "$(win32_destdir)/" + cp "$(srcdir)/extras/package/win32/UAC.nsh" "$(win32_destdir)/" + cp "$(srcdir)/extras/package/win32/UAC.dll" "$(win32_destdir)/" mkdir "$(win32_destdir)/languages" cp $(srcdir)/extras/package/win32/languages/*.nsh "$(win32_destdir)/languages/" diff --git a/extras/package/win32/UAC.dll b/extras/package/win32/UAC.dll new file mode 100644 index 0000000000000000000000000000000000000000..edf21305a459975db7d2f35056acda77e48bdfa8 GIT binary patch literal 17408 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 literal 0 HcmV?d00001 diff --git a/extras/package/win32/UAC.nsh b/extras/package/win32/UAC.nsh new file mode 100644 index 0000000000..9df8cefd69 --- /dev/null +++ b/extras/package/win32/UAC.nsh @@ -0,0 +1,191 @@ +/* +======================= +UAC helper include file +....................... + +Macros starting with UAC.I should only be called from the installer and vice versa for UAC.U macros. + +*/ +!ifndef UAC_HDR__INC +!define UAC_HDR__INC +!include LogicLib.nsh + +!define UAC.RunElevatedAndProcessMessages 'UAC::RunElevated ' +!define UAC.Unload 'UAC::Unload ' +!define UAC.StackPush 'UAC::StackPush ' + +/*!macro _UAC.BuildOnInitElevationFunc _funcprefix +Function ${_funcprefix}onInit +!ifmacrodef +FunctionEnd +!macroend*/ + +!macro _UAC.GenerateSimpleFunction _funcprefix _funcName _funcCode +Function ${_funcprefix}${_funcName} +${_funcCode} +#messagebox mb_ok "${_funcprefix}${_funcName}" +FunctionEnd +!macroend + +!macro _UAC.TryDef _d _v +!ifndef ${_d} +!define ${_d} "${_v}" +!endif +!macroend + +!macro _UAC.InitStrings _modeprefix +!insertmacro _UAC.TryDef UACSTR.UnDataFile "UAC.dat" +!insertmacro _UAC.TryDef UACSTR.${_modeprefix}ElvWinErr "Unable to elevate , error $0" +!ifNdef __UNINSTALL__ + !insertmacro _UAC.TryDef UACSTR.${_modeprefix}ElvAbortReqAdmin "This installer requires admin access, aborting!" + !insertmacro _UAC.TryDef UACSTR.${_modeprefix}ElvMustTryAgain "This installer requires admin access, try again" + !else + !insertmacro _UAC.TryDef UACSTR.${_modeprefix}ElvAbortReqAdmin "This uninstaller requires admin access, aborting!" + !insertmacro _UAC.TryDef UACSTR.${_modeprefix}ElvMustTryAgain "This uninstaller requires admin access, try again" + !endif +!macroend + +!ifmacroNdef _UAC.GenerateUninstallerTango +!macro _UAC.GenerateUninstallerTango UninstallerFileName +!ifdef __GLOBAL__ + !error "UAC: Needs to be called inside a function" + !endif +!ifNdef __UNINSTALL__ + !error "UAC: _UAC.GenerateUninstallerTango should only be called by uninstaller, see http://forums.winamp.com/showthread.php?threadid=280330" + !endif +!ifNdef UAC_UNINSTALLERTANGOFORALLPLATFORMS + !include WinVer.nsh + !endif +!insertmacro _UAC.InitStrings 'U.' +ReadIniStr $0 "$ExeDir\${UACSTR.UnDataFile}" UAC "Un.Ready" +${IF} $0 != 1 +!ifNdef UAC_UNINSTALLERTANGOFORALLPLATFORMS +${AndIf} ${AtLeastWinVista} +!endif + InitPluginsDir + WriteIniStr "$PluginsDir\${UACSTR.UnDataFile}" UAC "Un.Ready" 1 + CopyFiles /SILENT "$EXEPATH" "$PluginsDir\${UninstallerFileName}" + StrCpy $0 "" + ${IfThen} ${Silent} ${|} StrCpy $0 "/S " ${|} + ExecWait '"$PluginsDir\${UninstallerFileName}" $0/NCRC _?=$INSTDIR' $0 + SetErrorLevel $0 + Quit + ${EndIf} +!macroend +!endif + +!ifmacroNdef _UAC.GenerateOnInitElevationCode +!macro _UAC.GenerateOnInitElevationCode _modeprefix +!ifndef __FUNCTION__ + !error "UAC: Needs to be called inside a function" + !endif +!insertmacro _UAC.InitStrings ${_modeprefix} +!define _UAC.GOIECUniq L${__LINE__} +UAC_Elevate_${_UAC.GOIECUniq}: +UAC::RunElevated +StrCmp 1223 $0 UAC_ElevationAborted_${_UAC.GOIECUniq} ; UAC dialog aborted by user? +StrCmp 0 $0 0 UAC_Err_${_UAC.GOIECUniq} ; Error? +StrCmp 1 $1 0 UAC_Success_${_UAC.GOIECUniq} ;Are we the real deal or just the wrapper? +Quit +UAC_Err_${_UAC.GOIECUniq}: +MessageBox mb_iconstop "${UACSTR.${_modeprefix}ElvWinErr}" +Abort +UAC_ElevationAborted_${_UAC.GOIECUniq}: +MessageBox mb_iconstop "${UACSTR.${_modeprefix}ElvAbortReqAdmin}" +Abort +UAC_Success_${_UAC.GOIECUniq}: +# if $0==0 && $3==1, we are a member of the admin group (Any OS) +# if $0==0 && $1==0, UAC not supported (Probably