一)。创建部署项目 1. 在 " 文件 " 菜单上指向 " 添加项目 ", 然后选择 " 新建项目 ".
2. 在 " 添加新项目 " 对话框中,选择 " 项目类型 " 窗格中的 " 安装和部署项目 ", 然后选择 " 模板 " 窗格中的 " 安装项目 ". 在 " 名称 " 框中键入 setup1.
3. 单击 " 确定 " 关闭对话框。
4. 项目被添加到解决方案资源管理器中,并且文件系统编辑器打开。
5. 在 " 属性 " 窗口中,选择 PRoductName 属性,并键入 信息管理系统 .
二)。将 主程序 项目的输出添加到部署项目中
1. 在 " 文件系统编辑器 " 中,选择 " 应用程序文件夹 ". 在 " 操作 " 菜单上,指向 " 添加 ", 然后选择 " 项目输出 ".
2. 在 " 添加项目输出组 " 对话框中,选择 " 项目 " 下拉列表中的 " 你的程序 ".
3. 单击 " 确定 " 关闭对话框。
4. 从列表中选择 " 主输出 " 和 " 内容文件 " 组,然后单击 " 确定 ".
三)。创建安装程序类
1. 在 " 文件 " 菜单上指向 " 新建 ", 然后选择 " 项目 ".
2. 在 " 新建项目 " 对话框中,选择 " 项目类型 " 窗格中的 "Visual Basic 项目 ", 然后选择 " 模板 " 窗格中的 " 类库 ". 在 " 名称 " 框中键入 installDB.
3. 单击 " 打开 " 关闭对话框。
4. 从 " 项目 " 菜单中选择 " 添加新项 ".
5. 在 " 添加新项 " 对话框中选择 " 安装程序类 ". 在 " 名称 " 框中键入 installDB.
6. 单击 " 确定 " 关闭对话框。
7. 详细代码附后。
四)。创建自定义安装对话框
1. 在解决方案资源管理器中选择 "setup1" 项目。在 " 视图 " 菜单上指向 " 编辑器 ", 然后选择 " 用户界面 ".
2. 在用户界面编辑器中,选择 " 安装 " 下的 " 启动 " 节点。在 " 操作 " 菜单上,选择 " 添加对话框 ".
3. 在 " 添加对话框 " 对话框中,选择 " 许可协议 " 对话框,然后单击 " 确定 " 关闭对话框。
4. 在 " 添加对话框 " 对话框中,选择 " 文本框(A)" 对话框,然后单击 " 确定 " 关闭对话框。
5. 在 " 操作 " 菜单上,选择 " 上移 ". 重复此步骤,直到 " 文本框(A)" 对话框位于 " 安装文件夹 " 节点之上。
6. 在 " 属性 " 窗口中,选择 BannerText 属性并键入:安装数据库。
7. 选择 BodyText 属性并键入:安装程序将在目标机器上安装数据库
8. 选择 Edit1Label 属性并键入:数据库名称:
9. 选择 Edit1Property 属性并键入 CUSTOMTEXTA1
10. 选择 Edit1Value 属性并键入:dbservers
11. 选择 Edit2Label 属性并键入:服务器名:
12. 选择 Edit2Property 属性并键入 CUSTOMTEXTA2
13. 选择 Edit2Value 属性并键入:(local)
14. 选择 Edit3Label 属性并键入:用户名:
15. 选择 Edit3Value 属性并键入:sa
16. 选择 Edit3Property 属性并键入 CUSTOMTEXTA3
17. 选择 Edit4Label 属性并键入:密码:
18. 选择 Edit4Property 属性并键入 CUSTOMTEXTA4
19. 选择 Edit2Visible、Edit3Visible 和 Edit4Visible 属性,并将它们设置为 true
五)。创建自定义操作
1. 在解决方案资源管理器中选择 "setup1" 项目。在 " 视图 " 菜单上指向 " 编辑器 ", 然后选择 " 自定义操作 ".
2. 在自定义操作编辑器中选择 " 安装 " 节点。在 " 操作 " 菜单上,选择 " 添加自定义操作 ".
3. 在 " 选择项目中的项 " 对话框中,双击 " 应用程序文件夹 ".
4. 选择 " 主输出来自 installDB(活动)" 项,然后单击 " 确定 " 关闭对话框。
5. 在 " 属性 " 窗口中,选择 CustomActionData 属性并键入 "/dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3] /pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]\"".
附:/targetdir="[TARGETDIR]\" 是安装后的目标路径,为了在 installDB 类中获得安装后的路径,我们设置此参数。
六)。打包时加入卸载功能:
方法一:
1. 在打包项目中添加文件 msiexec.exe(一般可在 c:\windows\system32\ 下找到)
2. 在文件系统视图中选择应用程序文件夹,在 msiexec.exe 上按右键,选择创建快捷方式,重命名快捷方式为 " 卸载 ".
3. 更改此快捷方式的 Arguments 为 "/x {产品 id}", 产品 id 的值为打包项目的 ProductCode 属性值。
方法二:(推荐)
1. 先生成安装包,记下 ProductCode(选择解决方案资源管理器根目录如 setup1, 再查看属性标签,不是右键中的属性),下面要用到
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
3. 将控制台程序 BIN 目录的 exe 文件加入到打包程序文件中,在程序组创建 uninst.exe 的快捷方式
installdb.vb 类,要添加引用 system.configuration.install.dll :
using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;
using System.Reflection;
using System.IO;
using System.Data;
using System.Data.SqlClient;
namespace install
{
/// <summary>
/// Installer1 的摘要说明。
/// </summary>
[RunInstaller(true)]
public class Installer1 : System.Configuration.Install.Installer
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
public Installer1()
{
// 该调用是设计器所必需的。
InitializeComponent();
// TODO: 在 InitializeComponent 调用后添加任何初始化
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose(bool disposing)
{
if(disposing)
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 – 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
private string GetSql(string Name)
{
// // 调用 osql 执行脚本
//
// System.Diagnostics.Process sqlProcess = new System.Diagnostics.Process();
//
// sqlProcess.StartInfo.FileName = "osql.exe";
//
// sqlProcess.StartInfo.Arguments = String.Format(" -U {0} -P {1} -d {2} -i {3}db.sql", this.Context.Parameters["user"], this.Context.Parameters["pwd"],"master", this.Context.Parameters["targetdir"]);
//
// sqlProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
//