2013-03-15 223 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