WPF 应用不更新任务栏图标



我有这个应用程序应该在运行时更新其任务栏图标。 我正在尝试通过更改应用程序的主窗口图标来做到这一点,如下所示:

var image = new WebClient().DownloadData("url_of_an_ico.ico");
this.Icon = App.Current.MainWindow.Icon = (BitmapSource)new ImageSourceConverter().ConvertFrom(image);

this在哪里是MainWindow.上面的代码在单击按钮时执行。它会更新窗口图标(左上角的图标),但不更新任务栏图标。

奇怪的是,我在另一个测试应用程序中尝试了完全相同的代码,并且效果很好。

我在测试应用和我的应用之间看到的唯一区别是,我手动定义了我的Main方法,我在其中创建了应用实例。

[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
public static void Main(string[] args) 
{
var a = new App();
a.InitializeComponent();
a.Run();
}

我已经看到了有关重新启动explorer.exe和删除Windows图标缓存的建议。他们似乎都无济于事。

任何帮助将不胜感激。

更新:使用Release配置构建时,任务栏图标似乎按预期更新...这让我更加困惑。

我似乎错过了一个重要的线索:不想更改任务栏图标的应用程序是使用ClickOnce部署的。

经过将近一天的调试/试用,我注意到如果将应用程序文件(.exe和任何其他依赖项)移动到另一个文件夹,一切都开始按预期工作。

为了解决此问题,在不删除 ClickOnce 部署机制的情况下,我创建了一个在应用程序的Main方法中调用的方法,该方法执行 4 项操作:

  1. 检查应用程序是否通过 ClickOnce 启动,如果是:
  2. 将应用程序文件从"原始"ClickOnce 文件夹 (%localappdata%Apps) 复制到另一个位置,在我的例子中是%appdata%中的文件夹;
  3. 从上面创建的文件夹启动进程;
  4. 终止当前进程(由 ClickOnce 启动);

另一个解决方案,我认为是正确的,是一起放弃ClickOnce。选择其他部署机制将为您节省大量时间和精力。

希望这会帮助某人。

最新更新