是否可以在HTA应用程序中使用免注册COM?

时间:2009-01-27 13:00:44

标签: com manifest hta regfreecom

由于HTA应用程序托管在MSHTA.exe中,如何提供清单?另外我假设提供MSHTA.exe.manifest可能会打破其他HTA应用程序?

2 个答案:

答案 0 :(得分:4)

在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上运行,你可以采取的路径是两种解决方案的组合。

答案 1 :(得分:0)

编辑:我的回答是错的,但我会留在这里以避免任何类似的错误答案:)


如果您有疑问是可以访问COM对象而无需在机器上注册它,那么我认为答案是暂定的。但是,您需要做的工作是实质性的,并且意味着实现大多数开发工具为您提供的大量低级代码(Delphi,.NET,JAVA)。你需要直接与dll接口(就像普通的dll一样),查询它的接口并调用你的方法。

如果你有C,C ++知识,从这些语言中访问COM的方式会给你一些指示。

抱歉,我无法提供更多帮助。