8

我们有一个我已经编写好的应用程序,现在我已经通过 ClickOnce 向它推送了更新。该应用程序位于我们的主文件服务器上。但每次我推出更新时,我都会被问到我改变了什么!有什么方法可以提供对用户友好的 ClickOnce 更新的个性化描述?例如,当用户启动他们的应用程序时,ClickOnce 会询问“有新版本可用。您要更新吗?”,我可以在下面描述我更新的内容吗?或者这对 ClickOnce 来说是不可能的吗?

4

4 回答 4

11

这是我的做法。我在启动代码中以发布模式调用此方法:

using System.Deployment.Application;
...

private void DisplayChangeLog()
{
    if (!ApplicationDeployment.IsNetworkDeployed)
        return;

    if (!ApplicationDeployment.CurrentDeployment.IsFirstRun)
        return;

    ThreadPool.QueueUserWorkItem(state =>
        Execute.OnUIThread(() => <Pop up window with latest changes> ));
}

我知道这并不完全是您想要的,因为它会在用户第一次运行应用程序但他们已经安装更新之后显示。在我们的环境中,用户无法选择是否更新,因此没有真正的区别。

于 2013-09-20T22:45:47.800 回答
6

不能将 ClickOnce 用作标准。如果您想向用户显示有关更改的消息,那么您需要自己实现它。一种方法是禁用自动更新,然后以编程方式检查更新。然后,您可以使用该版本从 XML 文件或类似文件中获取更改并将其显示给用户。

或者,您可以只提供 HTML 格式的变更日志或其他可能更简单的内容。

例如,请参阅 Stack Overflow 问题寻找在 ClickOnce 应用程序中显示发行说明的建议

无论哪种方式,一般来说,如果有更新,为什么用户不想要它?

于 2013-06-27T12:29:14.627 回答
2

最近,我花了相当多的时间研究和以编程方式处理在发布 ClickOnce 应用程序期间生成的清单文件,但我还没有看到一种方法来添加像您想要的那样的自由格式描述,并且当然没有办法通过 Visual Studio 提供的向导或 UI 来实现它。

(警告:我明天会在工作中仔细检查一下,以确保绝对没有办法——但你应该假设没有。)

于 2013-06-27T12:35:20.130 回答
1

只要您让 ClickOnce 自动检查更新,就无法更改 ClickOnce 的更新对话框。

要实现这一点,您必须在应用程序中使用由ApplicationDeployment.CurrentDeployment. 这允许您定义自己的更新对话框。有关官方 HowTo 的信息,请参见此处。核心原则如下:

ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
info = ad.CheckForDetailedUpdate();
if (info.UpdateAvailable)
{
    // insert your update dialog here
    ad.Update();
}

但是,调用时在其中描述的方法中曾经存在一个错误,ad.Update()并且您在 ClickOnce 部署中具有文件关联。有关更多信息,请参阅论坛错误报告。(不知道bug有没有修复。)

作为解决方法,您可以用ad.Update()以下几行替换:

var application = ApplicationDeployment.CurrentDeployment.UpdatedApplicationFullName.Split('#')[0] + "?";
proc = new Process { StartInfo = { FileName = "iexplore.exe", Arguments = application, UseShellExecute = true } };
proc.Start();
Application.Current.Shutdown();
于 2017-02-09T11:30:48.913 回答