以编程方式更新WPF应用程序

时间:2016-04-11 19:28:03

标签: c# wpf clickonce

我试图手动更新我的WPF应用程序,我找到了以下程序:

    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)
                {
                    MessageBoxResult result = MessageBox.Show("An update is available. Would you like to update the application now?", "Update Available", MessageBoxButton.YesNo, MessageBoxImage.Question);
                    if (result == MessageBoxResult.Yes)
                    {
                        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", MessageBoxButton.OK,
                        MessageBoxImage.Information);
                }

                if (doUpdate)
                {
                    try
                    {
                        ad.Update();
                        MessageBox.Show("The application has been upgraded, and will now restart.");
                        Application.Current.Shutdown();
                    }
                    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;
                    }
                }
            }
        }
    }

从按钮事件调用该过程:

        private void btnUpdate_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            InstallUpdateSyncWithInfo();
        }
        catch (Exception er)
        {
            MessageBox.Show(er.Message);
            return;
        }
    }

我无法调试应用程序,因为它需要处于网络部署模式。

我在我的服务器上在线上传了我的应用程序的最新版本,并指定了应用程序属性更新的位置。

运行应用程序并点击更新按钮后,我收到以下错误:

enter image description here

拜托,您能帮我解决这个问题。

SOURSE

提前致谢

Abdulsalam。

2 个答案:

答案 0 :(得分:0)

查看CodeProject上的本教程:

http://www.codeproject.com/Articles/731954/Simple-Auto-Update-Let-your-application-update-i

我发现它是最好的解决方案(特别是如果您希望避免使用ClickOnce)并提供您需要的所有可能功能,而且非常容易定制。

这些是基本和惊人的功能:

  • 通过HTTP检查远程站点以获取更新版本。
  • 如果有更新的版本,请将其下载为ZIP。
  • 在覆盖任何内容之前确保成功下载。
  • 可以轻松地将任何应用程序添加为组件。
  • 允许更新应用程序本身。
  • 不需要引导程序或多步骤过程。
  • 拒绝篡改。
  • 适应一些简单的日志记录。
  • 单个XML文件配置。

我还设法编写了我自己的更新对话框,该对话框显示了文件下载的进度。不幸的是,这篇文章没有包括在内。

答案 1 :(得分:0)

您的应用程序的新版本是否可能需要比旧版本更高的信任,并且您正在运行受信任的应用程序部署?在这种情况下,不会出现信任级别的提示。有关更多见解,请参阅https://msdn.microsoft.com/en-us/library/s22azw1e.aspxhttps://msdn.microsoft.com/en-us/library/01daf08f.aspx

“受信任的应用程序部署和权限提升”下的后一页说明:“如果当前发布者不是受信任的发布者,则信任管理员将使用权限提升来询问用户是否要授予您的应用程序提升权限。”管理员禁用权限提升,但是,应用程序无法获得运行权限。应用程序将无法运行,并且不会向用户显示任何通知。“