• 自制安装包集成.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,不做纯粹的伸手党哦!

  • 相关阅读:
    馒头国家标准公布:应是圆形或椭圆形(图)
    完全用C#写的SharpOS 0.0.1版发布
    c#操作c/c++的Dll文件
    研究发现GSM信号影响睡眠
    解决QQ与360的终极解决方案
    分享一个参数检查的类
    问题是问题,可是出路呢?
    读《码斗士修炼之路》有感
    我看博客园之争论
    关于ORM的一点思考
  • 原文地址:https://www.cnblogs.com/linyijia/p/2945468.html
Copyright © 2020-2023  润新知