2013-03-15 169 views
0

我遇到问题,看到ClickOnce如何知道它如何比较文件以及如何查找这些文件。我将让我的ClickOnce应用程序连接到服务器,但它是否在内部执行此操作?ClickOnce部署问题

+0

您使用的是什么版本的Visual Studio? – 2013-11-16 18:44:47

回答

0

如果你不想做编程的更新,请在更新对话框中的“运行前检查更新”(点击发布屏幕上更新)。然后,当您发布新版本时,它将与原始部署位于相同的文件夹中。当用户运行应用程序时,它会检查是否有更新,并会询问他是否要安装它。此时,用户可以跳过它,或接受更新。

如果您使最低版本(在更新对话框中)等于您正在部署的版本,它不会问他,它只会更新应用程序。

如果他跳过更新,几周后他不会再看到它,如果有的话。微软说2周,但我不相信它再次出现,所以他可能要等到NEXT更新或去手工安装新的。

0

你会发现你需要的一切在Publishing ClickOnce ApplicationsMSDN)。

How to: Check for Application Updates Programmatically Using the ClickOnce Deployment API

  1. 创建一个新的Windows窗体用你喜欢的命令行或可视化工具的应用。
  2. 创建您希望用户选择检查更新的任何按钮,菜单项或其他用户界面项目。从该项目的 事件处理程序调用以下方法检查并安装 更新。
private void InstallUpdateSyncWithInfo() 
{ 
    UpdateCheckInfo info = null; 

    if (ApplicationDeployment.IsNetworkDeployed) 
    { 
     ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment; 

     try 
     { 
      info = ad.CheckForDetailedUpdate(); 

     } 
     catch (DeploymentDownloadException dde) 
     { 
      MessageBox.Show("The new version of the application cannot be downloaded at this time. \n\nPlease check your network connection, or try again later. Error: " + dde.Message); 
      return; 
     } 
     catch (InvalidDeploymentException ide) 
     { 
      MessageBox.Show("Cannot check for a new version of the application. The ClickOnce deployment is corrupt. Please redeploy the application and try again. Error: " + ide.Message); 
      return; 
     } 
     catch (InvalidOperationException ioe) 
     { 
      MessageBox.Show("This application cannot be updated. It is likely not a ClickOnce application. Error: " + ioe.Message); 
      return; 
     } 

     if (info.UpdateAvailable) 
     { 
      Boolean doUpdate = true; 

      if (!info.IsUpdateRequired) 
      { 
       DialogResult dr = MessageBox.Show("An update is available. Would you like to update the application now?", "Update Available", MessageBoxButtons.OKCancel); 
       if (!(DialogResult.OK == dr)) 
       { 
        doUpdate = false; 
       } 
      } 
      else 
      { 
       // Display a message that the app MUST reboot. Display the minimum required version. 
       MessageBox.Show("This application has detected a mandatory update from your current " + 
        "version to version " + info.MinimumRequiredVersion.ToString() + 
        ". The application will now install the update and restart.", 
        "Update Available", MessageBoxButtons.OK, 
        MessageBoxIcon.Information); 
      } 

      if (doUpdate) 
      { 
       try 
       { 
        ad.Update(); 
        MessageBox.Show("The application has been upgraded, and will now restart."); 
        Application.Restart(); 
       } 
       catch (DeploymentDownloadException dde) 
       { 
        MessageBox.Show("Cannot install the latest version of the application. \n\nPlease check your network connection, or try again later. Error: " + dde); 
        return; 
       } 
      } 
     } 
    } 
} 
+0

我看到CLickOnce可以检查自身是否有更新,但如果我想使用ClickOnce检查软件更新并让应用程序提示用户进行更新,如果Clickonce在内部执行此操作,或者如果它是一个需要做的外部程序 – appel 2013-03-15 21:00:28

+0

@appel在这里,你去。这是一个完整的例子。如果您认为它回答您的问题,请将此答案标记为已接受。 – 2013-03-16 09:17:52

+0

这是否适用于Windows 7(和Windows 8)?是不是与[用户帐户控制](http://en.wikipedia.org/wiki/User_Account_Control)相关的异常? – 2013-11-17 23:23:04