VS Installer 多个安装包程序打包安装 .

12 篇文章 0 订阅

目前的项目开发的程序是有两个依赖程序(A,B),第三方软件公司开发好了依赖程序的独立安装包A.exe 和B.exe,目前的项目方要求将我们自己开发的主程序和依赖的第三方程

序安装包打包在一起通过我们的安装包直接将其也安装了。本人初次开发做安装包,没有经验,因为之前做的测试版安装包并没有包含第三方软件的安装,且是用VS Installer 制

作,故还是想通过VS Installer来实现这一功能。摸索了一下午,基本解决这个问题,通过 VS  Installer 提供的自定义操作来实现,一下是具体步骤:


第一步:先写个包含检测和调用A.exe和B.exe的win32程序,首先通过读写注册表来判断是否已经安装了所依赖的程序A和B。需要读的注册表项

为:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths  

或HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall  

App Paths的子键值只包括可执行程序的名称,而Uninstall 子键值 包含软件的详细信息,包括软件名称、路径、版本等,可以根据实现功能的复杂度来遍历哪个键值。主要通

过Registry类和Process类来操作,如何使用很简单,网上到处都是,这就不贴代码了。 写个流程


该程序写好之后,假设命名为SoftwareDetection ,将SoftwareDetection.exe 文件和使用到的资源文件 (如A和B的安装包程序)放在主程序的Debug目录下或其子目录下


第二步:写一个win32引导程序LeadSD,用来引导SoftwareDetection.exe,因为如果检测到本地计算机没有安装依赖程序A和B,我们将调用A和B程序的安装包,而安装包程序

是不可以几个同时安装的,但有人会问你不是使用了Process类的WaitForExist () 方法,不就是使这个安装的关联线程执行完毕后才继续主线程吗?不可能同时有两个安装进程

A和B。没错,A和B安装进程不会同时执行,在两个都触发的情况下,只会一个执行完再执行下一个。但现在是因为我们的SoftwareDetection.exe 程序是在 自定义操作 的元素

“安装”下触发,也就是说是我们的主安装进程和A或B的安装进程可能造成冲突导致 A或B的安装进程无法正确执行。因此我们需要写一个引导程序LeadSD,这样主安装程序触

发LeadSD后,LeadSD再触发SoftwareDetection.exe,LeadSD执行完毕后,主安装进程就能退出,与SoftwareDetection.exe 的执行就没有关系了,不会影响A或B的安装进

程。而LeadSD的程序就一句话:Process.Start(System.Windows.Forms.Application.StartupPath + "\\SoftwareDetection.exe");    

注:System.Windows.Forms.Application.StartupPath  是获取启动了应用程序的可执行文件的路径。

同理将LeadSD.exe文件也放在主程序的Debug目录下或其子目录下(注意路径)


第三步:在 “解决方案 ”下 安装项目上右击 “ 视图 ” 选择 “自定义操作” 




关于“自定义操作”可以去MSDN 上查看详细描述,一下摘自MSDN,简单描述下 自定义操作的各个元素的触发时间


我们在”安装“的元素上 右击 添加自定义操作 ,将我们第二步写的程序LeadSD.exe添加进来,并将其属性值InstallerClass修改为False,否则无法触发LeadSD.exe



生成安装项目,大功告成,因为包含了第三方的两个安装包所以这个安装包比较大几百兆。



 

原文地址:http://blog.csdn.net/wondergdf/article/details/7768719

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值