我真的很喜欢Sysinternals工具(如Process Explorer中)处理64位兼容的方式。 它看起来像32位可执行文件嵌入了64位版本,并在必要时提取它。
我想要一个工具,它自动执行此 - 即需要32位和64位可执行文件,把它们打包在一起,不知何故,并插入存根代码,根据其被运行在哪个平台上推出正确的可执行文件。
之前,我开始推出自己的,没有人知道这样的事情已经存在?
我真的很喜欢Sysinternals工具(如Process Explorer中)处理64位兼容的方式。 它看起来像32位可执行文件嵌入了64位版本,并在必要时提取它。
我想要一个工具,它自动执行此 - 即需要32位和64位可执行文件,把它们打包在一起,不知何故,并插入存根代码,根据其被运行在哪个平台上推出正确的可执行文件。
之前,我开始推出自己的,没有人知道这样的事情已经存在?
Sysinternals fame的标记Russinovich介绍他们的方法在这里 。 他们这样做在x86图像嵌入64图像。 不幸的是上面的博客文章实际上并没有进入太多细节,但提到他们的技术是基于发现了一个更老的文章在这里 。
这似乎已经中已经涵盖了(尽管它在细节上相当浅)...
滚动的应用程序的64位和32位版本到相同的二进制?
不是一个工具,但它似乎很容易嵌入到VC ++项目作为资源的可执行文件,并运行检查OS环境后正确的。
使用IsWow64Process函数来检测32或64位,在这里是一个很好的书面记录包括关于如何嵌入的可执行代码: http://www.codeproject.com/KB/winsdk/binaryresources.aspx 。
虽然这是可能的,我会考虑它,因为大多数这些应用程序(如Process Explorer的)一种不好的做法提取文件的工作目录。 如果你喜欢把节目中的“程序文件”文件夹中,以该目录正在冲突只读。
对我来说,它只是似乎更容易有分开的两个方案,使快捷方式只是x86文件。 如果该版本检测64位,只需要启动x64的文件。
如果你有很好的理由这两个结合起来,不是作为资源似乎是一个正确的路径embeedding它。
这里是一个指南 ,以编译一个的AutoIt脚本,做这项工作,虽然你没有在打包和存根发射器是如何工作的任何控制。
我将在这里重现AutoIt脚本的情况下,链接消失:
; Check if we’re on 64-bit OS…
If EnvGet(“PROCESSOR_ARCHITEW6432″)=”” Then
; No we’re not – run x86 version…
FileInstall(“D:\Support\ETrustCheck_x86.exe”,@TempDir & “\ETrustCheck_x86.exe”)
RunWait(“D:\Support\ETrustCheck_x86.exe”,@TempDir & “\ETrustCheck_x86.exe”)
FileDelete(@TempDir & “\ETrustCheck_x86.exe”)
Else
; Yes we are – run x64 version..
FileInstall(“D:\Support\ETrustCheck_x64.exe”,@TempDir & “\ETrustCheck_x64.exe”)
RunWait(“D:\Support\ETrustCheck_x86.exe”,@TempDir & “\ETrustCheck_x64.exe”)
FileDelete(@TempDir & “\ETrustCheck_x64.exe”)
EndIf
; The END
该脚本可以通过AutoIt脚本编辑器为32位的发射与包装成它的两个可执行文件包裹。