cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
bobmcm
Level 5

Installshield 2009 Installscript Support for 64 bit

I would like to get some clarification about the 64 bit support for installscript installations. I was told by support, and have read here that although the Installscript engine is 32 bit, it will write files and register them properly on 64 bit machines. When I try and install a 64 bit driver on a 64 bit box, I am unable to get my drivers to install to the system32 directory. They always go into the syswow64 directory causing the self-registration to fail. It is a 64 bit DLL, and needs to be placed in the system32 directory. Even the self-registration code recognizes this as it keeps looking for the file in the system32 directory.

I have tried Winsysdir, Winsysdir64, windir/system32. I have also tried making an installation that only installs 64 bit components, but still the driver file goes into the syswow64 directory. How do I get IS2009pro to put the files in their proper location. I have seen reference to this enable/disable WOW64FSREDIRECTION, but this only seems valid if you are copying the files manually from code. Do I have to copy the files manually to get IS to write the files to the proper location? Any suggestions on how to make this work properly in the 64 bit environment would be apprecated.

Robert McMahan
Futuresoft, Inc.
Labels (1)
0 Kudos
(9) Replies
bobmcm
Level 5

I have added code to the installing and installed events to disable and enable wow64fsredirection. This allowed me to get the file into the system32 directory where it belongs, but it still will not self-register with an error that it cannot find referenced file, pointing to the "c:\windows\system32\dcagent64.dll", but the file does exist. I can call regsvr32 on the dll from a command prompt, and it will register properly.

I have also tried calling regsvr32 via Installscript, LaunchAppandwait, and it calls the 32 bit version of regsvr32 instead of the 64 bit version, again failing the registration.

I'm wasting alot of time trying to get this to work, and as far as I can see, the 64 bit support that is advertised on the website does not exist. Here is the information from the Acresso website.

InstallScript 64-Bit Support
InstallScript installations can also install and register 64-bit files. less
In addition to Windows Installer (MSI) installations, InstallScript installations can also install and register 64-bit files. Interaction with 64-bit system folders and the 64-bit registry are fully supported as well. This functionality is supported for both Intel and AMD 64-bit platforms.


Detect whether the setup is running on a 64-bit system, and whether it is Intel or AMD.
Install files to 64-bit Program Files and Common Files locations.
Limited support for installing files to 64-bit Windows System Folder.
All general registry functions now support accessing 64-bit specific registry locations.
Mark components to installed or not installed on 64-bit Intel or 64-bit AMD platforms.
Install and register 64-bit self-registering files.

Where is the 64 bit support? :mad:
0 Kudos
Not applicable

Have you tried launching regsvr32 from C:\Windows\System32\regsvr32.exe from LaunchApplication? That should ensure that you're actually launching the proper 64-bit version of regsvr32.exe and not the 32-bit version.

I don't know that the InstallScript engine fully supports launching 64-bit self-registering DLLs. Perhaps someone else may have more familiarity with that.

As always, you will want to ensure that the 64-bit to 32-bit redirection functionality is disabled for this.
0 Kudos
srweisner
Level 2

I'm battling with similar 64-bit issues and I've made some progress but I can't say I'm finished. I don't know for sure that this will work for you, but to resolve a similar problem, I did the following in my InstallScript:
- Disable (WOW64FSREDIRECTION)
- Use LaunchAppAndWait to start WINSYSDIR64 ^ "REGSVR32.EXE"
- Enable (WOW64FSREDIRECTION)

Hopefully this will help you out.
0 Kudos
bobmcm
Level 5

I attempted that on my installation, and it still continued to launch the incorrect version of Regsvr32. I ended up changing over to BasicMSI installations, and writing the appropriate registry entries manually instead of using the self registering code. These installations were very simple (1 file, a few dependancies, and a couple of registry entries), so it was not to big a deal to work around the issue, but I have some much more complicated ones that are not going to be so easy.
0 Kudos
K0NFUZIUS
Level 5

Hi srweisner,

thanks a lot that helped me out.
I tried to register a 64 Bit dll in a 32Bit installation in Basic Msi. The registration didn't worked so I decided to call regsvr32 from an Custom Action and that worked perfectly.

#define REGSVR64			"\""+WINSYSDIR64^"REGSVR32.EXE"+"\""
#define REGSVR64RegParam "/s \""+INSTALLDIR^"x64"^"Lib.dll"+"\""
#define REGSVR64UnRegParam "/u /s" + " \"" + INSTALLDIR^"x64"^"Lib.dll"+"\""
function register64BitPropertyHandler(hInstall)
begin
Disable (WOW64FSREDIRECTION);
LaunchAppAndWait( REGSVR64, REGSVR64RegParam, NOWAIT );
Enable (WOW64FSREDIRECTION);
end;
function unregister64BitPropertyHandler(hInstall)
begin
Disable (WOW64FSREDIRECTION);
LaunchAppAndWait( REGSVR64, REGSVR64UnRegParam, NOWAIT );
Enable (WOW64FSREDIRECTION);
end;


Thanks for your hint

Jörg
0 Kudos
Ivan_mysammy
Level 4

K0NFUZIUS wrote:
Hi srweisner,

thanks a lot that helped me out.
I tried to register a 64 Bit dll in a 32Bit installation in Basic Msi. The registration didn't worked so I decided to call regsvr32 from an Custom Action and that worked perfectly.

#define REGSVR64			"\""+WINSYSDIR64^"REGSVR32.EXE"+"\""
#define REGSVR64RegParam "/s \""+INSTALLDIR^"x64"^"Lib.dll"+"\""
#define REGSVR64UnRegParam "/u /s" + " \"" + INSTALLDIR^"x64"^"Lib.dll"+"\""
function register64BitPropertyHandler(hInstall)
begin
Disable (WOW64FSREDIRECTION);
LaunchAppAndWait( REGSVR64, REGSVR64RegParam, NOWAIT );
Enable (WOW64FSREDIRECTION);
end;
function unregister64BitPropertyHandler(hInstall)
begin
Disable (WOW64FSREDIRECTION);
LaunchAppAndWait( REGSVR64, REGSVR64UnRegParam, NOWAIT );
Enable (WOW64FSREDIRECTION);
end;


Thanks for your hint

Jörg


Could you let me know where you put the custom actions calling these two functions in execution sequence? Thanks
0 Kudos
K0NFUZIUS
Level 5

Hi Ivan,
I have put the custom actions for the registration after 'InstallExecute' and the unregister after 'Remove RegistryValues'

Cheers
Jörg
0 Kudos
Kelter
Level 10

that would suffice if i were trying to register a 64bit dll. as it is, however, i'm trying to load and use the dll.
0 Kudos
harid38
Level 5

thanks for the help, that saved me alot of time
0 Kudos