2009-01-27 95 views

回答

3

在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以及工作,你可能需要一个路径是解决方案的组合。

0

编辑:我的答案是错的,但我会离开这里,避免任何类似的错误答案:)


如果你的问题是你能访问COM对象不注册它的机器,那么我认为答案是暂定的。然而,你需要做的工作将是实质性的,并且意味着实现大多数开发工具为你提供的低级代码(Delphi,.NET,JAVA)。你需要直接与dll进行接口(就像你会正常的dll),查询它的接口并调用你的方法。

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

对不起,我不能有任何帮助。

+0

当然,我可以做旧时尚“LoadLibrary”/“GetProcAddress”,但这是一个HTA应用程序...我不明白我将如何从HTA进行Win32 API调用? – 2009-02-05 21:33:21

+0

问题是有关注册自由COM这是一个功能添加到操作系统。通过这个特性,COM调用是透明的,不需要LoadLibrary等。话虽如此,该功能依赖于将清单与客户端应用相关联,所以我认为您无法通过HTA进行清除。 – DSO 2009-02-05 21:40:43

相关问题