利用visual studio 2005制作安装文件

手头的MWI(Message Waiting Indicator)是一个VB.NET写的程序,用来和Exchange2007的Unified Messaging 功能配合使用,简单的说,它实现当用户有未接语音电话转入邮箱时(这个是Unified Messaging的功能),自动监测用户的邮箱,如果发现有未读的语音留言,使IP电话的灯亮。如果用户听了留言,不再有未读语音邮件,使IP电话灯灭。

按照上面领导的意思,把原本的console application改写成windows service。涉及到了制作安装包,下面就把我的制作中大体遇到的问题写下来,留个念想。

一.如何制作安装程序

1.新建一个安装工程:

“File”=>"New Project"=>"Setup and Deployment"=>"SetupWizard"


我把工程名字Setup1改为RS-MWI,点击ok。

出现“Setup Wizard”窗口,在第二步时,选择默认的“Create a setup for a Windows application";
第三步时把自己要安装的程序添加进去,我添加了MWI.exe MWIBG.exe 和配置文件MWICofnig.xml,这些文件被放入"Application Folder"中(其实这一步不添加也没有太大关系,可以以后再添加);第四步点击finish。

2.把配置文件安装到系统目录里

接下来,出现了工作区。因为程序安装后的服务读取配置文件是从%WINDIR%/system32/目录下,而上面添加的MWIConfig.xml会安装到程序所在的目录中,显然不符合要求,选中"Application Folder"中的MWIConfig.xml,把其属性中的Targetname改为MWIConfig-Example.xml。

然后,选中"File System on Target Machine"新增加一个"System Folder",把MWIConfig.xml文件添加进这个System Folder中,安装后,配置文件就在system32目录下了。

3.自定义动作

点击“Solution Explorer”中的RS-MWI,可以看到其上面出现一排图标,点击"Custom Actions Editor"。
这时在工作区,可以看到"Custom Actions(RS-MWI)"标签下,有四个文件夹,分别是:"Install""Commit""Rollback""Uninstall"。
选择"Install"文件夹,右键"Add Custom Action",把MWI.exe和MWIBG.exe添加进来;然后选择“Uninstall”文件夹把MWI.exe和MWIBG.exe也添加进来。

4.把依赖的程序也打入包中,自动安装

例如MWI.exe程序是VB.net开发的,所以其依赖与.NET Frame 2.0。又因为MWI调用了MWIToolkit.dll,这个dll文件是使用vc++写的,所以它依赖于vcredist_x86。还有如果windows installer版本太低,也可能会造成问题,我们用的是WindowsInstaller-KB893803-V2-X86.exe。
如果要正确安装运行RS-MWI,就必须在目标系统上先安装dotnetfx.exe,vcredist_x86.exe,WindowsInstaller-KB893803-v2-x86.exe这三个文件。

这样做,首先把需要的.exe文件添加入“Application Folder”中,然后在“Solution Explorer”下选中RS-MWI,右键,选择“Property"。弹出的RS-MWI Property Pages窗口里点击"Prerequistites...",
选择需要预先安装的组件。这里我们选中".NET Framework 2.0","Visual C++ Runtime Libraries (x86)","Windows Installer 3.1"。然后选择“Download prerequisites from the same location as my application”,点击ok。

5.编译模式
有两种,一种是debug,一种是release,不用多解释了吧。这个设置在“build”菜单下“Configuration Manager”


二.遇到的问题


我在编译完后,到目标系统上安装,总提示MWIToolkit.dll注册失败,错误HRESULT-2147010895。
在目标系统上使用regsvr32.exe MWIToolkit.dll注册依然失败,提示:
”LoadLibrary("MWIToolkit.dll")失败-由于依你公用配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题"
可是我明明把依赖的vcredist_x86.exe安装上了。
后来利用depends.exe终于找到原因,MWIToolkit.dll编译时选择的编译模式是debug。这么以来,它依赖的dll文件有
c:/windows/winsxs/x86_microsoft.vc80.debugcrt_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c/MSVCR80D.DLL
而vcredist_x86.exe安装的vc++运行库形式是:%WINDIR%/WinSxS/x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c/MSVCR80D.DLL
看到了吧,没有debug的。
重新编译MWIToolkit.dll为release,再重新制作安装程序包,就没有问题了。

猜你喜欢

转载自blog.csdn.net/geggegeda/article/details/4220264