如何从exe文件中提取与用于创build此exe文件相同的.ico文件?

如何从exe文件中提取与用于创build此exe文件相同的.ico文件?,第1张

概述如何从exe文件提取用于创build此exe文件相同的.ico文件?

我试图做一些SFX:使一个程序生成一个wrapPing.exe围绕另一个wrapped.exe。

WrapPing.exe将wrapped.exe作为资源embedded,并在执行时将wrapped.exe保存到临时文件夹中,并使用特定的命令行参数执行,然后将其删除。 wrapped.exe并不总是一个.Net程序,我没有它的源代码。

wrapPing.exe应该在.net 3.5中完成,以便可以在windows 7 SP1和更高版本上使用,而无需事先安装.Net。

WrapPing.exe是使用.Net 4.6中的Roselyn使用C#程序生成的。

SSL支持Rabbit + .Net + windows

cmd批量来监听控制台应用程序的输出

GetEventLogs()返回没有安装事件日志?

在VB.Net中从二进制文件中提取string

如何更改命令提示符/控制台窗口/ DOS框中的制表符?

我需要wrapPing.exe通过资源pipe理器像wrapped.exe一样可视化。 我用硬编码的.ico文件做了一个成功的testing。 代码看起来像这样(简体):

var compilation = CSharpCompilation.Create(...); var resourceDescription = new ResourceDescription( resourcename: "SFX.resourcename",dataProvIDer: () => file.OpenRead("wrapped.exe"),isPublic: false); using (var iconStream = file.OpenRead(@"wrapped.ico")) using (var pestream = file.Create("wrapPing.exe")) using (var pdbStream = file.Create("wrapPing.pdb")) using (var win32resstream = compilation.CreateDefaultWin32Resources( versionResource: true,noManifest: false,manifestContents: null,iconInIcoFormat: iconStream)) { var emitResult = compilation.Emit( pestream: pestream,pdbStream: pdbStream,manifestResources: new[] { resourceDescription },win32Resources: win32resstream,options: new Emitoptions(subsystemVersion: SubsystemVersion.windows7)); return emitResult; }

现在我试图从“wrapped.exe”得到iconStream。 我试图replace:

using (var iconStream = file.OpenRead(@"wrapped.ico"))

有:

var iconStream = new MemoryStream(); Icon icon = Icon.ExtractAssociatedIcon("wrapped.exe"); icon.Save(iconStream); iconStream.Seek(0,SeekOrigin.Begin);

但我只有一个32 * 32的图标。

如何提取完全相同的.ico文件(包括所有格式,例如16 * 16 32位BMP,32 * 32 32位BMP,48 * 48 32位BMP,64 * 64 32位BMP和256 * 256 32位PNG)作为一个用来创build“wrapped.exe”?

检测进程已经在使用C#.net的窗口中运行

在C#中,什么是httpClIEnt.getStringAsync()方法的同步替代?

从窗口应用程序开始,用于检索安装在远程PC上的软件和硬件列表

在窗户上的qyoto

“这个文件来自另一台计算机,可能被阻止,以保护这台计算机。” – 如何以编程方式在C#.net中删除此属性?

使用Iconlib这非常简单。 答复已经在这个问题上 :Thx to @Plutonix !

使用下面的帮助功能(当然,提取图标文件名不会被硬编码):

static Stream GetIconStream_ExtractIconUsingIconlib(string fileToExecute) { var multiIcon = new MultiIcon(); multiIcon.Load(fileToExecute); var extractedicofilename = @"c:tempicon.ico"; multiIcon.Save(extractedicofilename,MultiIconFormat.ICO); return file.OpenRead(extractedicofilename); }

我们只需要替换:

file.OpenRead(@"wrapped.ico")

GetIconStream_ExtractIconUsingIconlib("wrapped.exe")

这给了我们完整的解决方案

var compilation = CSharpCompilation.Create(...); var resourceDescription = new ResourceDescription( resourcename: "SFX.resourcename",isPublic: false); using (var iconStream = GetIconStream_ExtractIconUsingIconlib("wrapped.exe")) using (var pestream = file.Create("wrapPing.exe")) using (var pdbStream = file.Create("wrapPing.pdb")) using (var win32resstream = compilation.CreateDefaultWin32Resources( versionResource: true,options: new Emitoptions(subsystemVersion: SubsystemVersion.windows7)); return emitResult; }

总结

以上是内存溢出为你收集整理的如何从exe文件中提取与用于创build此exe文件相同的.ico文件?全部内容,希望文章能够帮你解决如何从exe文件中提取与用于创build此exe文件相同的.ico文件?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1273088.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存