0

我有一个用 Excel VBA 编写的应用程序 myApp.xls。目前我们使用 InstallShield 来分发应用程序。由于我们正在迁移到 Windows Vista,因此我需要能够以标准用户身份安装该应用程序。这不允许我在安装过程中更新注册表。除了 excel 应用程序,我们还有几个 VB6 应用程序。为了安装这些应用程序,我可以使用 RegFree com 和 Make My Manifest (MMM),正如论坛上的人们所建议的那样(顺便说一句,我非常感谢您的见解!)。这个过程虽然有点乏味,但效果很好。然后,我将 MMM 的输出打包到 VS '05 安装程序项目中,并使用 msiinfo.exe 删除了 msi 上的 UAC 提示。现在我面临安装一个基本上存在于 Excel 文件中的应用程序。我修改了 MMM 为我的一个 VB6 应用程序创建的清单,并尝试通过它运行 excel 文件,但我运气不佳。有人知道这样做的方法吗?RegFree com 是否与 VBA 一起使用?任何想法或建议将不胜感激。

谢谢,

史蒂夫

4

1 回答 1

3

是的,可以在 Win2k3+ 上通过 VBA 使用免注册 COM。

从根本上说,无注册表示“这个 COM 类不再需要注册才能被发现,而是注册信息将由清单携带”。

清单本身在嵌入到可执行文件或命名为 *.exe.manifest 时被可执行文件隐式引用。但是,在 VBA 的情况下——您的代码并不存在于您控制的可执行文件中,因此您需要另一种方法来获取对清单的引用。

这就是Microsoft.Windows.ActCtx对象的用武之地——它特别允许您在给定显式清单引用的情况下实例化您的对象。

例如(在 JS 中,因为我对 VBA 语法生疏了):

var actCtx = WScript.CreateObject("Microsoft.Windows.ActCtx");
actCtx.Manifest = "myregfree.manifest";
var obj =  actCtx.CreateObject("MyObj");   
于 2009-04-19T08:56:42.150 回答