c# Setup Project - Make sure .EXE runs prior to MSI? - c#-4.0

I'm using a C# setup project which includes some pre-requisite software. These pre-req's appear to only get installed by the EXE and not the MSI (both EXE and MSI are created when I build my setup project.)
I can't always trust that my users will bother running the EXE as opposed to the MSI, so is there a way to force it? Perhaps some options:
My app needs Sql CE 3.5 SP2 - Is there a way that I can have the MSI install this instead of it only being installed in the EXE?
Is there a way to make my MSI detect when it's launched by the user instead of launched by the EXE?
Can I have my MSI launch the EXE installer as part of it's install process?

This is not supported by Visual Studio setup project. However, commercial setup authoring tools offer multiple solutions:
handle prerequisites from the MSI installation UI instead of using an EXE
embed the MSI into the EXE so you have only one setup file
configure the EXE to set a custom MSI property and create a launch condition based on that property; this way the MSI will stop if the property was not set by the EXE
If you want to continue using Visual Studio, a solution would be to create a launch condition for Sql CE 3.5 SP2. This way the installation will stop if Sql CE 3.5 SP2 is not installed.

Related

How to check and install another software requirement before your software in installshield?

I'm doing a software that requires from OpenVPN to work, so I'm expecting that when I launch the installer checks if OpenVPN is installed and if not launch it's installer. If the install is successful then continue with the install, if not, exits.
Also, I'd like to check if O.S is 32 or 64bits in order to launch the correct installer from openvpn.
How would be the best way to do that? I've readed about custom actions, nested installations, chainers, etc... but I'm newbie in this and I don't know where to start.
I'm working with Visual Studio 2012 with Installshild plugin.
Create "BootStrap" application (.exe) and add as prerequisite, what is running before you install starts. You also can check box ( not show in prerequisite list) and you Bootstrap app will be not in PreReq,. dialog

How to convert .msi file for windows 10 UWP apps

I'm working in windows 10 UWP cordova application and my client wants setup as .msi. How could I convert my .appxbundle to .msi?
Is there any proven option to create windows 10 UWP app package as .msi file?
There is no direct way to create msi file.
But you can side load your app. You can find at the end of this article
Packaging UWP apps how to sideload app package. You should run with Powershell file Add-AppDevPackage.ps1 and follow instructions.
Probably, you can create some exe file that could copy files to machine and run this script in Powershell

Uninstall a .exe on uninstall setup(.exe) created using Install sheild

