如何创建 InstallShideLE 项目来安装 Windows 服务?

昨天 VisualStudio2012在 MSDN 上发布时,我下载了它。我注意到,我们在2010年的一些项目类型已经消失或有所不同。现在对我来说最大的不同是取消了 Windows Installer 项目。现在,我们被迫使用 InstallSheldLE (限量版)。这里的问题是,我编写了大量的 Windows 服务,但是我不知道如何设置 InstallSheldLE。看来,我们(我的公司)将不得不投资专业版的许可证。

有没有人找到一种方法来安装服务在安装盾 LE?在使用 Windows Installer 项目时,只需设置自定义操作。

97502 次浏览

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.

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

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.

Files section

  • 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. enter image description here
  • 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.

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.

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.

enter image description here

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

I had all sorts of problems with this.

As follows.

  1. InstallShield takes ages to download
  2. the registration process is a pain.
  3. the configuration options are confusing and overly complex.
  4. 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

enter image description here

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.

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