2014-02-17 105 views
5

我公司有設置圖標的Windows應用程序,像這樣一個品牌的機制:動態設置任務欄圖標的Windows應用程序

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

Icon_FOOIcon_BAR是指向各自的.ico文件資源。

此外,項目> MyProject屬性>資源中的圖標和清單在Visual Studio中設置。

enter image description here

當用戶啓動應用程序,正確的圖標會出現基於品牌。但是,如果他們將程序固定到任務欄,則無論品牌如何,該圖標都會恢復爲Icon_FOO.ico。當他們取消固定時,圖標切換回來。

我相信固定到任務欄的程序使用.exe的圖標,而窗口的圖標是我設置爲Form.Icon的任何東西。我只知道如何設置.exe圖標,方法是轉到「項目屬性」>「資源」,然後從下拉列表中進行選擇,如上圖所示。如何動態設置.exe的圖標?

回答

1

任務欄中的圖標(通常)是程序集中可用的第一個圖標資源,不能從應用程序內進行修改(除非以編程方式創建自定義快捷方式)。

您可以使用每個品牌版本的正確圖標和版本屬性創建一個簡單的初學者應用程序(* .exe),而不是試圖操作這個應用程序? .exe不僅僅需要從包含實際應用程序內容的程序集加載應用程序。

所以你必須

Launcher_FOO.exe 
Launcher_BAR.exe 

自己的自定義圖標。這兩個應用程序將創建一個共同的應用程序從

Actual_Application.dll 

啓動應用程序。

您可以使用Reflection.Emit在飛行中創建Launcher_xxx.exe:

看到google search

看到msdn

+0

我可能過於簡單的問題,我的例子,而試圖使它更容易爲StackOverflow的讀書。我們的客戶獲得無品牌申請。他們提供包含該品牌的許可證文件,並突然改變所有相關的橫幅和圖標。您的解決方案要求在編譯時知道品牌,因爲我們只能在運行時瞭解它。最重要的是,我們的解決方案工作良好,直到有人決定將程序固定到任務欄。我需要*動態*方式來更改任務欄圖標。 – Rainbolt

+0

@John,好吧,我明白你的要求,但我不認爲有一個動態的解決方案,沒有改變快捷方式,或二進制本身(這不會是一個很好的解決方案,給病毒掃描器等..檢查這種事情)。如果您的應用程序已簽名,則無法在不退出的情況下修改應用程序。 –

相關問題