4

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

4

2 回答 2

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 上工作,那么您可能采取的路径是两种解决方案的组合。

于 2009-04-19T09:03:12.057 回答
0

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


如果您的问题是您是否可以在不在机器上注册的情况下访问 COM 对象,那么我认为答案是暂定的。但是,您需要做的工作将是大量的,并且意味着实现大多数开发工具理所当然地为您提供的许多低级代码(Delphi、.NET、JAVA)。您需要直接与 dll 交互(就像您使用普通 dll 一样),查询其接口并调用您的方法。

如果您有 C、C++ 知识,那么从这些语言访问 COM 的方式会给您一些指导。

对不起,我不能再提供任何帮助了。

于 2009-02-05T21:19:48.793 回答