【问题标题】:Trouble with ClickOnce deploymentClickOnce 部署问题
【发布时间】:2013-03-15 19:52:16
【问题描述】:

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

【问题讨论】:

  • 您使用的是什么版本的 Visual Studio?

标签: clickonce updating


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您将在 Publishing ClickOnce Applications (MSDN) 中找到所需的一切。

    来自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;
                    }
                }
            }
        }
    }
    

    【讨论】:

    • 我看到 CLickOnce 可以检查自己是否有更新,但是如果我想使用 ClickOnce 检查软件更新并让应用程序提示用户进行更新,如果 Clickonce在内部执行此操作,或者如果它是执行此操作所需的外部过程
    • @appel 给你。这是一个完整的例子。如果您认为此答案回答了您的问题,请将其标记为已接受。
    • 这是否适用于 Windows 7(和 Windows 8)?抛出的异常不是与User Account Control有关吗?
    猜你喜欢
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多