2

我制作了一个浏览器外的silverlight应用程序,每次有新的 .xap 文件上传到服务器时,我想自动更新它。

当用户右键单击应用程序并单击Updates时,默认设置为“检查更新,但让我选择是否下载并安装它们”:

替代文字
(来源:deviantsart.com

这让我相信可以让我的 Silverlight 应用程序自动检测服务器上是否存在新的 .xap 文件,如果有,Silverlight 客户端会自动询问用户是否要安装它。

  • 然而事实并非如此。我上传了一个新的 .xap 文件,而 Silverlight 应用程序什么也不做

  • 即使我将此添加到我的App.xaml.cs

--

private void Application_Startup(object sender, StartupEventArgs e)
{
    this.RootVisual = new BaseApp();
    if (Application.Current.IsRunningOutOfBrowser)
    {
        Application.Current.CheckAndDownloadUpdateAsync();
    }
}

并更新 .xap 文件,Silverlight 应用程序什么也不做

  • 此信息使我能够检查是否有更新,如果有,请告诉用户重新启动应用程序,但是当他重新启动应用程序时,什么也没有发生

--

private void Application_Startup(object sender, StartupEventArgs e)
{
    this.RootVisual = new BaseApp();
    if (Application.Current.IsRunningOutOfBrowser)
    {
        Application.Current.CheckAndDownloadUpdateAsync();
        Application.Current.CheckAndDownloadUpdateCompleted += new CheckAndDownloadUpdateCompletedEventHandler(Current_CheckAndDownloadUpdateCompleted);
    }
}

void Current_CheckAndDownloadUpdateCompleted(object sender, CheckAndDownloadUpdateCompletedEventArgs e)
{
    if (e.UpdateAvailable)
    {
        MessageBox.Show("An application update has been downloaded. " +
            "Restart the application to run the new version.");
    }
    else if (e.Error != null &&
        e.Error is PlatformNotSupportedException)
    {
        MessageBox.Show("An application update is available, " +
            "but it requires a new version of Silverlight. " +
            "Visit the application home page to upgrade.");
    }
    else
    {
        //no new version available
    }
}

如何让我的 Silverlight 应用程序在每次启动时检查是否有新的 .xap 文件,如果有,将控制权传递给 Silverlight 客户端,询问用户是否要下载它,如上面的对话所示有可能吗?

4

3 回答 3

3

第一个对话框是关于如何安装 Silverlight 本身的更新,与您的应用程序无关。

使用 CheckAndDownloadUpdateAsync 应该会自动下载新的 XAP。根据文档,没有办法阻止安装您调用 CheckAndDownloadUpdateAsync 的新版本。

于 2010-06-13T16:29:46.673 回答
1

您所指的屏幕并非特定于任何 Silverlight 应用程序。它指的是silverlight插件本身。

CheckAndDownloadUpdateAsync方法应该已经下载了较新的版本,但用户需要重新启动应用程序才能开始使用新应用程序。您使用UpdateAvailable完成事件中的事件 args 的属性来确定是否要求用户重新启动。

于 2010-06-13T16:25:38.353 回答
0

通过合并外部版本控制检查,您可能会得到您想要的。看看安装的版本和服务器上的版本是否不同。

如果不同,请询问用户是否要更新。如果他们选择是,则调用CheckAndDownloadUpdateAsync();

否则,如果他们选择否或版本相同,则跳过它。

有很多方法可以进行自己的版本检查。包括在构建时填充的静态只读属性,并且在 http 请求上具有某种类似的结果。

您可以使用 webclient 从服务器获取响应并将其与当前加载的应用程序版本进行比较。

您可以在回调中加入一个方法来显示一条消息,告诉用户重新启动应用程序。

于 2016-05-31T18:39:29.917 回答