build 32 and 64 bit builds in Installshield - installshield

I need to build a setup.exe for a 64 bit machine in Installshield installscript project.
I am trying to do this in Installshield 2013
Is this possible?

If you are building an MSI file you can't do this:
http://blogs.msdn.com/b/heaths/archive/2008/01/15/different-packages-are-required-for-different-processor-architectures.aspx

Related

Prerequisite condition for VC++ x86 runtime

I added VC++ 64 bit runtime prerequisite to my InstallShild project. File is downloaded from Microsoft page: https://aka.ms/vs/17/release/vc_redist.x64.exe
and has the following description: Microsoft Visual C++ 2015-2022 Redistributable (x64) - 14.34.31931.
When this file is executed, it creates/updates the following Registry entry:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\vc\Servicing\14.0\RuntimeMinimum, Version, 14.34.31931. Accordingly, I added the following Prerequisite Condition to InstallShield:
Everything is OK for x64. Now I want to add VC++ x86 runtime to the same project. File https://aka.ms/vs/17/release/vc_redist.x86.exe, description: Microsoft Visual C++ 2015-2022 Redistributable (x86) - 14.34.31931.
When this file is executed, it creates/updates the following Registry entry:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\DevDiv\vc\Servicing\14.0\RuntimeMinimum, Version, 14.34.31931. I would like to make Prerequisite Condition by the same way, as for x64. But this doesn't work, because x64 installer actually creates two registry entries:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\vc\Servicing\14.0\RuntimeMinimum and HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\DevDiv\vc\Servicing\14.0\RuntimeMinimum, filling them by the same way. So, if x64 VC++ Runtime is already installed, x86 WOW6432Node condition doesn't work.
How can I solve this problem? The project has InstallScript type, so I can override installation events, if necessary. InstallShield version is 2018.
Try with the following registry keys:
For 64-bit setup,
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\X64
Value: Version
For 32-bit setup,
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x86
Value: Version
Condition type should be:

Compiling x64 DLL on x86

I am working on a wrapper DLL using the technique described here: http://www.codeproject.com/Articles/17863/Using-Pragmas-to-Create-a-Proxy-DLL
I was able to successfully build it on Windows Vista 32 bit using Microsoft Visual Studio Express 2010. But I need to build the DLL for Vista x64 on my i386 machine.
Is it possible using MSVC express 2010?
Do I need a 64 bit copy of the DLL I intend to wrap?
Thanks
I just wanted to say thanks for the unexplained downvotes. Very helpful for a newbie.
Anyway I fixed this myself by installing the Windows 7.1 SDK. That in itself took
significant effort. I had to uninstall the Visual C++ Runtime 2010 before it would
install for some reason.
Then I had another problem: linker errors about uuid.lib when I tried to the build the DLL
I had to tell the linker where to look with /LIBPATH:"C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64"
That solved the problem

How to build with v90 platform toolset in VS2012 without VS2008, using Windows SDK?

I use Visual Studio 2012 and this is the only version of Visual Studio I have installed. I need to build certain C++ projects with the v90 platform toolset (of Visual Studio 2008), but I can't install Visual Studio 2008.
I understand it is possible to use the v90 platform toolset by installing Windows SDK 7.0. How exactly is it done? If I simply use the web installer of 7.0 SP1, I still don't see v90 as one of the possible platform toolsets.
It is possible, but apparently requires some maneuvering and will not support building MFC applications. The following assumes that VS2012 update 4 is installed, but neither VS2010 nor VS2008 are installed.
Download the x86 DVD of SDK 7.0 SP1 (GRMSDK_EN_DVD.iso). Mount the ISO or extract its contents, and manually install the MSI files from the following folders under the Setup folder:
WinSDK (this may fail, it's ok)
WinSDKBuild
WinSDKInterop
WinSDKTools
WinSDKWin32Tools
vc_stdx86
vc_stdamd64
winsdk_intellidocs
WinSDKIntellisenceRefAssys
WinSDKNetFxTools
Download the x86 DVD of SDK 7.1 (GRMSDK_EN_DVD.iso). Mount the ISO or extract its contents, and manually install the MSI files from the same folders listed above (except winsdk_intellidocs, which doesn't exist).
Go to C:\Program Files (x86)\Microsoft Visual Studio 9.0. Copy the following files from Common7\IDE to VC\bin:
msobj80.dll
mspdb80.dll
mspdbcore.dll
mspdbsrv.exe
Now you should be able to choose the v90 platform toolset in Visual Studio 2012 and build with it.
Explanations (and sources):
Individual MSI installation is based on the second workaround from this connect report.
The requirement for both 7.0 and 7.1 is based on this question (both VS2010 and VS2008 are required to use v90 in VS2012!). SDK 7.1 is not needed if you have VS2010.
DLL/EXE copying requirement is based on yet another question. If you do not copy them, you will see error MSB6006: "CL.exe" exited with code -1073741515.
In addition to this answer I want to add that
You can install SDK 7.0 simply by running setup, there is no problem with it.
You can install SDK 7.1 by running setup, if you remove Microsoft Visual C++ 2010 Redistributables first and fix following registry values:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client]
"Version"="4.0.30319"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full]
"Version"="4.0.30319"
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Client]
"Version"="4.0.30319"
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full]
"Version"="4.0.30319"
You can (and probably should) restore these values to whatever they originally were after installation is complete.
Do not forget to install KB2519277 after this, it updates compilers in SDK 7.1 to SP1.
You don't need to copy any dll. MSBuild uses
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VC#ProductDir
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0\Setup\VC#ProductDir
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VS#ProductDir
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0\Setup\VS#ProductDir
to set up paths. It's probably wise to fix them to point to "C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\" and "C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\" as it might be useful elsewhere in build process.
Same goes for version 10.0 if you plan to use Windows7.1SDK toolset.
Use WindowsSdkVer.exe to set current SDK to 7.1 to defeat cryptic error in Microsoft.Cpp.x64.Targets(63,5) about missing unnamed required file. If the tool gives you error, then set these values manually:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows#CurrentInstallFolder
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows#CurrentInstallFolder
to point to newly installed SDK. The tool needs some registry keys from Visual Studio installation to work properly, but there are many and I'm not sure which are important.
Reboot. None of the above asks you to, but without reboot I got errors when trying to build a project.
As an aside, SDK7.1 adds v100 toolset, but it won't work, saying something about Could not find WindowsSDKDir variable from the registry. This is because v100 actually requires SDK7.0A which comes with Visual Studio 2010 and is not available separately. Windows7.1SDK toolset is the one which utilises VC2010 compilers if you need them.
Microsoft.Cpp.Win32.*.props files have a lot of relevant stuff if something fails in build system.
One addition/update for VS2013 to Yodans answer:
My working setup:
VS2013 has to use VS2010 libs
Using WinSDK 7.1 (Yodans 2.) build tools (v100) in VS2013
clean install, uninstalling everything mentioned in the sdk release notes (can be downloaded at http://www.microsoft.com/en-us/download/details.aspx?id=8279 under category Details)
Microsoft Windows SDK for Windows 7 (7.1) (the Windows SDK core-component files)
Application Verifier
Debugging Tools for Windows
Windows Performance Toolkit
Microsoft Help Viewer 1.0
Microsoft Visual C++ 2010 Redistributable
Microsoft Visual C++ 2010 Standard Edition
Additionally removed all .NET and VC++ related MS Software (not tested if necessary)
choosing Windows7.1SDK as Platform Toolset in VS2013
error MSB6006: "CL.exe" exited with code -1073741515
cl.exe uses msobj100.dll, mspdb100.dll, mspdbcore.dll and mspdbsrv.exe
Added to PATH C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE
Build works and binary is usable ( So now its tested Yodan ;-) )
My mistake:
copied files in 7. above to C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin (Yodans 3.), believing this dir is in PATH, but it was not!
So better do as sugested by Yodan and tested by myself in 8. above
p.s. same answer is solving this problem:
Visual Studio 2013: CL.exe exited with code -1073741515

