之前都使用NSIS,写脚本。后来换个公司,只使用InstallShield和VS2008。无奈学习了下。IS只使用Express版本,拖拽一下就搞定,也没写过脚本。基本还是不大懂得比较复杂的定制,有机会用到再说了。

倒是VS2008的,前两天客户提了个古怪的要求,要将一个LOGO文件,放到msi外面,以便他修改,安装时,再把这个logo文件考到安装目录里去。VS2008做的安装程序,一向我只会常规的模式,这种要求看来非要自己动手添加点动作,到现在我也不知道怎么给安装程序添加脚本,还是不能?琢磨几天,看来只有在custom action里添加点私货,来完成这件事了。

 图1

在工程目录视图上可以看到一排按钮,如图1,红框中就是custom action按钮了。进入这个界面,vs2008一共预先定义了4个阶段,安装,提交,回滚,卸载。在这四个阶段可以加入我们自己的动作。加入的方式是,运行你自己的exe,dll,vbs,js。它只支持这四种格式的文件。后两种脚本我不会,我想这两种脚本也主要是为web安装程序准备的吧。exe太扎眼,所以我选择了在install阶段使用dll(如图2)。也就是说,我要在这个dll中把logo文件从原始目录考到安装目录下。

图2

这件事本来很简单,我也不想复杂化。因此,最关键的地方就在于,怎么把这两个目录作为参数,传递给dll。又不知道写脚本,貌似msdn上也没有相关的详细参考。还真是难住了。网上搜,msdn查,一步一步开始。
首先是建立dll工程,我在msdn上看到一段例子,当即拷贝下来建立为我的工程了。具体代码就不拷贝了,在主题Error Handling in Custom Actions下有一段dll的代码,包括我后面调试也用来弹出messagebox,还挺好使。
接下来就是传参数了,查看msdn发现了custom action的属性里面有一个CustomActionData,这个属性是可以传参数的(如图3)。在dll中通过msi的API获得。msi打头的api有不少,还真不了解都是干嘛的。介绍也不甚详细,例程更是少。知道这里可以传参数,但是以什么格式,怎么取得,一无所知。

 图3

继续网上搜,所获甚少,多是web安装的。只能从中提取些有用信息。继续返回msdn去查找。最开始我用getmodulepath这样的api,返回的是msiexec的路径,哦,我想,安装程序是由msiexec启动的,dll也在其中,所以返回的是这个路径。然后我又查找msi的api,找到了msiGetSourcePath,msiGetTargetPath这样的函数,但是收获不大。这俩函数一直不能返回路径,乱码,原因不明。当我看到他们的第2个参数需要传入一个路径时,我估计这条路很困难。
仔细研究 CustomActionData Property主题下的内容。再仔细一个一个查看msi的API,发现了有MsiGetProperty这么个函数。CustomActionData也是属性,通过它能否取得传入的参数呢?果然,当CustomActionData 赋值为/name="[TARGETDIR]\"时,获得了安装路径。直接赋值 [ProductName],可以获得程序名称。看来这条路可行。现在是要传入两个参数了。还是在MSDN上有写, Each name must be unique and have only one value. Multiple values must be separated by a single space: /name1=value1 /name2=value2.就是这种形式:/name1=value1 /name2=value2.这里还有一个问题,就是value的写法,直接写字符串是不行的,因为地址是动态的。必须是宏或者代号之类的。例如,安装目标路径是TARGETDIR,那么安装程序所在的路径呢?不知道,继续查msdn,没有发现有这样说明文档。如果我要别的参数呢?用户的选择,或者系统路径,用户路径,桌面路径,等等怎么办?没有这样一个比较全面的说明,还真是麻烦。然后网上搜索,找了几个,试了好多次,终于发现,SourceDir,注意,大小写不能错。这个就是安装程序所在的路径了。

参数有了,dll中顺利得到两个路径,如图4,剩下的就是对字符串整理下,得到你要的路径就可以了。这个问题就算解决了。

图4

如果没有详细的文档,还是脚本来的直接。

转载于:https://blog.51cto.com/timetraveller/533168

