C# Window编程随记——ClickOnce程序部署

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://linsh-tech.blog.csdn.net/article/details/50996258
关于ClickOnce我们要说的主要有一下两点:
  1. 什么是ClickOnce?
  2. ClickOnce的使用

一、什么是ClickOnce(来自百度
        ClickOnce 是一种部署技术,使用该技术可创建自行更新的基于 Windows 的应用程序,这些应用程序可以通过最低程度的用户交互来安装和运行。
        使用ClickOnce部署有什么优势:
1.更新方便:使用Microsoft Windows Installer部署的话,每次程序更新用户都要重新安装整个程序,而使用ClickOnce部署的话,则可以自动提供更新。只有更改过的应用程序部分才会被下载,然后从新的并行文件夹重新安装完整的、更新后的应用程序。
2.对计算机安全:使用 Windows Installer 部署时,应用程序通常依赖于共享组件,这便有可能发生版本冲突;而使用 ClickOnce 部署时,每个应用程序都是独立的,不会干扰其他应用程序。
3.权限安全:Windows Installer 部署要求管理员权限并且只允许受限制的用户安装;而 ClickOnce 部署允许非管理用户安装应用程序并仅授予应用程序所需要的那些代码访问安全权限。

二、ClickOnce的使用
        我们知道ClickOnce是一种部署技术,部署实际上就是我们所说的安装,所以我们可以说ClickOnce应用程序就是一类安装包装,它可以一步到位进行安装,而不像我们所使用的传统安装包那样,要N个"下一步",然后才是完成。
        接下来我们先尝试发布一个Windows Forms应用程序,用我们之前制作的导表工具为例:
首先打开我们的项目工程:
        打开"解决方案资源管理器",在项目节点上右击展开菜单,并选中【属性】打开属性窗口:
       在属性窗口中切换至【发布】窗口,我们可以看到两个发布位置:本地文件夹和IIS上的Web服务器地址,当然也可以是FTP地址。我们先尝试本地文件夹发布方式:
        
        直接在第一栏中填写一个文件夹地址,如:“D:\Unity3D\C#\Window Forms Applications”。加入想只发布到服务器上,只需在第二栏中填入服务器Url地址,当两栏都填写的话,则会发布到服务器的同时在本地备份一份。然后,我们需要设置安装模式,分为两种,一般选择第二项:
        
        接下来,我们开始设置更新的参数,加入发布的为最终版并不再更新可以不设置此选项,但一般情况下都需要设置为了后期的修改更新:
        
        设置完毕后,我们开始设置版本号,为了方便,我们直接勾选自动递增选项:
        
所有参数都设置完毕之后,我们就可以点击“发布向导”,在向导里面我们可以再次修改刚刚设置过的一些参数,例如发布位置、更新IIS服务器地址以及是否联机状态下才能使用,如果无需修改则一直点击“下一步”即可,引导完成后点击完成按钮,开始生成部署文件:
        
        部署过程中可在VS的输出窗口查看打印信息,部署顺利完成的输出为“发布成功”:
        
        我们可以尝试安装刚刚发布的例子程序,找到设置的本地文件夹目录,可以看到生成的安装文件,点击.application或者setup.exe文件都能进行安装。
        
展开阅读全文

ClickOnce 部署 问题

12-11

#region 同步更新rn /**/rn /// rn /// 检测网络更新rn /// rn private void InstallUpdateSyncWithInfo()rn rn UpdateCheckInfo info = null;rnrnrn if (ApplicationDeployment.IsNetworkDeployed)rn rn ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;rnrn tryrn rn info = [color=#FF0000]ad.CheckForDetailedUpdate();[/color]rnrn rn catch (DeploymentDownloadException dde)rn rn MessageBox.Show("软件升级发现异常. \n\n请检测网络情况后重新升经. 错误原因为:" + dde.Message, "升级检测", MessageBoxButtons.OK, MessageBoxIcon.Error);rn return;rn rn catch (InvalidDeploymentException ide)rn rn MessageBox.Show("网络中无法检测到可更新的部署文件,请与软件开发商联系. 错误原因: " + ide.Message, "升级检测", MessageBoxButtons.OK, MessageBoxIcon.Error);rn return;rn rn catch (InvalidOperationException ioe)rn rn MessageBox.Show("软件无法更新. 请与软件开发商联系. 错误原因: " + ioe.Message, "升级检测", MessageBoxButtons.OK, MessageBoxIcon.Error);rn return;rn rnrn if (info.UpdateAvailable)rn rn Boolean doUpdate = true;rnrn if (!info.IsUpdateRequired)rn rn DialogResult dr = MessageBox.Show("检测到新版本,版本号为:" + info.AvailableVersion.ToString() + ",是否现在升级?", "升级检测", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);rn if (!(DialogResult.OK == dr))rn rn doUpdate = false;rn rn rnrn if (doUpdate)rn rn tryrn rn ad.Update();rn MessageBox.Show("升级完毕,请重启软件以使用新版本.", "升级检测", MessageBoxButtons.OK, MessageBoxIcon.Information);rn Application.Restart();rn rn catch (DeploymentDownloadException dde)rn rn MessageBox.Show("软件升级发现异常. \n\n请检测网络情况后重新升经. 错误原因为: " + dde, "升级检测", MessageBoxButtons.OK, MessageBoxIcon.Error);rn return;rn rn rn rn elsern rn //MessageBox.Show("您现在使用的已经是最新版本软件!", "升级检测", MessageBoxButtons.OK, MessageBoxIcon.Information);rn rn rn elsern rn MessageBox.Show("不是网络部署软件,无法更新", "升级检测", MessageBoxButtons.OK, MessageBoxIcon.Error);rn rnrn rnrnrnrn #endregion rnrn-----------------------------------------------------------------------rn以上是以编程方式的ClickOnce 部署,大家有没有发现当发布以后,客户端升级时如果选“取消”,那么在下一次启动程序时还是会弹出两个系统自动生成的“检测到新版本”和“更新可用”窗口,而这两个窗口是我不想看到的。 论坛

没有更多推荐了,返回首页