cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Not applicable

file path in registry on 64 bit machine being changed automatically

Hi.

I have made a 32 bit msi package and installing it on a 64 bit machine.

I need to get a folder path from the registry.

The registry value is located in

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Forefront Identity Manager\2010\Synchronization Service]

and the value is
"Location"="C:\\Program Files\\Microsoft Forefront Identity Manager\\2010\\"

when i get the value and use it later on in the installer it shows up as
C:\Program Files (x86)\Microsoft Forefront Identity Manager\2010\

Thats not what I want, I want the real value not a modified one.

How can I prevent this from happening?

I really hate when programs is intelligent enough to know what you want.

Hope someone have an answer.

Best regards,
Jens
Labels (1)
0 Kudos
7 Replies
KathyMorey
Level 10

I'm a little confused. Are you saying that the value returned in the AppSearch is modified? Or is the value getting modified later throught some other action?
0 Kudos
lam1278
Level 6

jenskjensen wrote:
Hi.

I have made a 32 bit msi package and installing it on a 64 bit machine.

I need to get a folder path from the registry.

The registry value is located in

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Forefront Identity Manager\2010\Synchronization Service]

and the value is
"Location"="C:\\Program Files\\Microsoft Forefront Identity Manager\\2010\\"

when i get the value and use it later on in the installer it shows up as
C:\Program Files (x86)\Microsoft Forefront Identity Manager\2010\

Thats not what I want, I want the real value not a modified one.

How can I prevent this from happening?

I really hate when programs is intelligent enough to know what you want.

Hope someone have an answer.

Best regards,
Jens



If you are installing to the property [ProgramFiles] on a 64-bit machine, the actual product WILL BE installed to C:\Program Files (x86) -- there is an actual folder on the machine for 32-bit apps and that is where you product is more than likely installed on a 64-bit machine.

I don't understand why on a 64-bit machine you would want C:\Program Files instead of C:\Program Files (x86)
0 Kudos
Not applicable

Hi.

Trying to explain it in more depth.

I'm installing a 32 bit program on a 64 bit machine.

when installing i'm searching the registry for a path to a 64 bit program already installed on the system,

The path is located here [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Forefront Identity Manager\2010\Synchronization Service] and when looking at it in regedit it shows up as C:\Program Files\Microsoft Forefront Identity Manager\2010\ (Because its a 64 bit program) the value is saved in a property.
Then i'm writing the value into a config xml file.
When looking at the xml file on the target system it shows up as C:\Program Files (x86)\Microsoft Forefront Identity Manager\2010\

It has changed and I don't have any transforming of the result. Reads it and then writes it to the config file.

Hope this explains my problem

Best regards
Jens
0 Kudos
lam1278
Level 6

I thought it was YOUR program that you were writing to / reading from that specific registry entry... sorry for the confusion.


Did you happen to check the following registry entry to see if IT exists also?

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Forefront Identity Manager\2010\Synchronization Service]

It may be that both registry entries actually exist on your 64-bit system and the System Search is actually reading from the above location which may actually have the "C:\Program Files (x86)" directory in it. It sounds like a service that you are looking for, so there may be a 32-bit and a 64-bit service installed on that machine..

If your system search is setup to use the "Default" registry processing, it will by default, look in the above location because you are a 32-bit app running on a 64-bit machine.

However, if you explictly tell the System Search to look in the 64-bit portion of the registry, it will read the other registry location that you want to look for:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Forefront Identity Manager\2010\Synchronization Service]



I hope this helps...
0 Kudos
Not applicable

Hi.

Thanks for helping me 🙂

I'm looking in the 64 bit part of the registry and its the only entry.in the registry. 😞
0 Kudos
KathyMorey
Level 10

Have you looked at a log file to determine where it is getting changed? If you look at the AppSearch action you should be able to tell if is being retrieved properly, and if you do a search on that property name you should be able to see if it is getting re-written somewhere.

I assume you are using IS XML handling; if the property is being retrieved properly and not being changed by Windows Installer, then it must be the IS XML dll that is doing it and you'll have to go to their Support people to find out if you can prevent it. (Or write your own dll to do the XML handling...)
0 Kudos
Christoph
Level 8

when runnin a 32-bit installer on a 64-Bit system, all paths that are retrieved via the systemsearch and contain 'Program Files' in their path location... they are automatically changed by installshield into 'program files (x86)'... if you want it or not.

Workaround solution I use: define the registry search in the script instead of using the APPSEARCH. A path property set via the script is left untouched.
0 Kudos