我的Windows同事问我是否可以修改我的非Windows二进制文件,以便在Windows下检查他们的“属性”时,他们可以看到一个“版本”选项卡,就像为Visual Studio显示的那样编译exe。
具体来说,我有一些gzip压缩二进制文件,并想知道我是否可以修改它们以满足这种需求。如果有更好的方法,那也没关系。
有没有办法让我的二进制文件看起来像是exe文件?
我尝试将notepad.exe中的VS_VERSION_INFO块附加到我的一个二进制文件的末尾,希望Windows扫描该块,但它无效。
我尝试编辑有关作者,主题,修订等的其他信息。这不会修改文件,它只是为NTFS中的文件创建了另一个数据分支(什么是Windows术语?)。
答案 0 :(得分:1)
Windows不支持它,因为每种文件类型都有自己的文件格式。但这并不意味着你无法完成它。存储在dll和exes中的资源是文件格式的一部分。
向用户显示:
如果您希望向用户显示此信息,则最好使用属性页shell扩展来完成此操作。您将创建一个类似的页面,但它不会使用完全相同的页面。有一个非常好的多部分tutorial on shell extensions,包括以该链接开头的属性页面。
实际存储资源的位置:
您可以将资源存储在同一文件的单独alternate data stream中,而不是将块附加到文件中。这将使原始文件流在磁盘上不会损坏,并且不会导致其主文件大小发生更改。
备用数据流允许多个数据流与文件名关联。每个流都由文件名末尾的冒号:
和标识符标识。
您可以通过执行以下操作来创建它们:
notepad test.txt:adsname1
记事本test.txt:adsname2
记事本test.txt
使正常的Win32 API正常工作:
如果您希望普通的API工作,则必须intercept the Win32 APIs:LoadLibraryEx,FindResource,LoadResource和LockResource。这可能不值得,因为您已经在创建自己的属性页面。
答案 1 :(得分:0)
想不出任何方法来做这个短的shell扩展。我过去采用的方法是一个单独的“人口普查”程序,该程序知道如何从任何类型的文件中读取版本信息。
可以使用将zip文件转换为自解压缩zip的程序将Zip文件转换为exe文件(我知道WinZip会这样做,也很可能是免费的实用工具; here's one that came up on a search但是我还没有尝试过)。获得exe后,您应该可以使用Resource Hacker之类的工具来更改版本信息。
答案 2 :(得分:0)
它无效。 Windows必须知道每种文件格式,否则如果版本信息被附加到文件格式,则不会打扰文件格式。
答案 3 :(得分:0)
不,资源部分只能在PE内部(可移植的可执行文件; exe,dll,sys) 它只是将数据放在文件中,你有一个表指向文件头中的数据。
如果你有NTFS驱动器你可以做什么,就是使用NTFS stream to store custom properties这样二进制文件的联系方式将保持不变,但你需要使用自定义shell扩展来显示内容流。