如何防止使用嵌入式清单



我正在开发许多使用 RegFree COM 激活的应用程序,除了其中一个应用程序使用使用 JIT 类型编译器的旧技术运行外,一切运行良好。

为了使RegFree COM正常工作,我必须为启动可执行文件提供一个清单(如果我错了,请纠正我),并列出我的依赖项。我的所有其他应用程序都是内部构建的,我可以完全控制我的清单(创作以及如果我嵌入它,如果我将其并排保留等)。但是这个JIT编译器(ala Java JRE)不是我的,它已经包含(嵌入)一个清单。

我已经提取了清单(使用 MT 和 -inputresource 和 -outfile),修改并重新嵌入它。它按预期工作。但是,由于对这个可执行文件没有所有权,我担心这种操纵的合法性(修改第三方的可执行文件并重新分发它!),并希望避免这样做。另外,我担心在某些时候此可执行文件可能由第三方签名,因此修改嵌入式清单会破坏签名。

有没有办法让 sxs 加载器先查找另一个清单?似乎如果它找到一个嵌入的,它会默认使用它(在大多数情况下很好)。我可以提供一个配置文件或任何会跳过嵌入式清单并排提供的清单(myExe.exe.manifest,而不是 myExe.exe 中的RT_MANIFEST资源)吗?

据我所知,您只能在整个系统范围内执行此操作。将其添加到注册表:

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionSideBySide]
"PreferExternalManifest"=dword:00000001

确保通过更新可执行文件上的上次修改日期来触发激活上下文缓存,否则不会选取清单更改(重命名和重命名似乎有效)。

在Win XP上,外部清单优先于内部清单,但自Windows Server 2003 Service Pack 1以来,他们将其更改为相反。

相关内容

  • 没有找到相关文章

最新更新