OSDN Git Service

Generate an uninstaller with NSIS that finds the installDir in the registry, executes...
authorMichael Curran <mick@kulgan.net>
Mon, 19 Mar 2012 10:47:04 +0000 (20:47 +1000)
committerMichael Curran <mick@kulgan.net>
Mon, 19 Mar 2012 10:47:04 +0000 (20:47 +1000)
sconstruct
uninstaller/uninst.nsi [new file with mode: 0644]

index 9acf60a..6d5f17b 100755 (executable)
@@ -240,8 +240,20 @@ if certFile:
        env.AddPostAction(launcher, [signExec])\r
 env.Alias("launcher", launcher)\r
 \r
+uninstFile=File("dist/uninstall.exe")\r
+uninstGen = env.Command(File("uninstaller/uninstGen.exe"), "uninstaller/uninst.nsi",\r
+       [[makensis, "/V2",\r
+       "/DVERSION=$version", '/DPUBLISHER="$publisher"',\r
+       "/DUNINSTEXE=%s"%uninstFile.abspath,\r
+       "/XOutFile ${TARGET.abspath}",\r
+       "$SOURCE"]])\r
+uninstaller=env.Command(uninstFile,uninstGen,[uninstGen])\r
+if certFile:\r
+       env.AddPostAction(uninstaller, [signExec])\r
+\r
+env.Alias("launcher", launcher)\r
 env.Alias("portable", launcher)\r
-env.Alias("installer", launcher)\r
+\r
 \r
 clientArchive = env.SzArchive(outputDir.File("%s_controllerClient.zip" % outFilePrefix), clientDir, relativeToSourceDir=True)\r
 env.Alias("client", clientArchive)\r
@@ -311,5 +323,5 @@ symbolsList.extend(env.Glob(os.path.join(sourceLibDir64.path,'*.pdb')))
 symbolsArchive = env.SzArchive(outputDir.File("%s_debugSymbols.zip" % outFilePrefix), symbolsList)\r
 env.Alias("symbolsArchive", symbolsArchive)\r
 \r
-env.Default(portableDist)\r
+env.Default(dist)\r
 \r
diff --git a/uninstaller/uninst.nsi b/uninstaller/uninst.nsi
new file mode 100644 (file)
index 0000000..ab63838
--- /dev/null
@@ -0,0 +1,97 @@
+!include "MUI2.nsh"\r
+\r
+!define appName "NVDA"\r
+\r
+!define INSTDIR_REG_ROOT "HKLM"\r
+!define INSTDIR_REG_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${appName}"\r
+\r
+SetCompressor /SOLID LZMA\r
+CRCCheck On\r
+XPStyle on\r
+InstProgressFlags Smooth\r
+RequestExecutionLevel user\r
+\r
+ReserveFile "UAC.dll"\r
+!addplugindir "."\r
+\r
+Name "${appName}"\r
+VIProductVersion "0.0.0.0" ;Needs to be here so other version info shows up\r
+VIAddVersionKey "ProductName" "${appName}"\r
+VIAddVersionKey "LegalCopyright" "Copyright 2006 - 2011 NVDA Contributors"\r
+VIAddVersionKey "FileDescription" "${appName} installer"\r
+VIAddVersionKey "ProductVersion" "${VERSION}"\r
+\r
+;Minimal installer to generate uninstaller\r
+\r
+Section "install"\r
+SetAutoClose true\r
+WriteUninstaller "${UNINSTEXE}"\r
+SectionEnd\r
+\r
+;Actual uninstaller stuff\r
+\r
+!insertmacro MUI_UNPAGE_CONFIRM\r
+!insertmacro MUI_UNPAGE_INSTFILES\r
+!InsertMacro MUI_UNPAGE_FINISH\r
+\r
+;Include modern user interface language files\r
+!insertmacro MUI_LANGUAGE "English" ; default language\r
+!insertmacro MUI_LANGUAGE "French"\r
+!insertmacro MUI_LANGUAGE "German"\r
+!insertmacro MUI_LANGUAGE "Spanish"\r
+!insertmacro MUI_LANGUAGE "SpanishInternational"\r
+!insertmacro MUI_LANGUAGE "SimpChinese"\r
+!insertmacro MUI_LANGUAGE "TradChinese"\r
+!insertmacro MUI_LANGUAGE "Japanese"\r
+!insertmacro MUI_LANGUAGE "Italian"\r
+;!insertmacro MUI_LANGUAGE "Swedish"\r
+!insertmacro MUI_LANGUAGE "Finnish"\r
+!insertmacro MUI_LANGUAGE "Russian"\r
+!insertmacro MUI_LANGUAGE "Portuguese"\r
+!insertmacro MUI_LANGUAGE "PortugueseBR"\r
+!insertmacro MUI_LANGUAGE "Polish"\r
+!insertmacro MUI_LANGUAGE "Czech"\r
+!insertmacro MUI_LANGUAGE "Slovak"\r
+!insertmacro MUI_LANGUAGE "Croatian"\r
+!insertmacro MUI_LANGUAGE "Hungarian"\r
+!insertmacro MUI_LANGUAGE "Galician"\r
+!insertmacro MUI_LANGUAGE "Dutch"\r
+!insertmacro MUI_LANGUAGE "Arabic"\r
+!insertmacro MUI_LANGUAGE "Danish"\r
+!insertmacro MUI_LANGUAGE "Icelandic"\r
+!insertmacro MUI_LANGUAGE "Serbian"\r
+!insertmacro MUI_LANGUAGE "Turkish"\r
+!insertmacro MUI_LANGUAGE "Albanian"\r
+!insertmacro MUI_LANGUAGE "Bulgarian"\r
+!insertmacro MUI_LANGUAGE "Norwegian"\r
+  !insertmacro MUI_LANGUAGE "NorwegianNynorsk"\r
+\r
+Function un.onInit\r
+UAC::RunElevated\r
+;If couldn't change user then fail\r
+strcmp 0 $0 +1 elevationFail\r
+;If we are the outer user process, then silently quit\r
+strcmp 1 $1 +1 +2\r
+quit\r
+;If we are now an admin, success\r
+strcmp 1 $3 elevationSuccess\r
+elevationFail:\r
+MessageBox mb_iconstop "Unable to elevate, error $0"\r
+quit\r
+elevationSuccess:\r
+;Odd the uninstaller does not do this?\r
+ReadRegStr $INSTDIR ${INSTDIR_REG_ROOT} "${INSTDIR_REG_KEY}" "InstallDir"\r
+; Get the locale language ID from kernel32.dll and dynamically change language of the installer\r
+System::Call 'kernel32::GetUserDefaultUILanguage() i .r0'\r
+;Force zh-HK to zh-TW as zh-HK uses wrong encoding on Vista/7 #1596 \r
+StrCmp $0 "3076" 0 +2\r
+StrCpy $0 "1028"\r
+StrCpy $LANGUAGE $0\r
+FunctionEnd\r
+\r
+Section "Uninstall"\r
+SetAutoClose true\r
+MessageBox MB_OK "install dir is $INSTDIR"\r
+;execWait "$INSTDIR\nvda_slave.exe unregisterInstall"\r
+;Rmdir /REBOOTOK /r "$INSTDIR"\r
+SectionEnd\r