ClickOnce安装部署,手动。

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;             

    }

        }

   

原文地址:https://www.cnblogs.com/wlwenjie/p/4441132.html