2010-03-14 39 views

回答

-1

您需要定義一個IResourceWriter設立的ResourceManager和寫入,然後閱讀的圖標,字節和設置,根據從MSDN這個文件,我猜碼會是這個樣子,因爲我還沒有這樣做過,在代碼示例來看,您保存裝配後,添加非託管資源,並將其命名爲「app.ico」:

 
// Defines a standalone managed resource for this assembly. 
IResourceWriter myResourceWriter = myAssembly.DefineResource("myResourceIcon", 
     "myResourceIcon.ico", "MyAssemblyResource.resources", 
     ResourceAttributes.Public); 
myResourceWriter.AddResource("app.ico", "Testing for the added resource"); 

myAssembly.Save(myAssembly.GetName().Name + ".dll"); 

// Defines an unmanaged resource file for this assembly. 
bool bSuccess = false; 
byte[] iconB = null; 
using (System.IO.FileStream fStream = new FileStream("icon.ico", FileMode.Open, FileAccess.Read)){ 
    iconB = new byte[(int)fStream.Length]; 
    int nRead = fStream.Read(out iconB, 0, iconB.Length); 
    if (nRead == iconB.Length) bSuccess = true; 
} 
if (bSuccess){ 
    myAssembly.DefineUnmanagedResource(iconB); 
} 
1

是的,你將需要DefineUnmanagedRes烏爾斯河()。您傳遞的文件必須是.RES文件格式。這需要使用rc.exe Windows SDK工具。要創建一個,創建一個名爲test.rc與此內容的文本文件開始:

100 ICON test.ico 

哪裏test.ico是包含圖標文件的名稱。啓動Visual Studio命令提示符並使用此命令

rc test.rc 

創建一個test.res文件。將其路徑傳遞給DefineUnmanagedResource(),您的最終.exe文件包含圖標資源。

請注意,這不是驗證實際,目標機器可能不會安裝Windows SDK,並且您不能重新分配rc.exe。但是你可以分發.res文件。

+0

我不知道是否有可能創建一個模板「res」文件,然後交換它中的圖標? – zproxy

+0

.res文件格式沒有記錄。你可以計算出二進制的.ico數據的偏移量,但當替換的.ico文件大小不一樣時,你會遇到麻煩。 –

+0

已經發布7年了。現在有資源標題格式的文檔:https://msdn.microsoft.com/en-us/library/windows/desktop/ms648027(v=vs.85).aspx它需要將一個圖標分解成各個部分,將圖標頭轉換爲GROUP_ICON資源,但我設法找到足夠的文檔將.ico轉換爲.res文件。 –

2

您也可以在使用Win32資源API BeginUpdateResource,UpdateResource和EndUpdateResource保存EXE後更改圖標。請參閱Change WPF Assembly Icon from Code(這不是WPF特有的)。

相關問題