2014-02-17 9 views
5

Meine Firma hat eine Branding-Mechanismus, der das Symbol für eine Windows-Anwendung setzt, etwa so:Dynamisch Set Taskbar Icon für Windows-Anwendung

if (AppBranding.Is("FOO")) 
    Icon = MyProject.Properties.Resources.Icon_FOO; 
else 
    Icon = MyProject.Properties.Resources.Icon_BAR; 

Icon_FOO und Icon_BAR sind Ressourcen, die auf ihre jeweiligen ICO-Dateien verweisen.

Außerdem wird das Symbol und Manifest in Projekt> MyProject-Eigenschaften> Ressourcen in Visual Studio festgelegt.

enter image description here

Wenn Benutzer die Anwendung starten, erscheint das richtige Symbol auf Branding basiert. Wenn sie jedoch das Programm an die Taskleiste anheften, wird das Icon unabhängig vom Branding auf Icon_FOO.ico zurückgesetzt. Wenn sie es lösen, schaltet das Symbol zurück.

Ich glaube, dass Programme, die an die Taskleiste angeheftet sind, das Symbol der .exe verwenden, während das Symbol für das Fenster ist, was ich auch gesetzt habe Form.Icon zu sein. Ich weiß nur, wie man das .exe-Icon einstellt, indem man zu Projekteigenschaften> Ressourcen geht und eine Auswahl aus der Drop-Down-Liste trifft, wie ich im obigen Bild habe. Wie kann das Icon für die .exe dynamisch gesetzt werden?

Antwort

1

Das Symbol in der Taskleiste ist (normalerweise) die erste in der Assembly verfügbare Symbolressource und kann nicht innerhalb der Anwendung geändert werden (es sei denn, Sie erstellen eine benutzerdefinierte Verknüpfung programmgesteuert).

Anstatt zu versuchen, dies zu manipulieren, können Sie eine einfache Starter-Anwendung (* .exe) mit dem korrekten Symbol und den Versionsattributen für jede Markenversion erstellen? Die EXE muss dann nur die Anwendung von einer Assembly laden, die den tatsächlichen Anwendungsinhalt enthält.

so haben Sie

Launcher_FOO.exe 
Launcher_BAR.exe 

mit ihren eigenen benutzerdefinierten Symbole. Beide Anwendungen erstellen eine gemeinsame Anwendung von

, um die Anwendung zu starten.

Sie können Reflection.Emit verwenden, um die Launcher_xxx.exe on the fly zu erstellen:

siehe google search

siehe msdn

+0

Vielleicht habe ich mein Beispiel in der Frage zu stark vereinfacht bei dem Versuch, es einfacher zu machen für Stackoverflow lesen. Unsere Kunden erhalten eine Anwendung ohne Markenzeichen. Sie stellen eine Lizenzdatei zur Verfügung, die die Marke enthält, und plötzlich ändern sich alle relevanten Banner und Symbole. Ihre Lösung erfordert, dass die Marke zur Kompilierungszeit bekannt ist, wenn wir sie nur zur Laufzeit kennen. Um das Ganze abzurunden, funktionierte unsere Lösung gut, bis jemand entschied, das Programm an die Taskleiste anzuheften. Ich brauche eine * dynamische * Möglichkeit, das Taskleistensymbol zu ändern. – Rainbolt

+0

@John, ok, ich verstehe Ihre Anforderung, aber ich denke nicht, dass es eine dynamische Lösung dafür gibt, ohne die Verknüpfung oder die Binärdatei selbst zu ändern (was wäre keine gute Lösung, bei Virenscannern usw. .. dass check für diese Art von Sache). Wenn Ihre Anwendung signiert ist, können Sie die Anwendung nicht ändern, ohne zurückzutreten. –