1. 创建一个WinForm程序
1.1 打开VS2005,新建一个WinForm项目。
1.2 做一个简单的Form,运行成功。
2. 发布程序
2.1 在项目上点右键选择“属性”,会看到该项目的属性列表。
2.2左边的目录中选择“发布”,可以看到关于发布的属性。
2.3首先是发布位置,默认是http://localhost/项目名/,也可以更改,选择 “文件系统”、“本地IIS”、“FTP站点”、“远程站点”的任意一个子目录。
2.4 安装模式和设置
1) 启动方式默认为可以脱机使用,也可以更改为只能联机。
2) 应用程序文件:点击“显示所有文件”可以看到所有应用程序文件以及bin目录下有的文件,系统会自动选择哪些该包括,哪些该排除。如果有必要,可以更改默认设置。
(这个地方有些应用程序文件是不会被自动包括进来的,要我们手动加入,如:数据库文件等,方法:将这些文件从解决方案资源管理器中加入到项目中然后设置它们的属性,复制到输出目录:选 始终复制,生成操作:选 内容,即可,这样在项目属性的发布选项中的应用程序文件中就可以看到这些文件了,里面文件的发布状态中有些文件是系统自动包括的,我们自己加进去的,在客户端中必须有的文件要把发布状态改为包括)
3) 系统必备:选择要安装的系统必备组件,安装位置可以选择供应商网站、应用程序位置或任意一个URL或UNC路径(例:http://www.microsoft.com/myapplication或//server/myapplication)。
4) 更新:可以在这里设置应用程序是否应该检查更新、在何时检查更新,指定更新的频率,指定更新的最低版本,指定更新位置等。
5) 选项:指定发布语言、发行者名称、产品名称、部署网页等发布相关的选项。
(选项中 使用".deploy"文件扩展名 可以不打勾,默认是勾的,如果不选的话在IIS服务器中要做相应的配置,将默认网站-属性-主目录-配置-映射-将扩展名为.config的映射删除)
2.5 发布版本:显示该次发布的版本号,可以修改,默认每次发布修订号自动递增。
2.6 发布:可以通过“发布向导”或选择“立即发布”。发布成功后默认打开发布页,可以从此页面安装程序。一次安装后,会自动在程序目录下加一个快捷方式。如果发布时更新选择了自动更新,那么每次打开程序前(或程序后,可设置)会自动检查是否有更新的版本,如果有,可以选择更新或跳过。如果跳过了更新,以后要更新就必须到第一次更新的发布页面手动安装更新。当然,这些功能也可以在程序中通过编程实现,在文档后面的内容中会有所提及。
3. 安装在本机或其他任意一台可以访问到发布网页的机器上打开IE,访问发布页安装程序。
4. 删除、还原
在“控制面板”中选择“添加或删除程序”,找到程序点击“删除”,可以选择还原到上一个版本的程序或是删除程序。
二、 实例
1. 新建项目“DemoClickOnce”。
1.1 新建窗体frmIE_Load,向窗体中添加几个控件
grpTop:GroupBox,txtAddress :TextBox,btnLink:Botton,webBrowser1 :WebBrowser
1.2 双击窗体,在frmIE_Load事件中输入代码:
txtAddress.Text = "http://tangtang.oracle.com.cn";
1.3 双击btnLink,在btnLink_Click事件中输入代码:
webBrowser1.Url = new Uri(txtAddress.Text.Trim());
webBrowser1.Update();
1.4 运行程序,画面如下:
2. 发布项目
2.1 设置发布相关的属性,发行者名称为candy,产品名称为clickOnce,其他全部用默认。
2.2 点击立即发布,发布成功后自动打开发布页http://candisin/DemoClickOnce/publish.htm
3. 安装
3.1 在本机或其他任意一台可以访问到发布网页的机器上打开IE,访问发布页http://candisin/DemoClickOnce/publish.htm,机器名candisin可能需要替换为IP地址或其他虚拟域名,点击安装。
3.2 成功安装后,程序会自动启动。而开始菜单中所有程序目录中会出现一个快捷方式,指向该程序。该程序的默认安装路径通常为:C:/Documents and Settings/candisin/Local Settings/Apps/2.0/0E6XTHOH.A0J/6DEOBQLW.B2K。
4. 版本更新,修改程序
4.1 向窗体frmIE_Load中添加几个控件/组件:
picReflash:PictureBox,timerUpdate:Timer,toolTipUpdate:ToolTip
4.2 增加引用:
using System.Deployment.Application;
4.3 增加成员变量:
/// <summary>
/// 更新标志:0,未检测到更新;1,已检测到更新;
/// </summary>
private string flagUpdate = "0";
4.4 增加方法:
private void UpdateApplication()
{
if (ApplicationDeployment.IsNetworkDeployed == true)
{
ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
Text = "当前版本:" + ad.CurrentVersion;
toolTipUpdate.SetToolTip(this, Text);
UpdateCheckInfo checkInfo = ad.CheckForDetailedUpdate();
if (checkInfo.UpdateAvailable == true)
{
flagUpdate = "1";
toolTipUpdate.SetToolTip(this, "检测到新的版本:" + checkInfo.AvailableVersion);
if (MessageBox.Show("检测到新的版本:" + checkInfo.AvailableVersion + ",现在需要更新吗?/n您也可以稍后手工更新到最新版本!", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
ad.Update();
MessageBox.Show("更新完毕,将要重新启动程序!");
Application.Restart();
}
}
}
}
4.5 增加或修改事件
private void frmIE_Load(object sender, EventArgs e)
{
txtAddress.Text = "http://tangtang.oracle.com.cn";
UpdateApplication();
}
private void picReflash_Click(object sender, EventArgs e)
{
UpdateApplication();
}
private void timerUpdate_Tick(object sender, EventArgs e)
{
if (timerUpdate.Enabled)
{
if (flagUpdate == "0")
{
UpdateApplication();
}
}
}
4.6 运行程序
5. 二次发布
6. 客户端更新
6.1 客户端单击打开程序时,系统会先检测是否有更新的版本,如果有,则弹出页面询问是否下载。
6.2 选择确定,则自动更新到了新版本。
6.3 此时,若再有新的更新发布,程序可以自动检测到更新,并询问是否更新到新的版本。
6.4 需要更新点击“是”则立即更新,更新完后程序会重新启动。还可以点击“否”暂时不更新,之后程序直到关闭都不再自动提醒,需要手工点击刷新图标更新程序。
三、 注意事项
1. 必备条件:需要安装.Net FrameWork 2.0时
1.1 在发布属性页中,点击“系统必备”,钩选“.Net FrameWork 2.0”,指定安装位置为应用程序相同的位置。
1.2 成功发布后,客户端如果没有安装.Net FrameWork 2.0,访问发布页面会显示有系统必需的组件
1.3 点击安装后,首先会安装.Net FrameWork 2.0
相关链接:
http://www.cnblogs.com/chenbg2001/archive/2010/01/22/1654511.html
http://gisspace.bokee.com/viewdiary.16254661.html
http://msdn.microsoft.com/zh-cn/library/kzy0fky2(v=VS.90).aspx
http://hi.baidu.com/recordmyself/blog/item/0ac82c380fa4f3fab311c7e0.html
http://msdn.microsoft.com/en-us/library/ms404263(v=VS.90).aspx
http://www.cnblogs.com/xjwang/archive/2007/06/28/799147.html
http://www.codesky.net/article/doc/201004/201004170623.htm
http://msdn.microsoft.com/zh-cn/library/6fehc36e
http://so.csdn.net/search?page=4&q=clickonce&t=thread
http://www.cnblogs.com/vic_lu/archive/2010/09/07/1820785.html
http://blog.csdn.net/popozhu/archive/2010/08/06/5793923.aspx
http://hi.baidu.com/fxb_hyb/blog/item/aa01d4c37f012f5fb319a816.html