【问题标题】:Can I use RegFree Com with an application written in Excel VBA?我可以将 RegFree Com 与用 Excel VBA 编写的应用程序一起使用吗?
【发布时间】:2009-04-01 21:56:44
【问题描述】:

我有一个用 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 一起使用?任何想法或建议将不胜感激。

谢谢,

史蒂夫

【问题讨论】:

    标签: excel regfreecom windows-vista vba


    【解决方案1】:

    是的,可以通过 VBA 在 Win2k3+ 上使用免注册 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");   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-14
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 2010-10-03
      • 2015-10-03
      相关资源
      最近更新 更多