I created a Windows form setup using install shield.
Is it possible to stop other services (ex: .exe's) in my system while uninstalling setup created using install shield.
Is this possible while creating setup using Install shield or I want any scripts in my app to stop certain services while uninstalling my setup.
Service installation settings are found in the "Advanced Settings" view of each individual component if you have the right version of Installshield - I am not sure what features "light versions" have.
If you don't have an appropriate version of Installshield you can always use a VBScript or similar to stop any service you want.

Creating MSI in VS 2012

I have a website developed using VS 2012 and created an MSI (Deployment Package) using the "Install Shield Limited Edition Project" available in VS 2012. While i am trying to install this application in a Win 7 system, it is creating a new AppPool as "ASP.NET v4.0 DefaultAppPool" and installing the application with this AppPool.
But if there are any previous application installed in the same system with the application pool as "DefaultAppPool", then my application's AppPool ("ASP.NET v4.0 DefaultAppPool") is getting applied for those previously installed applications (which has "DefaultAppPool" as its application pool) too.
Is there any settings that i am missing while creating the MSI using the Install Shield? Please advise on this
If you need flexibility in IIS installation the only serious alternative in my opinion is the open source WIX toolset.
I don't have time to write a proper answer right now, but please try these two earlier posts:
Wix generate single component id for entire tree
Warning in Wix Setup
Also check this post out to get an explanation of why WiX is best for this purpose. And definitely read the section on using dark.exe to decompile an existing MSI to get a WiX source file to start with.

How do I create an InstallShield LE project to install a windows service?

I downloaded Visual Studio 2012 yesterday when it was released on MSDN. I have noticed that a few of the project types that we had in 2010 are gone or different. The biggest difference for me right now is the removal of the Windows Installer project. Now we are being forced to use the InstallShield LE (Limited Edition). The problem here is that I write a ton of Windows Services and I can't see how to setup InstallShield LE. It appears that we (my company) will have to invest in licenses for the professional edition.
Has anyone found a way to install services in InstallShield LE? When using the Windows Installer project, you just set the custom actions.
For Visual Studio 2012 & InstallShield LE, do the following:
Run through the InstallShield project assistant and add the primary output of your service to the Application files section.
After you are done with the project assistant, double click the "Files" item under step two of the setup project.
Right click on the primary output of your service, and go to properties.
Click the "COM and .NET Settings" tab, and place a check in the "Installer Class" checkbox.
Click Ok
Now, once you build and run your install, your service will show up in the Windows Services snap in.
Note that this assumes you added a "Project Installer" to your service project (Right click on the service design sheet and click "add installer"). I can confirm this work on Windows 8 with Visual Studio 2012 / InstallShield LE.
I've recently installed VS 2012 with Install Shield LE. At first I kept getting a ISEXP -5036 internal server error after a build (this was after setting up a ISLE project and running through the Install Shield Project Assistant). Eventually I found out that it was trying to create the MSI in the DVD-5 media type which is where it was failing. For some reason, creating the solution again from scratch somehow recognizes to only build to the CD_ROM and SingleImage media types which works.
Anyway to rectify the 5036 error, click the Build tab in VS 2012 (top menu), select configuration manager and you should see that your IS setup file is selected on the DVD-5 configuration. Change this to CD_ROM and click close. Once you build/rebuild it will complete with no IS 5036 error.
While using the installer class checkbox may work for some instances, you may experience the following error:
Error 1001.The specified service already exists
Here is an excerpt from this link on how to resolve this issue:
For Error: Error 1001.The specified service already exists
This error will occur if the component installing a .NET Service is
incorrectly configured with ".NET Installer Class" set to Yes. The
method to install a .NET Service is to use Component\Advanced
Settings\Services view, not the ".NET Installer Class" setting.
Making definitions in the Component\Advanced Settings\Services view
creates entries in the Windows Installer ServiceControl and
ServiceInstall Tables. These entries are used by the Windows
Installer "InstallServices" action to install the Service.
If your project is .NET, then try then you can use the ServiceProcessInstaller class with InstallShield LE.
To get it to work with InstallShield, you have to go into the InstallShield "files" tree and right click on your file. Then check the checkbox for "Installer class" on the "COM and .NET settings" tab.
I have gotten it to work, but I've had problems on some OS's like Windows 2008R2. Your mileage may vary.
Here is an example: http://www.codeproject.com/Articles/14353/Creating-a-Basic-Windows-Service-in-C
I had all sorts of problems with this.
As follows.
InstallShield takes ages to download
the registration process is a pain.
the configuration options are confusing and overly complex.
the accepted solution on this thread is a hack and it doesn't always work - see 1001 in the documentation - essentially you need to get through the paywall to get the right configuration options to install a windows service.
Solution for me as mentioned elsewhere - was to abandon InstallShield
Very easy from that point.
Edit: Update - install the latest version from here https://wix.codeplex.com/releases/view/115492 for vs 2013 / 2015
Visual Studio setup projects are back in VS 2013 as a visual studio extension.
https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d
Please update your solution and projects to VS 2013. If you are still in VS 2010, you are probably better off by upgrading directly to VS 2013.
My experience with Installsheild LE is that it is very quirky but once you figure out the tricks, it is easier to use. However, I think that the limited edition is a way by Microsoft and Flexera to sell the fully featured edition. In other words, first we pay Microsoft a lot of money for Visual Studio and then their partner (in crime) more for Installsheild. Bad strategy which did not work out since they had to bring back the setup projects in VS 2013.
I've written about this subject:
Augmenting InstallShield using Windows Installer XML - Windows Services
Basically you create a merge module using WiX to encapsulate the service and then add it to your installshield project. ( Be sure to associate to the INSTALLDIR directory to make sure your file goes where you expect ). Build and test on a VM. Piece of cake.
I'm using VS2012 and Installshield LE Spring Edition. I did not have to use Wix.
If you encounter the error "Could not create _isconfig.xml for use with InstallUtilLib.dll", please create a folder with the same name as your setup project and inside the setup project folder.
Credits to http://community.flexerasoftware.com/showthread.php?165929-Could-not-create-_isconfig-xml-for-use-with-InstallUtilLib-dll
I just got some problems finding where to add installer as referred in the answer. So here it is how.
Double click on your service class within your Windows service Project
A blank screen with the text "To add components to your class, drag them from the Toolbox and use the Properties window to set their properties..."
Right click anywhere but on the links and select "Add Installer"
see ya
Bear in mind that all the above explanation will not help you if you plan to create later an upgrade of that setup. InstallShiled LE can't stop the running service when you upgrade. You can't do it either from Window Service Installer -> BeforeInstall event.
Wanted to put this here;
On VS 2015, when doing this, I ran into the 1001 error upon installation repeatedly.
Answer on this page explained that on the newer versions (anything past 2012), apparently you need to explicitly leave the installer class option unchecked, and then add your windows service under the Services section under Step 3 of the installer project:
Error 1001 when installing custom Windows Service

Resources