Приложение WPF не обновляет значок панели задач - PullRequest
0 голосов
/ 17 мая 2018

У меня есть это приложение, которое должно обновлять свой значок на панели задач во время выполнения.Я пытаюсь сделать это, изменив значок главного окна приложения, например:

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();
    }

Iвидел предложения по перезапуску explorer.exe и удалению кэша значков Windows.Похоже, что ни одна из них не помогает.

Любая помощь будет высоко оценена.

ОБНОВЛЕНИЕ: Значок панели задач обновляется, как и ожидалось, при сборке с конфигурацией Release... что смущает меня еще больше.

1 Ответ

0 голосов
/ 21 мая 2018

Кажется, я упустил важный ключ: приложение, которое не хотело менять значок на панели задач, было развернуто с помощью ClickOnce.

После почти дня отладки / испытаний язаметил, что если файлы приложения перемещаются (.exe и любые другие зависимости) в другую папку, все начинает работать как положено.

Чтобы исправить это, не удаляя механизм развертывания ClickOnce, ясоздал метод, который вызывается в методе приложения Main, который выполняет 4 действия:

  1. Проверяет, было ли приложение запущено через ClickOnce, если да:
  2. Копируетфайлы приложения из «оригинальной» папки ClickOnce (%localappdata%\Apps) в другое место, в моем случае это папка внутри %appdata%;
  3. Запускает процесс из созданной выше папки;
  4. Уничтожаеттекущий процесс (который был запущен ClickOnce);

Другое решение, которое я считаю правильным, состоит в том, чтобы отказаться от ClickOnce все вместе.Выбор другого механизма развертывания сэкономит вам много времени и усилий.

Надеюсь, это кому-нибудь поможет.

...