|
|
|
|
#1 |
|
Senior Member
|
Uninstall string not detected in Vista x64 and XP x64
Far as I am aware, this had always worked and I can't think why this won't work any longer.
PHP Code:
On WinXP x64, however, the uninstall string doesn't even get populated. That part of the code had always worked and wouldn't had changed. I am not too sure why it stopped working for these two OSes. As it works fine in Win 7 x86/x64 and Win 8 x86/x64. I am guessing it is something to do with the Wow6432 but why would it work fine in Win 7 and 8 x64? |
|
|
|
|
|
#2 |
|
Senior Member
|
Okay, I think the problem is actually $INSTDIR is blanked on Vista x64 systems. So that is why it is failing. Any idea why $instdir will not be populated on Vista x64 but it is fine on other systems?
|
|
|
|
|
|
#3 |
|
Major Dude
Join Date: May 2005
Location: New Zealand
Posts: 916
|
So how are you writing $instdir to the registry? Are you using InstallDirRegKey? Are you copying to/from $instdir anywhere in the code? Are you using SetRegView?
The Wow6432Node thing is done inside the registry call, so it could be a bug in the XP/Vista API code, unlikely though. "Only a MouseHelmet will save you from a MouseTrap" -Jason Ross (Me) NSIS 3 POSIX Ninja Wiki Profile |
|
|
|
|
|
#4 | ||
|
Senior Member
|
Quote:
PHP Code:
However, it now does detect it, it just doesn't run the uninstaller at least in vista x64. The message pops up but doesnt run it, as $instdir returns a null string at that point, but in all other OSes I've tested, it is properly populated, and thus works. Quote:
PHP Code:
|
||
|
|
|
|
|
#5 |
|
Moderator
Join Date: Jun 2002
Location: ${NSISDIR}
Posts: 5,442
|
The Windows WOW64 registry reflection/redirection has changed at least 3 times. WinXP had the most basic version, then Vista added more reflected keys and in Win7 reflection was removed and keys are only redirected. See http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx for more.
This should not affect the uninstall key (in the default Windows configuration at least) but when dealing with registry issues on WOW64 you always have to remember that things might not be as they seem because you might be looking at a different key in Regedit etc. IntOp $PostCount $PostCount + 1 |
|
|
|
|
|
#6 |
|
Senior Member
|
Anders,
Yeah I understand that part. But how does $INSTDIR get defined? Isn't that at runtime? Because I think that is where the problem is laying right now. It calls the uninstaller via $instdir\uninst.exe rather than the $R0 as it caused additional problems with something else, iirc (since tht line was commented out) |
|
|
|
|
|
#7 | |
|
Moderator
Join Date: Jun 2002
Location: ${NSISDIR}
Posts: 5,442
|
The installer basically does something like this:
Quote:
IntOp $PostCount $PostCount + 1 |
|
|
|
|
|
|
#8 |
|
Senior Member
|
In the uninst label I do this:
PHP Code:
|
|
|
|
|
|
#9 |
|
Senior Member
|
So that being said, is it better to use $R0 again?
Or something like: StrCpy $0 $r0 and then ExecWait '$0 _?=$INSTDIR' $R1 because it is weird how that one thing isn't being populated and far as i can tell, it had always worked in the past. |
|
|
|
![]() |
|
|||||||
| Thread Tools | Search this Thread |
| Display Modes | |
|
|