[vlc-devel] [PATCH] NSIS: Properly detect other bitness VLC

Marvin Scholz epirat07 at gmail.com
Mon Jan 22 23:27:32 CET 2018

Previously the installer would not detect if another bitness VLC
is already installed, this can lead to situations where two VLC
versions are installed on the system, one 32bit and one 64bit.
Windows will only show one version, as they have exactly the same
name in the start menu and shortcuts.
Even though the registry values are different for 32bit and 64bit,
the Apps list of Windows will only show one of them too.

Therefore we really need to avoid this case. With this commit, if the
user has a different bitness version of VLC installed, a dialog is
shown that prompts to uninstall the other version first and launches an
If the uninstaller is successful, installation will continue, else
it will abort.

What this does not cover, is the version compare with the other
bitness VLC version. So if the user has 32bit VLC 5.0 installed
and tries to install a 64bit VLC 4.0, it would still prompt for the
VLC 5.0 version to be uninstalled, as it is the other bitness,
even though this installer will install an older version!

But this scenario is even possible right now, because the installer
will not even notice the other version at all. Even worse, there the
user gets no prompt at all about another version of VLC already on the
system, so this commit definitely improves the situation.
 extras/package/win32/NSIS/vlc.win32.nsi.in | 46 ++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/extras/package/win32/NSIS/vlc.win32.nsi.in b/extras/package/win32/NSIS/vlc.win32.nsi.in
index 7f6a6968bf..d1d446c18d 100644
--- a/extras/package/win32/NSIS/vlc.win32.nsi.in
+++ b/extras/package/win32/NSIS/vlc.win32.nsi.in
@@ -536,6 +536,7 @@ ${MementoSectionRestore}
 @HAVE_WIN64_TRUE@    MessageBox MB_OK|MB_ICONSTOP "This version of VLC only runs on 64-bit operating systems.$\nPlease get the 32-bit version and try again."
 @HAVE_WIN64_TRUE@    Quit
 @HAVE_WIN64_TRUE@ ${EndUnless}
 ${If} ${AtLeastWinXP}
     ${If} ${IsWinXP}
     ${AndIf} ${AtMostServicePack} 1
@@ -558,6 +559,51 @@ WinOk:
   ; /update argument
   Call ParseCommandline
+    !define OTHER_BITNESS 32
+  !else
+    !define OTHER_BITNESS 64
+  !endif
+  ; See if a other bitness VLC version exists
+  SetRegView ${OTHER_BITNESS}
+  Call ReadPreviousVersion
+  SetRegView lastused
+  ${If} $PreviousVersion != ""
+    ; Uninstall the other bitness bit version!
+    MessageBox MB_OK|MB_ICONSTOP "An ${OTHER_BITNESS}bit version of VLC was detected, it must be uninstalled first!"
+    SetRegView ${OTHER_BITNESS}
+    ReadRegStr $R1 ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString"
+    ReadRegStr $R2 ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "InstallLocation"
+    SetRegView lastused
+    ${If} $R1 == ""
+      Quit
+    ${EndIf}
+    ; Run uninstaller
+    HideWindow
+    ClearErrors
+    ExecWait '"$R1" _?=$R2'
+    ; If uninstall was not successfull, do not continue.
+    ; This happens for example if the user cancels the uninstaller.
+    ${If} ${Errors}
+      Quit
+    ${EndIf}
+    ${If} ${FileExists} "$R1"
+      Delete "$R1"
+      RMDir "$R2"
+    ${EndIf}
+    ; Cleanup the previous version variable!
+    StrCpy $PreviousVersion ""
+  ${EndIf}
   ; See if previous version exists
   Call ReadPreviousVersion
2.14.3 (Apple Git-98)

More information about the vlc-devel mailing list