利用WIX制作安装包(3)

利用WIX安装服务非常简单。只需要短短几句话就可以。当我们创建好一个Windows服务之后。我们在项目中创建一个Service.wxs 文件来安装服务,并且编辑代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
    <Component Id="ProductC" Guid="DE8DD064-C440-4E82-80D7-D05C98753DAF" Directory="PRODUCTC">
      <File Id="ProductCService" Source="$(var.ProductC.TargetDir)ProductC.exe"/>
      <ServiceInstall Id="ProductCServiceInstaller"
                      Type="ownProcess"
                      Name="ProductC"
                      DisplayName="ProductC"
                      Description="ProductC"
                      Start="auto"
                      Account="LocalSystem"
                      ErrorControl="ignore">
        <ServiceConfig DelayedAutoStart="no" OnInstall="yes" />
      </ServiceInstall>
      <ServiceControl Id="ProductCServiceControl"
                      Start="install"
                      Stop="both"
                      Remove="uninstall"
                      Name="ProductC"
                      Wait="yes" />
    </Component>

  </Fragment>
</Wix>

在上述的例子中我们安装了一个名为ProductC 的服务到系统。并且添加了一个ServiceControl 去控制他的行为。然后我们把这个组件关联到产品的某个Feature之后,当产品安装的时候服务就会自定安装。

然而在某些情况用TopShelf实现的服务,我们无法用WIX安装。这个时候我们需要在服务的项目中添加一个ServiceInstall.cs 文件,并添加如下代码。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;

namespace DitronicsHISvr
{
        [RunInstaller(true)]
        public class HardwareServiceInstaller : Installer
        {
                public ServiceInstaller ServiceInstaller;

                public ServiceProcessInstaller ServiceProcessInstaller;

                public HardwareServiceInstaller()
                {
                        this.InitializeComponent();
                }

                private void InitializeComponent()
                {
                        ServiceInstaller = new ServiceInstaller();
                        ServiceProcessInstaller = new ServiceProcessInstaller();

                        this.ServiceProcessInstaller.Account = ServiceAccount.LocalService;

                        ServiceInstaller.Description = "Service used to interface with Bill Validators.";
                        ServiceInstaller.DisplayName = "Ditronics HI Server";
                        ServiceInstaller.ServiceName = "DitronicsHISvr";

                        this.Installers.AddRange(new Installer[] { this.ServiceProcessInstaller, this.ServiceInstaller });
                }
        }
}

添加上述代码之后,我们就可以正常的使用WIX进行安装服务了。服务上述代码中的ServiceName和Description一定要和WIX中的ServiceName和description一致。不然会出现服务安装好了,无法启动的bug。

时间: 2024-08-08 11:32:04

利用WIX制作安装包(3)的相关文章

利用WIX制作安装包(1)

#installation 下载最新版本的WIX toolset 并安装DOWNLOAD Wix toolset V3.5之后的版本已经可以集成到visual studio,我们可以直接在vs中编写代码,并借助vs进行编译. #demo 首先打开 Visual Studio,然后选择创建WIX Setup Project. 创建完成之后的在项目中我们可以看到一个名为Product.wxs 的文件,其代码如下: <?xml version="1.0" encoding="

利用WIX制作安装包(2)

这一篇文章将为大家介绍如何使用WIX自定义UI.上一篇文章我们讲过WIX为我们提供了五种安装界面.每种安装界面都是由不同的Dialog组成.在这里我们挑选一种比较常用的界面WixUI_FeatureTree Dialog Set 来为大家介绍一下. 在WixUI_FeatureTree Dialog Set 中一共包含了如下几种Dialog. First-time install dialog sequence: - WixUI_WelcomeDlg - WixUI_LicenseAgreeme

InstallShield 12 制作安装包

目  录 一.       InstallShield安装... 2 二.       InstallShield 破解... 2 三.       制作安装包... 2 (一) 打开project... 2 (二) project助手页面... 3 1.Application Information:程序信息... 4 2.Installation Architecture: 安装包结构... 4 3.Application Files:指定安装的文件默认目标路径... 5 4.Applica

为自己编写的windows应用程序制作安装包

1 写好了一个windows程序之后如何制作安装包 这个在vs中就可以直接发布了,可以制作msi的安装包和exe的安装包. 2 window应用程序安装包做了哪些事情 rpm安装包的话,只是把相应的文件拷贝到不同的目录.那么window安装包做了什么呢? msi里面有一个table,里面是一条条的指令,windows installer会解释并执行这些指令. 它还是会把安装包里面的文件拷贝到相应的目录.关键是它除了拷贝还做了哪些事情呢? 3 安装包除了把相应的文件放到不同的目录下,还做了哪些事情

使用Qt installer framework制作安装包(不知道是否适合Mac和Linux?)

一.介绍 使用Qt库开发的应用程序,一般有两种发布方式:(1)静态编译发布.这种方式使得程序在编译的时候会将Qt核心库全部编译到一个可执行文件中.其优势是简单单一,所有的依赖库都集中在一起,其缺点也很明显,可执行程序体量较大,光Qt核心库加起来就得十多兆.(2)制作安装包发布.这种方式的原理也简单,就是将可执行程序和其依赖的库文件一起打包压缩,制作成安装包发布.制作安装包的工具挺多,今天要说的是Qt官方的安装包制作框架Qt installer framework.这个框架由Qt官方出品,广泛应用

java程序打包jre以及制作安装包

分享一篇文章: java程序打包jre以及制作安装包 传智&黑马咨询郑老师 java程序打包jre以及制作安装包Java的桌面程序写好以后只能在eclipse下运行是不可以的,还需要将程序拷贝到其他电脑上运行才可以,所以需要制作成其他电脑可以运行的文件,当然在安装有jdk的电脑上只需要将程序导出为jar文件就可以运行了,但是除了开发java程序人员的电脑上会安装jdk,其他人的电脑上不会有这个环境,所以还需要将java可运行的环境一同打包到程序中去,这样,在用户不安装jdk的情况下也可以运行.制

installshield 制作安装包中执行其他程序LaunchAppAndWait的简介

最近在研究用instanllshield来制作安装包,并进行数据的创建,掌握到installshield中的LaunchAppAndWait 函数该函数是在运行的时候,运行其他程序,并能传递参数以及是否静默运行的效果. 例如: szScriptPath =SUPPORTDIR+"\\CREATEORACLEUSER.SQL";    LongPathToQuote(szScriptPath, TRUE);    szCmdLine = DBUSER + "/" +

python制作安装包(setup.py)

1.制作setup.py from distutils.core import setup setup(name='Myblog', version='1.0', description='My Blog Distribution Utilities', author='lujianxing', author_email='[email protected]', url='http://blog.lujianxing.com', py_modules=['foo'] ) py_modules 定

使用Qt installer framework制作安装包

一.介绍 使用Qt库开发的应用程序,一般有两种发布方式:(1)静态编译发布.这种方式使得程序在编译的时候会将Qt核心库全部编译到一个可执行文件中.其优势是简单单一,所有的依赖库都集中在一起,其缺点也很明显,可执行程序体量较大,光Qt核心库加起来就得十多兆.(2)制作安装包发布.这种方式的原理也简单,就是将可执行程序和其依赖的库文件一起打包压缩,制作成安装包发布.制作安装包的工具挺多,今天要说的是Qt官方的安装包制作框架Qt installer framework.这个框架由Qt官方出品,广泛应用