2010-03-14 96 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特有的)。

相关问题