This website uses cookies. By clicking Accept, you consent to the use of cookies. Click Here to learn more about how we use cookies.
Turn on suggestions
Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.
- Revenera Community
- :
- InstallShield
- :
- InstallShield Forum
- :
- Install Access database engine x86 or x64 conditionnaly
Subscribe
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Subscribe
- Mute
- Printer Friendly Page
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
‎Dec 18, 2018
10:18 AM
Install Access database engine x86 or x64 conditionnaly
Hello,
I have a basic MSI project.
This project must install access database engine x86 or x64 depending on office version on the customer computer.
It is not possible to install it as a prerequisite because before install i need to know which office version is installed on the computer.
To detect office bitness, i have an installscript function that works well, but i don't know how / when to run the access database engine exe file.
Could you help me ?
Thanks in advance.
I have a basic MSI project.
This project must install access database engine x86 or x64 depending on office version on the customer computer.
It is not possible to install it as a prerequisite because before install i need to know which office version is installed on the computer.
To detect office bitness, i have an installscript function that works well, but i don't know how / when to run the access database engine exe file.
Could you help me ?
Thanks in advance.
(7) Replies
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
‎Dec 18, 2018
11:11 AM
Why do you not modify the "access database engine" prerequisite (install condition) that it installs only if MS Office 32-Bit or 64-Bit is installed.
regards
Markus
regards
Markus
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
‎Dec 19, 2018
03:04 AM
Hello Markus and thank you for your answer.
I can't do that because our product has to be installed on any office version (office 2007, 2010, 2013, 2016, 365, 2019 desktop and store versions, x86 and x64 versions).
So i can't check a registry key in order to know which office version is installed (maybe it's possible, but i don't know how).
That's why i've tried to use an installscript function which allow to detect office bitness.
Here is my installscript :
The problem with my current solution, is that i can't use the MSIProperties i have created in the prerequisite condition.
I can't do that because our product has to be installed on any office version (office 2007, 2010, 2013, 2016, 365, 2019 desktop and store versions, x86 and x64 versions).
So i can't check a registry key in order to know which office version is installed (maybe it's possible, but i don't know how).
That's why i've tried to use an installscript function which allow to detect office bitness.
Here is my installscript :
////////////////////////////////////////////////////////////////////////////////
//
// IIIIIII SSSSSS
// II SS InstallShield (R)
// II SSSSSS (c) 1996-2002, InstallShield Software Corporation
// II SS All rights reserved.
// IIIIIII SSSSSS
//
//
// This template script provides the code necessary to build an entry-point
// function to be called in an InstallScript custom action.
//
//
// File Name: Setup.rul
//
// Description: InstallShield script
//
////////////////////////////////////////////////////////////////////////////////
// Include Ifx.h for built-in InstallScript function prototypes, for Windows
// Installer API function prototypes and constants, and to declare code for
// the OnBegin and OnEnd events.
#include "ifx.h"
// Include header file for built-in functions
#include "isrt.h"
// Include header file for MSI API functions and constants
#include "iswi.h"
// The keyword export identifies MyFunction() as an entry-point function.
// The argument it accepts must be a handle to the Installer database.
prototype LONG kernel32.GetBinaryTypeA (BYVAL STRING , BYREF INT );
export prototype SetOfficeBitnessProperty(HWND);
// To Do: Declare global variables, define constants, and prototype user-
// defined and DLL functions here.
// To Do: Create a custom action for this entry-point function:
// 1. Right-click on "Custom Actions" in the Sequences/Actions view.
// 2. Select "Custom Action Wizard" from the context menu.
// 3. Proceed through the wizard and give the custom action a unique name.
// 4. Select "Run InstallScript code" for the custom action type, and in
// the next panel select "MyFunction" (or the new name of the entry-
// point function) for the source.
// 5. Click Next, accepting the default selections until the wizard
// creates the custom action.
//
// Once you have made a custom action, you must execute it in your setup by
// inserting it into a sequence or making it the result of a dialog's
// control event.
///////////////////////////////////////////////////////////////////////////////
//
// Definition de la propriété OFFICEBITNESS (permet de savoir si excel est 32 ou 64 bits)
// http://codes-sources.commentcamarche.net/forum/affich-1611755-identifier-le-type-d-un-fichier-exe
//
///////////////////////////////////////////////////////////////////////////////
function SetOfficeBitnessProperty(hMSI)
NUMBER nBinaryType;
STRING svExcelFilePath;
NUMBER nvType, nvSize;
begin
try
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
RegDBGetKeyValueEx("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\excel.exe","",nvType,svExcelFilePath,nvSize);
//MessageBox("EXCELFILEPATH \n" + svExcelFilePath, SEVERE);
if GetBinaryTypeA(svExcelFilePath, nBinaryType)>0 then
if (nBinaryType=6) then
//64 bits
MsiSetProperty(hMSI, "ISOFFICE64", "1");
else
//32 bits
MsiSetProperty(hMSI, "ISOFFICE32", "1");
endif;
else
//Rechecherche si le chemin comporte x86 ou x64 (WindowsApp)
if StrFind(svExcelFilePath,"x86")<0 && StrFind(svExcelFilePath,"x64")<0 then
MessageBox("EXCEL FILE PATH \n" + "Impossible to determine Office bitness" , SEVERE);
return ERROR_INSTALL_FAILURE;
else
if StrFind(svExcelFilePath,"x86")<0 then
//64 bits
MsiSetProperty(hMSI, "ISOFFICE64", "1");
else
//32 bits
MsiSetProperty(hMSI, "ISOFFICE32", "1");
endif;
endif;
endif;
catch
MessageBox("SetOfficeBitnessProperty Error \n" + Err.Number + "\n" + Err.Description + "\n" + Err.LastDllError , SEVERE);
return ERROR_INSTALL_FAILURE;
endcatch;
end;
The problem with my current solution, is that i can't use the MSIProperties i have created in the prerequisite condition.
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
‎Dec 19, 2018
04:24 AM
If you have a the premier edition you can use the suite project type.
What type of installer is the access database engine ? Also MSI ?
regards
Markus
What type of installer is the access database engine ? Also MSI ?
regards
Markus
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
‎Dec 19, 2018
05:16 AM
It's an exe file, but i can extract the AceRedist.msi from it.
For the suite (i don't know it yet), does it means i need to redo my installer from scratch ?
For the suite (i don't know it yet), does it means i need to redo my installer from scratch ?
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
‎Dec 19, 2018
05:51 AM
No you can just include it.
A suite project is an installer type were you can include other installer packages and create custom actions to control the conditional install of the other packages.
So you have to create a suite project, then include your msi package and also your "access database engine's" (32-Bit and 64-Bit).
In the suite you can use installscript (i.e. your function you have written) to set a condition (suite property) for which version of your "access database engine" should be installed.
The suite is perfect for such a case, but you need the premier edition.
regards
Markus
A suite project is an installer type were you can include other installer packages and create custom actions to control the conditional install of the other packages.
So you have to create a suite project, then include your msi package and also your "access database engine's" (32-Bit and 64-Bit).
In the suite you can use installscript (i.e. your function you have written) to set a condition (suite property) for which version of your "access database engine" should be installed.
The suite is perfect for such a case, but you need the premier edition.
regards
Markus
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
‎Dec 19, 2018
07:40 AM
I already have the premier edition, so i will test it.
Thank you very much Markus:)
Thank you very much Markus:)
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
‎Dec 19, 2018
07:50 AM
You will love the suite project type !
regards
Markus
regards
Markus