首页
社区
课程
招聘
[原创]调试MSI安装过程中的custom action
发表于: 2016-3-1 16:37 6389

[原创]调试MSI安装过程中的custom action

2016-3-1 16:37
6389

MSI 安装
1.MsiExec.exe /i xxxx.msi
释放文件等等,这一步基本上可以windbg挂着去run就可以调试
2.MsiExec.exe /v
启动windows installer 服务
3.MsiExec.exe -Embedding A25DA879DA962D53E49A1012DAC5F7D9 E Global\MSI0000
其实我们比较看重的是这一步骤,这是MSI去执行custom action的步骤。也是我们在工作中比较常用的地方。当然,我们有很简单的方法去调试,再custom action需要断点的地方加上messagebox,然后attach上去调试。
然而大多数情况下,我们会遇到产品已经release出去,在特定的机器和特定的case下有问题,需要用已打包好的msi文件去调试,那么再去修改code加上messagebox,很有可能达不到重现问题的条件。或者,也许你想看看别人的msi到底对注册表等等做了那些处理,所以下面介绍的,是直接windbg调试这一步骤的方法。

不幸的是,这一进程是windows installer去启动的,这一时机是很难去捕获的。个人试过IEFO的方法,但是总是会有“The Windows Installer service could not be accessed……..”的error dialog。纠缠许久,不能解决只能放弃。
当然,开发的过程中,这种方法也会为你节约很多时间,只需要断点下来是,替换掉custom action的模块就可以继续调试,而不需要每次一个小改动都要去生成MSI,然后等待Message box, attach的体力活。
然而,windbg还是给我们提供了许多便利。看完许多废话,其实有用的只是一条命令而已。

步骤如下:
1.        System权限或者Admin 权限,启动windbg, 并attach到windows installer服务进程
2.        输入.childdbg 1的命令
3.        等待断点,开始调试。
BTW:
个人去admin权限启动windbg的方式去调试,会把系统整的奇卡无比,然后用system权限去启动的话,丝滑流畅。

附上个人工作中常用的一个自己写的小工具源码。RunAsSystem.
步骤:
vs2013 release build
Admin run “datsservice.exe install”
RunAsSystem.exe “windbg路径” or 其他可执行文件。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (1)
雪    币: 667
活跃值: (327)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
支持楼主,谢谢分享经验呀
2016-3-2 11:48
0
游客
登录 | 注册 方可回帖
返回
//