ClickOnce 使用 Microsoft Windows Installer 部署,每次应用程序更新,用户都必须重新安装整个应用程序;使用 ClickOnce 部署,则可以自动提供更新。只有更改过的应用程序部分才会被下载,然后从新的并行文件夹重新安装完整的、更新后的应用程序。
首先配置IIS 在控制面板--管理工具--Internet 信息服务(IIS)管理器
在网站下面新建一个然后新建虚拟目录和应用程序 注:这里的网址需要放到发布上的
在需要发布上的项目上的属性--发布 上面有两个地址。填刚刚的。
系统必备里面的地址改下,更新里面也改下 然后发布。
发布成功后去刚刚选择的文件夹下看看有没有文件,
存在文件。就直接拿到SetUp(安装的类库)Debug下的EXE运行就OK 具体SetUp的安装的代码如下:
using System.Deployment.Application; var deployManifestUriStr = "http://192.168.1.111:8021/Allsworth.TCMS.Client.Shell.application"; //前面部分是地址,后面是你创建webService文件夹下带application的文件的名字 Uri deploymentUri = new Uri(deployManifestUriStr); //给一个路径它。到网上去下载 try { var iphm = new InPlaceHostingManager(deploymentUri, false); } catch (UriFormatException uriEx) { Exception ex = new Exception("无法安装应用程序: 部署清单URL提供的不是一个有效的URL。错误: " + uriEx.Message, uriEx.InnerException); return; } catch (PlatformNotSupportedException platformEx) { Exception ex = new Exception("无法安装应用程序: 这个程序需要Windows XP或更高。错误: " + platformEx.Message, platformEx.InnerException); return; } catch (ArgumentException argumentEx) { Exception ex = new Exception("无法安装应用程序:部署清单URL提供的不是一个有效的URL。Error: " + argumentEx.Message, argumentEx.InnerException); return; } iphm.GetManifestCompleted += new EventHandler<GetManifestCompletedEventArgs>(iphm_GetManifestCompleted); // 部署清单已下载到本地计算机时发生。 iphm.GetManifestAsync();//2:通过使用 GetManifestAsync 下载部署清单。 void iphm_GetManifestCompleted(object sender, GetManifestCompletedEventArgs e) { if (e.Error != null) { Exception ex=new Exception( "不能下载清单。错误: " + e.Error.Message); return; } try { //真正的参数允许InPlaceHostingManager / / 确定 ClickOnce 应用程序是否具有合适的权限和平台依赖项,以便在本地计算机上运行。 / /如果为 true,应用程序将尝试将其权限提升至所需级别。 iphm.AssertApplicationRequirements(true); } catch (Exception ex) { Exception exception = new Exception("验证应用程序时发生错误。" + ex.Message,ex.InnerException); return; } // 下载部署清单。 iphm.DownloadProgressChanged += new EventHandler<DownloadProgressChangedEventArgs>(iphm_DownloadProgressChanged); // 更改应用程序或清单下载状态时发生。 iphm.DownloadApplicationCompleted += new EventHandler<DownloadApplicationCompletedEventArgs>(iphm_DownloadApplicationCompleted); //应用程序向本地计算机下载完成时发生。 try { //这通常不应该抛出一个异常,除非AssertApplicationRequirements()失败,/ /或者你不调用该方法之前调用。 iphm.DownloadApplicationAsync(); } catch (Exception downloadEx) { Exception ex = new Exception("不能启动下载的应用程序 .错误:" + downloadEx.Message,downloadEx.InnerException); return; } } // 下载时发生 void iphm_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { //你可以使用e.ProgressPercentage显示任务完成的百分比 //e.TotalBytesToDownload 获取下载操作的总字节数。 表示下载总大小(以字节为单位)的 System.Int64。 (e.TotalBytesToDownload / 1024 / 1024).ToString() + "M" // e.BytesDownloaded 获取下载到本地计算机的字节数。 (e.BytesDownloaded/ 1024 / 1024).ToString() + "M" } //下载完成 void iphm_DownloadApplicationCompleted(object sender, DownloadApplicationCompletedEventArgs e) { //检查一个错误。 if (e.Error != null) { //取消下载并安装 Exception ex = new Exception("无法下载和安装应用程序。错误: " + e.Error.Message); return; } }