zoukankan      html  css  js  c++  java
  • 自制安装包集成.net framework 4.0

    最近自己用wpf写了一个安装包,本以为这样就OK了,可是人家提出,要集成 .net framework 4.0,问题来了,wpf是基于.net framework 4.0,没有.net framework 4.0怎么运行,

    苦苦研究几天,都没什么结果,有的人说用C++写一个,我觉得比较靠谱,可惜C++我只是学了点皮毛,还没深入,还有用什么飞信框架的,Mono的感觉都不太靠谱,最后突然自己想出了一个办法,用vs安装做个外壳,把我的安装程序包装在里面,这样,没有.net framework的,他会自动提示安装.net framework,然后再自动运行我的安装程序,最后我的步骤如下

    建立一个安装项目

    1.把安装文件放入应用程序文件夹

    2.右击-视图-安装界面 把里面的子界面全部删除

    3.右击-添加-项目输出(项目看下面的解释,主要用于自动启动自己做的安装包)

    4.右击-自定义操作-安装-添加自定义操作-选择你添加到项目输出的那个项目

    5.右击-属性-系统必备-从与我的应用程序想通位置下载系统必备组件

    这样安装项目就配置好了

    接下添加上面说的项目,用于安装好 .net framework后自动启动我自己做的安装包

    1.建个类库项目

    2.右击项目-添加新项-安装文件类

    3.在类中贴入以下代码

    /// <summary>
    /// 功能是做安装项目主项目输出
    /// 实现安装过程中的一些操作
    /// 如:安装完成后启动项目
    /// </summary>
    [RunInstaller(true)]
    public partial class Installe : Installer
    {
    /// <summary>
    /// 应用程序入口
    /// </summary>
    public static void Main()
    {
    }
    /// <summary>
    /// 构造函数
    /// </summary>
    public Installe()
    {
    InitializeComponent();
    }
    /// <summary>
    /// 重写安装完成后函数
    /// 实现安装完成后自动启动已安装的程序
    /// </summary>
    /// <param name="savedState"></param>
    protected override void OnAfterInstall(IDictionary savedState)
    {

    try
    {
    base.OnAfterInstall(savedState);

    Assembly asm = Assembly.GetExecutingAssembly();
    string path = asm.Location.Remove(asm.Location.LastIndexOf("\\")) + "\\";
    System.Diagnostics.Process.Start(path + "\\a.exe");//要执行的程序
    }
    catch (Exception)
    {

    }
    }
    /// <summary>
    /// 重写安装过程方法
    /// </summary>
    /// <param name="stateSaver"></param>
    public override void Install(IDictionary stateSaver)
    {
    base.Install(stateSaver);
    }
    /// <summary>
    /// 重写安装之前方法
    /// </summary>
    /// <param name="savedState"></param>
    protected override void OnBeforeInstall(IDictionary savedState)
    {
    base.OnBeforeInstall(savedState);
    }
    /// <summary>
    /// 重写卸载方法
    /// </summary>
    /// <param name="savedState"></param>
    public override void Uninstall(IDictionary savedState)
    {
    base.Uninstall(savedState);
    }
    /// <summary>
    /// 重写回滚方法
    /// </summary>
    /// <param name="savedState"></param>
    public override void Rollback(IDictionary savedState)
    {
    base.Rollback(savedState);
    }
    }
    }

    编译成功后,用上面安装包说的,添加到安装包的项目输出,就OK了。这样安装程序只会安装。net 然后运行我自己的安装程序,嘿嘿

    但是这样安装程序,他的外壳也被安装在计算机了,不过没事,在你自己的程序卸载的时候,同时把这个外壳程序卸载掉就好了,代码如下

    Process.Start("msiexec", "/uninstall {9FDBD1ED-9792-4FD4-9963-52E5974F05A4} /quiet");

    注意:{}里面的是你外壳程序的产品编号,/quiet是静默卸载的意思,如果去掉,他会提示你是否要卸载此产品

    这东西看简单,其实真的还是用了很多自己的时间,转载的童鞋,记得保留我的连接http://www.cnblogs.com/linyijia/archive/2013/03/06/2945468.html,不做纯粹的伸手党哦!

  • 相关阅读:
    关于量子计算机的一些整理 (精心整理原创) (1)
    自然语言交流系统 phxnet团队 创新实训 个人博客 (一)
    自然语言交流系统 phxnet团队 创新实训 项目博客 (一)
    double类型保留2位小数
    main函数位置
    java中main函数解析
    关于函数声明的小知识点
    数据帧、数据包、数据报以及数据段
    chrome 常用快捷键(可以摆脱鼠标哦)
    chrome 如何利用快捷键将光标移动到地址栏
  • 原文地址:https://www.cnblogs.com/linyijia/p/2945468.html
Copyright © 2011-2022 走看看