1、创建安装程序
打开VS2008,新建->Project,选择Other Project Deployment->Setup and Deployment,选择SetupProject模板。取名SetupTest。
创建项目之后一个什么都没有的安装包就做好了。安装包一般会在Program Files创建一个安装文件,然后在文件夹中放一些文件。
右键点击SetupTest,点击菜单View->File System,在File System视图中,可以看到三个文件,一个是Application Folder,User’s Destop, User’s Programs Menu。Application Folder文件夹中的内容会输出到Program Files下的安装目录下。所以我们可以往这个文件夹中添加内容。右键点击Application Folder,点击Add->File菜单,就可以添加文件到这个文件夹中。当然安装程序一般安装的是可执行程序。
在同一个项目中,我们新建一个winform项目取名WinformTest。编译WinformTest项目。
右键点击Application Folder,点击Add->Project Output…,在弹出的对话框中,选择WinformTest项目,在列表中选择Primary output。点击Ok,这样我们就会把WinformTest.ext添加到Application Folder文件中。
安装程序一般还会在桌面和启动菜单中添加快捷方式,我们可以在Application Folder中,右键选择Prmary output from WinformTest(Active),创建一个快捷方式,然后把快捷方式,复制到User’s Desktop和User’s Programs Menu中去。好现在安装程序可以安装了。如果在安装目录中已经存在相同的文件,则安装程序不会进行覆盖。
2、一些基本的配置
点击SetupTest项目,然后打开属性面板(和通过右键,然后点击属性菜单是不同的)。有很多属性可以配置,比如ProductName(产品的名称),Subject(主题),Title等,设置这些属性,在安装的时候就可以看到一些自己设定的名称。
那安装路径如何确定的呢?
还是视图->文件系统,选择Application Folder,然后打开属性面板,在DefaultLocation配置项中就是配置安装路径的。可以对这个目录进行修改,这是默认的目录。
3、自定义动作
在上面的那个项目中添加一个类库,取名Install,添加一个Installer Class。这个累中就可以添加一些自己的代码。我们可以重写Install方法
public override void Install(IDictionary stateSaver)
这个方法会在文件复制后,也就是Application Folder中的文件复制到安装目录后执行。
我们也可以重写Uninstall方法
public override void Uninstall(IDictionary savedState)
Unistall方法会在安装目录下文件被删除前执行。如何你在Install复制了一些目录到其他文件夹中,卸载时这么文件是不会删除的,那么就可以通过Unistall方法来删除。
关联Install类到SetupTest装项目中
编译Install项目,在SetupTest->View->File System视图中,点击Application Folder,安装上面的步骤把Install的项目主输出添加到Application Folder中。
右键点击SetupTest->Add->Custom Actions,我们可以看到四个文件夹Install(安装时执行的自定义动作),….,Unistall(卸载时执行的自定义动作)。
右键点击Install文件夹,点击Add Custom Action菜单,在弹出的对话框中,选择Application Folder,然后选择Install项目的主输出。这样当执行安装程序是就会执行Install方法中代码。同理如果想执行Uninstall方法,那就把Install项目主输出添加到Uninstall文件夹中。
当我们在Install和Uninstall方法中些代码时,想获得一些参数,比如安装文件的路径。
在自定义动作的Install文件下,点击Primary output from Install(Install的项目主输出),打开属性面板,可以看到一个CustomActionData配置项,可以在这个配置项中传递参数,并可以在Install方法中获取。比如传递安装目录,那在CustomActionData添加/tardir="[TARGETDIR]/"文字,也可以同时传递安装程序目录(也就是SetupTest.exe文件的路径) /sourcedir="[SOURCEDIR]/" /tardir="[TARGETDIR]/",注意两个参数之间是有空格的,而且后面比如带/符号,前面必须带/符号。其实TARGETDIR,就是目录路径选择框的名称。当我们自己创建一个对话框时,会有很多输入框,每个输入框都有名字,我们也可以可以通过这种方式把用户输入的数据传递过去。
在Install方法中获取参数
m_Targetdir = this.Context.Parameters["tardir"].ToString();
4、调试
想进行调试需要把Install项目的调试符号添加到Application Folder文件夹中。
安装项目也是可以进行调试的,当然SetupTest是不需要调试的,因为它只是复制文件,如果想看到SetupTest包含了哪些文件,可以通过右键点击SetupTest,点击属性菜单。在Package files下拉框中选As loose uncompressed files,点击确定,然后编译SetupTest项目,在输出目录中可以看到需要的文件。那我们主要是调试Installer类中的方法,比如Install方法。如果想调试Install方法,可以在Install方法的第一行的代码出写
MessageBox.Show(“debug”);
这句代码会弹出一个对话框。安装程序在执行到这句代码时会弹出一个对话框,这时我们回到Visual Studio,点击debug->Attach a Process…,选中Show processes from all users和Show processes in all sessions显示所有的进行,在进程列表中我们可以看到多个msiexec.exe进程,找到MessageBox所在的进行,然后点击附加,这样就可以进行调试了。