我有一个用Excel VBA,myApp.xls编写的应用程序。目前,我们使用InstallShield来分发应用程序。由于我们正在迁移到Windows Vista,因此我需要能够以标准用户身份安装该应用程序。这不允许我在安装过程中更新注册表。除了excel应用程序,我们还有几个VB6应用程序。为了安装这些应用程序,我能够按照本论坛上的人的建议使用RegFree com和Make My Manifest(MMM)(我非常感谢btw的见解!)。这个过程虽然有点乏味,但效果很好。然后我将MMM的输出打包到VS '05安装程序项目中,并使用msiinfo.exe删除了msi上的UAC提示。现在我面临安装一个基本上存在于Excel文件中的应用程序。我修改了MMM为我的一个VB6应用程序创建的清单,并尝试通过它运行excel文件,但我没有太多运气。有人知道这样做的方法吗? RegFree是否与VBA合作?任何想法或建议将不胜感激。
谢谢,
史蒂夫
答案 0 :(得分:1)
是的,可以在Win2k3 +上通过VBA使用免注册COM。
从根本上说,reg-free说“这个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");