|
#1
|
|||
|
|||
Read registry
I am seeing some weird behavior reading the registry on one server, other servers seem fine but this one is strange
I am trying to find if a software package is installed and I am searching in SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstal l\ But the values returned are not from this location but from SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVers ion\Uninstall Why is the Wow6432Node being returned and I am not asking for it. The build machine is 2003 x86 server the server I am calling is 2008 R2 x64. Now this works fine on other 2008 R2 x64 servers but for some reason this one is not returning the right node. I am using the 32 version of VB8 see below Visual Build Professional 8.1 Registered to: ACE USA - Southbury, CT (1-site license) Windows Version: 5.2.3790.2.0 Install path: C:\Program Files\VisBuildPro8 HideConsole.exe version 1.0.0.0 SftPrintPreview_IX86_U_20.dll version 2.04 VisBuildCmd.exe version 8.1.0.1 VisBuildPro.exe version 8.1.0.1 VisBuildAct.dll version 8.1.0.2 VisBuildCore.dll version 8.1.0.1 VisBuildDotNET.dll version 8.1.0.0 VisBuildExt.dll version 8.1.0.1 VisBuildMisc.dll version 8.1.0.1 VisBuildMS.dll version 8.1.0.2 VisBuildMS2.dll version 8.1.0.1 VisBuildNet.dll version 8.1.0.1 VisBuildSvr.dll version 8.1.0.2 VisBuildSvr.Interop.dll version 1.0.0.0 VisBuildVCS.dll version 8.1.0.1 |
#2
|
|||
|
|||
I'm not sure. I'm guessing there's some Windows configuration setting different on that particular machine?
This articles indicates that with 2003 SP1 and later, the 64-bit view will be always accessed, unless the KEY_WOW64_32KEY flag is used (not possible from 32-bit Visual Build): http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx Although it's not entirely clear if the Windows 2003 behavior is for 2003 and later or just Win2003. So it could mean that for a Win 2008 remote machine, the first statement applies (If the client is a 32-bit application, it accesses the 32-bit registry view. If the client is a 64-bit application, it accesses the 64-bit registry view). One thing you might try would be updating the client to 2003 SP1, since the behavior changed with that version (but this wouldn't explain why it works on all remote 2008 boxes except one). Another option might be to use 64-bit Windows + 64-bit Visual Build on the client. |
#3
|
|||
|
|||
Sorry my build machine is at SP2, is there something else I can look at?
|
#4
|
|||
|
|||
I just compared one of my other 2008 server that works, the strange is that it must be looking int he same place under SOFTWARE\Wow6432Node\Microsoft\Windows.
The only difference here is that for some reason our msi are installing and storing there uninstall information to the SOFTWARE\Wow6432Node\Microsoft\Windows on the good server but the server that is an issue the MSI is installing and storing the uninstall information under the SOFTWARE\Microsoft\Windows. Is there reason that an MSI would store its uninstall information in one place or the other? |
#5
|
|||
|
|||
I believe that an MSI package can be either 32- or 64-bit, and the package type determines the registry view that is used.
http://blogs.msdn.com/b/heaths/archi...itectures.aspx Another option might be to use VBScript/WMI: http://www.google.com/search?q=vbscr...egistry+64-bit |
#6
|
|||
|
|||
In the mean time is there a way in the Read Registry action to be specific on where to look for the registry, this way I can check both location for the installer to see if it exists.
|
|
|