InstallShield LE doesn't install MS Visual C++ 2010 Redistributable Package (x86)

I'm using InstallShield Limited Edition to create installer (setup.exe) for my project. My project requires Microsoft Visual C++ 2010 Redistributable Package (x86), and I want include this redist into my setup.exe. I do it in Redistributables view in my InstallShield project - just selecting Microsoft Visual C++ 2010 Redistributable Package (x86) as InstallShield Prerequisite component and setting 'Extract From Setup.exe' property for it.
I decided to test my setup.exe on XP box and Win7 box. For this purpose I deleted Microsoft Visual C++ 2010 Redistributable from these boxes (via Control Panel->Uninstall program) and tried to install my app. My expected result is - c++ redist will be installed before my project installation.
But I have different results: I have no problem when installing it on XP box: it installed c++ redist first and my app then. Works as it should be!
But when I launched setup.exe on Win7 box it didn't install c++ redist - it only installed my app. Can anyone explain this?
Btw, Microsoft Visual C++ 2010 Redistributable Package (x86) had size ~11 mb and version 10.0.40219 on my Win7 box before I uninstalled it. Now I downloaded it from here http://www.microsoft.com/en-us/download/details.aspx?id=5555, installed manually and... I see that now it has version 10.0.30319 and size only ~918 kb. So, I wonder again, what's going on?
This may be related to the operatingsystemconditions configuration in the Installshield pre-requisite file Microsoft Visual C++ 2010 Redistributable Package (x86).prq located in the Installshield SetupPrerequisites directory.
The operatingsystemconditions section specifies which versions of Windows, including service packs, 32/64 bits, the redistributable file should be installed on.
See http://daniellang.net/installshield-and-microsoft-visual-c-2010-redistributables/ for some more details.
You've installed the SP1 redist, but there is an updated version with a MFC security update.
http://support.microsoft.com/kb/2565063

Packaging Visual Studio 2012 Redistributable into an InstalLShield setup

I have developed a software with visual studio 2012 using the c++ language. I use Installshield 2010 Premier to build my setup project. I am trying to package the visual studio 2012 redistributable into the setup package so that it installs automatically. Is there a way to do this? I cannot find the redistributable in question on the redistributable page while configuring the installer.
Can I add it manually?
Any help would be appreciated.
P.S. Currently, I'm just manually running the redistributable I downloaded from Microsoft page before I run the setup.
Update to read first:
You need to install IS2012 SP1 to get these prereqs. See:
InstallShield 2012 Spring Service Pack 1 is Now Available!
Otherwise the PRQ XML can be found at:
x86 PRQ XML On Saturn
x64 PRQ XML On Saturn
Additional background information:
InstallShield comes with a prerequisite editor that you can use to define your own PRQ files. For a tutorial see:
Using InstallShield 12 to Install .NET Framework 3.0
Note: The PRQ schema hasn't changed in a long time. You can frequently install a trial version of InstallShield on a VM, find a new/updated PRQ and then back port it to your 2010 environment. Add it, build and test and it usually works fine. Also sometimes InstallShield will have expansion packs and addon installers to add these without rereleasing the product.
Use the redistributable merge modules (*.msm files) to integrate them into your setup. If you have Visual Studio installed you can find them at Program Files (x86)\Common Files\Merge Modules .

Resources