Here's the requirement:
1. One single installation file. (aka. setup.exe) All the other files include the required dlls and msi itself must embedded in this setup.exe.
2. Frameless UI, which the pure msi doesn't support.
Firstly, we are using pure msi to provide the installation GUI, but then we found it's not support the frameless GUI. So we want to keep the single file and make our own frameless GUI.
Anyone has any ideas?
You'll need to impliment an external UI handler.
You might find some of the links on http://blogs.msdn.com/windows_installer_team/archive/2005/07/23/442584.aspx as a helpful starting point.
Related
I am not familiar with Windows installer builder tools, other than having a conceptual understanding of them. I have a hopefully simple installer-file-wrapping-problem to solve where i would need some advice from people who know this field better than myself:
I have a vendor provided vanilla Setup.exe installer along with a custom config.dat file.
I can run the installer with "Setup.exe /S" which picks up the config.dat file in the same directory for a silent install just as I need it.
I now want to wrap both files into a single file self executable installer "CustomSetup.exe" that if launched with "Run as Administrator" silently unpacks the two files into the same directory, runs the silent install command line "Setup.exe /S" and deletes the previously unpacked files and directory afterwards. Effectively giving me a single-file one-click silent installer with custom settings from the vendor provided vanilla installer.
What is the simplest, most straight forward and elegant way of getting this done?
Most InstallShield/WIX/Windows Installer Tools tutorial- and documentation-pages i could find want to take me to an elaborate installer-project-building-academy first, something that is certainly useful for developers needing to learn how to build complex installer projects, but feels like overkill for just getting this seemingly simple thing done. Is there a lean way to do this? Many thanks in advance for your help.
For the record, I have found the answer to my own question.
Running the Windows on-board IExpress (as Administrator) easily produced exactly what I was after. Just type "Iexpress" into the command search box, run as Administraor and fidlle with it. Alternatively, this is someones Video explaining it https://www.youtube.com/watch?v=vXZyq0cMuKI
I notice that every time I rebuild my InstallShield project the file PROJECT_ASSISTANT\Interm\ISSetup.dll is updated. As described in the documentation, it executes InstallScript custom actions.
I always deliver a single exe PROJECT_ASSISTANT\SINGLE_EXE_IMAGE\DiskImages\DISK1\Setup.exe to my customers, and the installation runs smoothly without this ISSetup.dll.
So is this ISSetup.dll packed into the single setup.exe somehow? If not, how the Installscripts are executed on client machine?
I would like to tell you the project type (be a Basic MSI, InstallScript, or InstallScript MSI), but since I build my project from command-line (InstallShield 2012 SpringSP1 SAB) and am not able to open the project in GUI mode to view the properties pane, I don't know how to get this information from an .ism (XML format) file.
I forget the exact mechanics of where the file is included in each project type that may use it (sometimes it's directly in setup.exe, sometimes it's indirect). Regardless, ISSetup.dll is always the compiled InstallScript engine (the C++ part), and often has the compiled setup.inx (InstallScript part) "streamed" onto it. Something (perhaps setup.exe, perhaps a Windows Installer custom action) calls into it to run InstallScript code that we provided, or that you wrote.
So the short answer to the original question is: yes.
To answer the unasked questions, the Interm folder is an intermediate folder used for staging some of the files that get built into setup.exe or into the .msi file, and ISSetup.dll definitely receives updated compiled script code for each build of a Basic MSI or InstallScript MSI that includes custom actions.
I believe the ISSetup.dll is compiled into the MSI's binary table and extracted as part of the launching of the msi via msiexec.exe - at least for Basic MSI files.
The setup.exe wrapper probably contains the whole ISSetup.dll - perhaps statically linked or embedded somehow. Michael Uhrman (Installshield developer) will probably comment if he sees this question.
UPDATE:
I found a version of this ISSetup.dll file, see a screen shot from Dependency Walker below. In addition to the exported functions seen, there are also COM register and unregister methods exported (DllRegisterServer, DllUnregisterServer, DllCanUnloadNow, DllGetClassObject). The f-functions must be the various Installscript functions. The first 5 functions must be related to Installscript MSI.
I need to create a custom installer that supports French, German, Spanish, Italian, Polish, Russian, English, chinese (mandarin script), more languages to be added for a .net based application.
This installer also needs to be able to check whether the target system has got adobe installed or not. If the target system doesnt have adobe or is a lower version than required then it should install from the CD. if it does then bypass that step.
The installer also needs to prompt the user to browse to any location on the system to pick up a file which will be place in the installation folder.
The installer also need to register this program in the add remove programs list.
Is there a custom installer that can do all of these tasks or do I need to build an application from scratch for it?
Thoughts... ideas???
Thanks for your time...
Short answer : Yes, all those things can be done, most of them easily.
WiX or NSIS are probably your two best free options. NSIS uses a plugin architecture for most of it's functionality, but the plugins are text-files, so you should have no problems downloading them. However, if your company is "funny" about licensing, then check the relevant licenses for each plugin early on - most are completely free to use, but Legal can fail to understand this sometimes...
Please find below pointers to the relevant sections of the documentation, so you can get it downloaded (I feel your pain by the way!)
Language Support
See Docs
Allow user to select a file and copy it
You will need the InstallOptions plugin. This allows you to create an extra page in your install wizard which can prompt for information. It allows various controls, one of which is a file explorer control (search for FileRequest in the link).
To copy the file, you cannot simply use the File instruction, as that extracts and copies files from the installation media, and will not act on files on the target computer.
Instead, you will need a plugin - e.g. this wrapper around the WinAPI. Alternatively, use the CopyFiles instruction.
Register program in Add/Remove programs
This is standard in both WiX and NSIS.
Detect Adobe is installed.
NSIS has the ability to check if registry keys exist, or named files exist, which are the two normal methods of detecting installed programs.
I would like to know how can I detect if help file is contained in setup file for windows platform application (msi or exe). Is there any method to get this information without installing the software first ?
Of course setup file can be created by many setup makers like innosetup, installshield and so on. So I wonder if there is some universal method to solve this.
For an MSI based install it would be very easy. For example you can use the Microsoft.Deployment.WindowsInstaller interop via C# to open the MSI as an InstallPackageClass then access it's Files collection to see if it contains the file you care about.
For a Non-MSI based install, there is no universal way and in most cases, no way period. See, that's kind of the point of MSI: to have a standards based package rich in meta data to be able to see what it's doing. When you do some proprietary script driven installer you lose that openness.
If it's a MSI file, open it up using Orca, and you can view file names.
For both of them, you should be able to do an administrative install, which would extract the files, but not register anything. Depending on where the exe came from, doing an administrative install changes, since each vendor(installshield, innosetup, etc) has their own way to run an administrative install.
for a MSI it's simply
msiexec /a <msi_filename>
For an exe you'll have to look up how to pass the /a argument.
Using Installshield 2010 and Basic MSI project.
I have an exe that was previously installed by my installer. That exe needs to be running during an installer upgrade. Is there a way to guarantee that the installer won't try shutdown the process? Basically, I would like the behavior to be : If file doesn't exist, lay it down, otherwise ignore it.
I have made the exe a key file in a component and set it 'Never Overwrite' to true. Should this give me my desired behavior ?
Never Overwrite will be used by future installers to determine if the file will be overwritten or not by other MSI packages. Basically, this attribute should have been set for the installed EXE.
A good approach is to use a file search to determine if the EXE exists. The search property can then be used to condition the new component.
Windows Installer doesn't automatically close applications, but it does show a FilesInUse dialog which offers this option to the user.