我试图做一些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文件?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)