我有这个应用程序应该在运行时更新其任务栏图标。 我正在尝试通过更改应用程序的主窗口图标来做到这一点,如下所示:
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 项操作:
- 检查应用程序是否通过 ClickOnce 启动,如果是:
- 将应用程序文件从"原始"ClickOnce 文件夹 (
%localappdata%Apps
) 复制到另一个位置,在我的例子中是%appdata%
中的文件夹; - 从上面创建的文件夹启动进程;
- 终止当前进程(由 ClickOnce 启动);
另一个解决方案,我认为是正确的,是一起放弃ClickOnce。选择其他部署机制将为您节省大量时间和精力。
希望这会帮助某人。