目的描述:用Visual Studio 2010开发的工程,已经编译开发完成,需要将工程打包成安装包。
参考:Visual Studio 2010制作程序安装包
制作ICO图标文件的网站:比特虫在线制作ico图标
VS2010安装包制作全过程图解
(1)准备执行文件
程序编译后后生成Release 文件夹,里面有exe可执行文件。 将这个文件复制出来,运行按照提示将缺少的dll运行库都复制到这个文件夹中,直至exe运行而不报错。 (我采用的编译方法是静态编译)
(2)创建安装包工程
启动Visual studio 2010,“文件”→“新建”→“项目”,选择“其他项目类型”→“安装和部署”→“Visual Studio Installer”,然后选择“安装项目”。默认名称为“Setup1”。
(3)目标计算机上的文件系统
第2步点击“确定”后,会出现下图所示的界面。
其中:
“应用程序文件夹”:存放要打包的文件,包括exe、dll、ico等,以及其他程序运行所需文件。
“用户的‘程序’菜单”:程序安装完成后,在“开始菜单”显示的内容。
“用户桌面”:一般存放应用程序的快捷方式,即安装包安装完成后再桌面上显示的快捷方式。
(4)制作安装包
1 添加应用程序文件
将可以运行的Debug/Release文件夹下的文件拖入到“应用程序文件夹”中。
(如果Debug/Release下也有文件夹,那么需要右键单击“应用程序文件夹”,建立与之完全对应的文件夹,并将各文件夹中的文件拖入到对应的文件夹中)
2.制作程序快捷方式
右键单击exe文件,选择创建快捷方式,并根据自己的需要重命名
为快捷方式设置ICO图标:右键点击快捷方式文件,选择“属性窗口”,找到“Icon”。在这里设置快捷方式的图标。把快捷方式的图标设置成之前放入应用程序文件夹中的ico文件。
这样有图标的程序快捷方式就做完了,将
在“用户的‘程序’菜单”下添加文件夹,以程序的名称命名(例如我的项目名称是CFU,这个新建文件夹就叫"CFU")。然后将这个快捷方式文件拖入到这个新建的CFU文件夹中。
用与上同样的方式,再制作一个快捷方式,拖入到“用户桌面”文件夹下,作为桌面启动的快捷方式。
3.制作程序卸载的快捷方式文件夹
制作卸载程序,我们需要Windows自带的程序msiexec.exe
右键单击“应用程序文件夹”→“添加”→“文件”,选择“C:\Windows\System32\msiexec.exe”,将msiexec.exe添加进来。然后右键建立快捷方式,更名为“uninstall”。
右键单击该快捷方式,选择属性,找到Arguments一项,在该项中填入“/x+空格+ProductCode”(引号不要写)。
/x {5E971BBA-EB51-4C28-8785-AEA08A5B2532}
“ProductCode”可在工程属性中找到。
在第二步创建的CFU文件夹下添加uninstall文件夹,将刚刚创建的uninstall 快捷方式拖入到这个文件夹中。
4.修改安装包属性
右键单击工程,选择“属性”。在这里你可以按照自己的需求更改一些属性。
5.修改程序默认安装目录
右键单击“应用程序文件夹”,选择“属性窗口”,可以看到如下图所示。
“DefaultLocation”一项即为默认安装目录,包含三部分“ProgramFilesFolder”、“Manufacturer”、“ProductName”。你可以删除“Manufacturer”以使程序安装时,略去建立Manufacturer目录。
(5)编译生成
菜单栏中选择 生成 下面的第三项,生成安装包程序。
生成成功后项目文件夹中会出现下面两个文件,两个都是可以运行的安装包程序:
可能出现的问题: 警告: 应将“msiexec.exe”排除,原因是其源文件“C:\Windows\System32\msiexec.exe”受到“Windows 系统文件保护”。
解决的方法:1.不管这个警告,安装包运行后uninstall 快捷方式仍然可以正常的卸载程序(我就是这样的)2.如果不行使用第二种方法:(参考VS2005打包时加入卸载功能)
2.1先生成安装包,记下ProductCode,下面要用到
2.2用VS.net建立一个新的控制台程序uninst.exe文件
'power by: landlordh
'for 2000,xp,2003
Module uninstall
Sub Main()
Dim myProcess As Process = New Process
If System.Environment.OSVersion.ToString.IndexOf("NT 5") Then
myProcess.Start("msiexec", "/X{2B65D4A9-C146-4808-AB4B-321FB0779559}") '改为自己的ProductCode
End If
myProcess.Close()
End Sub
End Module
2.3将控制台程序BIN目录的exe文件加入到打包程序文件中,在程序组创建uninst.exe的快捷方式
(6)效果
(7)遇到的问题:制作出来的安装包正常安装后,运行出的结果与源程序结果不同。
问题分析:后来经过大量的测试后发现用安装包安装程序,如果选择安装路径在 C:\Program Files 或 C:\Program Files (x86) 文件夹下运行出来的结果就会和本来程序的运行效果不同。 甚至我把未打包的程序执行文件直接复制到 C:\Program Files也不能正常运行。 (我觉得应该是与在C:\Program Files文件夹下操作需要管理员权限有关)
解决方法:制作安装包时修改默认安装路径,而且用安装包进行程序安装时不能将和程序安装在C:\Program Files和C:\Program Files (x86) 路径之下。