原文 利用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。

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

  1. 利用WIX制作安装包(2)

    原文 利用WIX制作安装包(2) 这一篇文章将为大家介绍如何使用WIX自定义UI.上一篇文章我们讲过WIX为我们提供了五种安装界面.每种安装界面都是由不同的Dialog组成.在这里我们挑选一种比较常用 ...

  2. 利用WIX制作安装包(1)

    原文 利用WIX制作安装包(1) #installation 下载最新版本的WIX toolset 并安装DOWNLOAD Wix toolset V3.5之后的版本已经可以集成到visual stu ...

  3. Wix制作安装包

    Wix制作安装包,找起资料来很费劲,记录一下: Product.wxs,该文件只能制作出msi形式的安装包,不能做到自动检测framework. <?xml version="1.0& ...

  4. 【原创】VB6.0应用程序安装包的生成(Setup Factory 9.0制作安装包的方法)

    VB6.0应用程序安装包的生成,利用其自带的打包工具生成的安装程序很简陋,一点不美观:如果想让自己的应用程序安装的时候显得高大上一点,本教程提供使用Setup Factory 9.0制作安装包的方法. ...

  5. 循序渐进做项目系列(5):制作安装包,谁人都可以!——VS制作安装包简明教程

    一开始让我做安装包的时候,其实我是拒绝的.因为我根本就不会做安装包.查了资料之后,我很懵,很晕,很乱,因为不清晰,不简明,不直白.然而经过一番彷徨的挣扎,我终于发现:制作安装包,谁人都可以!故挥狼毫, ...

  6. 使用Qt installer framework制作安装包

    一.介绍 使用Qt库开发的应用程序,一般有两种发布方式:(1)静态编译发布.这种方式使得程序在编译的时候会将Qt核心库全部编译到一个可执行文件中.其优势是简单单一,所有的依赖库都集中在一起,其缺点也很 ...

  7. VS 制作安装包小窥

    难得忙里偷闲,看到有关VS制作安装包,按下文小试一把,还行,比不上Installshield. 首先在打开 VS2010    >   文件 >新建项目 创建一个安装项目  XXX 在“目 ...

  8. vs2015 制作安装包额外需要安装的软件VSI_bundle

    vs2015 制作安装包额外需要安装的软件VSI_bundle 下载地址:http://files.cnblogs.com/files/sdner/VSI_bundle.rar

  9. [转载]如何用Visual Studio制作安装包

    原文地址:如何用Visual Studio制作安装包作者:蓝羽幽游 环境:Microsoft Visual Studio 2010 语言:C# 构架:.NET Framework 2.0 解决方案名称 ...

随机推荐

  1. 安装alien,DEB与RPM互换

    http://blog.csdn.net/sidely/article/details/40181653

  2. PDF编译出现错误解决的方法————————【Badboy】

    额 今天  在编译PDF时发现使用了一下STL中的z数值极限居然编译只是. return GetRangeConstraint(value <= std::numeric_limits::max ...

  3. php正则怎么使用(最全最细致)

    php正则怎么使用(最全最细致) 一.总结 一句话总结: 1.正则中的行定位符是什么? 解答:(^与$) 2.正则中什么时候用行定位符? 解答:如"^de",表示以de开头的字符串 ...

  4. INT_MIN与溢出

    隔了好久没更新了,由于我在学习PL和编译器/解释器的知识. 挺好奇这方面的,由于没有学过相关的课程.所以学起来有点吃力,进展缓慢.所以导致没啥可写的. 今天看到这么一段话: 32位的int型的取值是2 ...

  5. C#基础readonly 与const

    readonly 与 const readonly是运行时常量,const是编译期常量(在编译过程中已经把使用该值的都用值替代,不分配内存)readonly灵活性高,const效率高 readonly ...

  6. NOIP模拟 MST - 类次小生成树

    题目大意: 给一张无向图,可以将图中权值为v的边修改为k-v,求修改后的最小生成树边权和. 题目分析: 最小生成树的环切定理:任何非树边一定比对应树链上的所有边权值要大.否则我们可以将链上最大的树边删 ...

  7. AndroidMainifest标签使用说明3——&lt;activity-alias&gt;

    格式: <activity-alias android:enabled=["true" | "false"] android:exported=[&quo ...

  8. 查询系统状态 内存大小 cpu信息 设备负载情况

    1.1 查看内存状态 /proc/meminfo里面存放着内存的信息 查看内存命令(包括虚拟内存swap): free -h (低版本系统可能不支持-h) 或者 free -m (以mb单位显示) a ...

  9. 讨论IM软件企业知识—会谈session的概念,附连到IM软件层次图

    session通常当今计算机领域,IM软体session.老IM那里有两个:第一个是逻辑层session参与者管理会议.新闻列表,会话类型等:有协议层session.主要代表client随着serve ...

  10. Arcgis api for javascript学习笔记 - 不改变默认端口(6080)情况下,外网访问Arcgis Server 发布的接口

    Arcgis Server发布的地图服务地址默认端口号是6080,假设本机上只对80端口做了外网映射,在IIS中部署了一个网站绑定了80端口,那么网站中某个页面通过arcgis api for js ...