是否可以在 HTA 应用程序中使用免注册 COM?
-
20-08-2019 - |
题
由于 HTA 应用程序托管在 MSHTA.exe 中,因此如何提供清单?另外,我认为提供 MSHTA.exe.manifest 可能会破坏其他 HTA 应用程序?
解决方案
在 Vista+ 上,MSHTA.exe 有一个嵌入式清单,它优先于外部清单,因此您的建议不是一个选项。
在 XP/2003 上,是的,您的建议会起作用,尽管形式不好,就像在 System32 中删除文件以修改系统二进制文件的行为一样(特别是确保您在清单中放入的任何注册都是您作为对象的对象)只有一个需要关心)。
在 Win2003 及更高版本上可用的正确解决方案是使用 Microsoft.Windows.ActCtx 对象在给定显式清单引用的情况下实例化您的对象。
例如:
var actCtx = WScript.CreateObject("Microsoft.Windows.ActCtx");
actCtx.Manifest = "myregfree.manifest";
var obj = actCtx.CreateObject("MyObj");
也许,如果这也必须在 XP 上工作,那么您可以采取的路径是两种解决方案的组合。
其他提示
编辑:我的答案是错的,但我会离开这里,以避免任何类似错误的答案:)
如果你的问题是,你可以访问COM对象不注册它的机器上,那么我认为答案是肯定的试探。然而,你需要做的是非常巨大的将意味着实施了大量的低级别的代码,大多数开发工具为你作为理所当然的事(德尔福,.NET,JAVA)的工作。你会需要的接口直接与DLL(像你这样一个正常的DLL),查询其接口和调用你的方法。
如果您有C,C ++知识,COM的方式从这些语言的访问会给你一些指点。
抱歉,我不能是任何更多的帮助。
不隶属于 StackOverflow