今天终于搞定了安装项目中的自定义操作,庆祝一下!

原创 2011年08月02日 16:01:24

在安装项目中可以执行自定义操作,包括制定一个exe dll vbs js等类型的文件。之前我们是利用一个exe,但感觉使用起来限制很多,如不方便定制,一次只执行一个exe,不方便传参数等。在.net中可以写出一个安装类来,通过override出Commit、install 、Uninstall等函数实现自定义操作。这里是一个实际的示例:


namespace InstHelper
{
    [RunInstaller(true)]
    public partial class InstHelper : Installer
    {
        public InstHelper()
        {
            InitializeComponent();
        }

        public override void Commit(System.Collections.IDictionary savedState)
        {
            base.Commit(savedState);
            string exepath;
            //注册服务
            string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
            StringBuilder sb = new StringBuilder();
            sb.AppendFormat(" create DaykeyPcManager binpath= \"{0}\\PcManagerSvc.exe\"", path);
            
            System.Diagnostics.Process.Start("sc.exe", sb.ToString());  
        
            //配置服务
            sb.Length = 0;
            sb.Append("config DaykeyPcManager type= interact type= own");
            System.Diagnostics.Process.Start("sc.exe", sb.ToString());

            //添加防火墙列外
            sb.Length = 0;
            sb.AppendFormat(" firewall add allowedprogram \"{0}\\PcManagerSvc.exe\" ABCD ENABLE", path);
            System.Diagnostics.Process.Start("netsh.exe", sb.ToString());

            //启动服务
            exepath = path + "\\start.bat";
            System.Diagnostics.Process.Start(exepath);
        }

        public override void Uninstall(System.Collections.IDictionary savedState)
        {
            base.Uninstall(savedState);

            //停止服务
            string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
            string exepath = path + "\\stop.bat";
            System.Diagnostics.Process.Start(exepath);

            //删除防火墙列外
            StringBuilder sb = new StringBuilder();
            sb.Length = 0;
            sb.AppendFormat(" firewall delete allowedprogram \"{0}\\PcManagerSvc.exe\"", path);
            System.Diagnostics.Process.Start("netsh.exe", sb.ToString());

            //删除服务
            sb.Length = 0;
            sb.Append("delete DaykeyPcManager");
            System.Diagnostics.Process.Start("sc.exe", sb.ToString());
        }

        protected override void OnBeforeUninstall(System.Collections.IDictionary savedState)
        {
            base.OnBeforeUninstall(savedState);
            //停止服务
            string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
            string exepath = path + "\\stop.bat";
            System.Diagnostics.Process.Start(exepath);
        }
        //public override void Install(System.Collections.IDictionary stateSaver)
        //{
        //    base.Install(stateSaver);
        //    System.Diagnostics.Process.Start("http://www.csdn.net");
        //}
    }
}



今天终于搞定了Qt+gsoap2.8的编译了.

第一步,下载gsoap2.8                    地址:https://sourceforge.net/projects/gsoap2/files/               ...
  • dronly
  • dronly
  • 2017年04月26日 10:12
  • 825

计算机科学-第2周 数组初练-题目

《计算机科学》课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597练习一:下面的程序,输出了52张扑克牌(如图),请补充完整程序...
  • sxhelijian
  • sxhelijian
  • 2014年03月07日 09:37
  • 2021

关于使用plugman添加自定义插件过程中遇到的坑

其实之前也转载过一篇关于使用plugman添加MyMath插件的文章,照着那篇文章的确可以添加MyMath插件,但是本人比较偏执不喜欢文章中用到的SimpleMath作为插件id,同时也想把自定义插件...
  • Yoryky
  • Yoryky
  • 2017年11月05日 19:22
  • 92

Spring管理事物应用到实际的项目中--编程式事物

接着上一篇博客来写。。。 下面来看一下如何将Spring管理事物应用到实际的项目中,为了简化实现,这里只定义最简单的模型对象和不完整的DAO和Service层接口 1、定义项目中的模型对象,这...
  • cwzhsi
  • cwzhsi
  • 2014年11月30日 11:07
  • 1324

ActiveMQ的在实际项目中的简单使用

简介 本文达到的目的是会用。 安装服务器: 官网下载win版的,也可是linux版的; 启动服务器:win版的执行activemq.bat 看看是否安装成功:http://local...
  • ljl18566743868
  • ljl18566743868
  • 2016年11月08日 15:54
  • 1021

如何在项目中直接用redis做缓存

前几天,在做JFinal项目的时候,把以前用ssm框架写的小程序登录判断session是否过期的登录demo整合到JFinal这个项目中了,因为没有用 stringRedisTemplate,所以需要...
  • qq_35357001
  • qq_35357001
  • 2017年11月07日 13:03
  • 147

终于搞定GeoTools对PostGis的操作

唉,这几天撒事情都没有做,就搞定了GeoTools的一些bug的删除。2.3版本问题比较多,上次在GT上和Richard聊天,他也对GeoTools目前的状况表示很是不满,但是为了PostGis的推广...
  • winyee123
  • winyee123
  • 2013年05月04日 22:57
  • 540

项目中的Target

本文地址:http://blog.csdn.net/zhaoyabei/article/details/45396913   转载注明出处 ...
  • qq_29846663
  • qq_29846663
  • 2017年06月19日 15:19
  • 177

今天练习了一下HTTP操作

CCScene* HttpClients::scene() { CCScene *scene = CCScene::create(); HttpClients*lay = HttpClients:...
  • for_casech
  • for_casech
  • 2016年04月28日 14:47
  • 155

项目中对数据库的操作

首先,介绍一下关系型数据库的相关知识:我们最起码我说接触的都是关系模型:由关系数据结构...
  • baby7beibei
  • baby7beibei
  • 2013年08月24日 20:03
  • 562
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:今天终于搞定了安装项目中的自定义操作,庆祝一下!
举报原因:
原因补充:

(最多只允许输入30个字)