VS2008 安装部署工程的小问题相关推荐

  1. vs2008安装部署软件过程

    1.在 Microsoft Visual Studio 2005的"文件"菜单上,单击"新建",然后单击"项目". 2.在"新建项 ...

  2. WordPress小程序安装部署教程之小程序配置(2)

    微信支付 申请微信商户并审核通过后,在产品中心 - APPID授权管理关联小程序商户下(申请关联后,需要在小程序后台接受申请) 配置小程序 登录小程序后台,转到开发 - 开发设置 - 服务器授权域名, ...

  3. vs2008生成安装部署文件的步骤

    1 新建安装部署项目 打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点击确定. 2 安装向导 关闭后打开安装向导,点击下一步,或者直接点击完成 ...

  4. 在线答题考试小程序源码系统 支持在线刷题+考试二合一+安装部署教程

    分享一个在线答题考试小程序源码系统,支持在线刷题+考试二合一,程序包含前后端和详细的安装部署教程,可以用来给学生刷题,给员工刷题,给政企员工刷题,万能通用版适合任何行业在线刷题及考试. 系统功能一览: ...

  5. 教小白白Hue安装部署

    1. 写在前面 工欲善其事,必先利其器,网上教程往往让你安装一半丈二和尚摸不着头脑 本文包含安装部署及遇到的错误排错思路,其他方法安装遇到错误亦可能可在本文找到答案 本文安装环境CentOS 7 安装 ...

  6. 社区拼团商城小程序源码+完整前后端+安装部署教程

    分享一个最新的社区拼团商城小程序源码+完整前后端+安装部署教程,功能支持界面diy+团长+供应商+拼团+秒杀+优惠券+菜谱+积分+群接龙+充值+预售+配送等,整合线下社区资源,模式丰富. 系统有总后台 ...

  7. 安装部署中的数据库打包和快捷方式启动浏览器

    前一段时间,因为工作的需要,学习了一些.net的部署.在打包的过程中遇到了几个问题:<?XML:NAMESPACE PREFIX = O /> 1.  数据库脚本打包,如何修改Web.co ...

  8. mysql数据实时同步:Canal安装部署、kafka安装、zk安装、mysql安装、Canal Server+Canal Client HA,Canal+mysql+Kafka,相关验证(学习笔记)

    目录 Canal安装部署 1.1. 服务器准备 1.2. 设置主机名并配置hosts 1.3. 免密设置 1.4. 设置ntp时间 1.5. 关闭防火墙 1.6. 关闭selinux 1.7. 安装J ...

  9. vs2008安装boost库

    vs2008安装boost库 2010年06月10日 首先我在晚上找到了很多的说明:我先一一罗列在下 ************************************************* ...

最新文章

  1. pycharm小白使用指南
  2. 作业 20181016-10 每周例行报告
  3. RabbitMQ调试与测试工具-v1.0.1 -提供下载测试与使用
  4. Windows下完成端口移植Linux下的epoll
  5. 如何在页面插入一个跟随页面移动的盒子_word版面设计技巧:文档页面背景的设置方法...
  6. Windows 8连接*** 691错误解决办法
  7. JLink v8固件丢失修复教程
  8. javascript 询问_JavaScript解释引擎
  9. [Hive] Hive表压缩
  10. c# 注册了Ctrl+空格为热键,捕获后发送Ctrl+Shift
  11. dom4j的操作(增删改查)
  12. 我国光伏行业开始向东走
  13. java 调用 axis2_java调用WebService服务 axis2实现方式
  14. 嵌入式linux程序加密,基于嵌入式操作系统uClinux实现网络安全加密系统的设计
  15. Validform表单验证时可以为空,否则按照指定的格式验证
  16. 《深入理解计算机系统》读书笔记1
  17. show partitions 分区查询
  18. 放大电路中耦合电容的选择
  19. 解决selenium版本过时 和 selenium - 元素定位
  20. python画螺旋式正方形

热门文章

  1. 【服务器环境搭建-Centos】tmpfs,【转载】
  2. Flink的Table和SQL的基本API
  3. 工业大数据可视化面临的难点有哪些
  4. 线性回归和广义线性回归
  5. 汽油与消费需求问题的MonteCarlo求解方法
  6. 在单链表写入一组数据代码_第5章 第1节 链表 - osc_x8s7voop的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. php自动获取节气对应的年月日_php 根据时间获取二十四节气,返回json
  8. mysql 直方图_MySQL直方图
  9. mysql消息订阅与发布_消息发布与订阅
  10. android6.0原生brower_android原生browser分析(二)--界面篇