【问题标题】:Does Reg-Free COM "Microsoft.Windows.ActCtx" work with scripting - late binding?Reg-Free COM“Microsoft.Windows.ActCtx”是否适用于脚本 - 后期绑定?
【发布时间】:2014-11-23 16:59:14
【问题描述】:

我已经成功地使用 C++ 和 C# 使用清单文件(即早期绑定)使无注册 COM 工作。我现在正在尝试使用后期绑定来完成这项工作。经过大量网络搜索后,我发现的技术似乎是使用“Microsoft.Windows.ActCtx”。

我用来测试这一点的一个示例是 MS 的“基于 COM 的组件的免注册激活”,位于 http://msdn.microsoft.com/en-us/library/ms973913.aspx 以生成 SideBySide 示例。然后我尝试使用脚本语言;然而,VBScript 和 Python 都以同样的方式失败(也尝试过 VBA)。 VBScript 示例如下:

Set actctx = CreateObject("Microsoft.Windows.ActCtx")
actctx.manifest = "C:\test\client.exe.manifest"

Set SBSObj = actctx.CreateObject("SideBySide.SideBySideClass")
wscript.echo SBSObj.Version

使用类似 SysInternals 的“进程监视器”,您可以看到运行以下命令 (Windows 7 x64):

C:\Windows\SysWOW64\cscript.exe //Nologo C:\test\VBRegFreeTest.vbs

似乎可以通过加载清单来工作,并尝试开始寻找等效的注册表调用,但找不到它们。所以它似乎部分工作。我还将 wScript.exe 复制到本地目录,以排除运行应用程序和清单文件的目录问题。

我已阅读 Microsoft.Windows.ActCtx on Windows Xp 并在清单中包含“prodID”,但它仍然失败。清单文件与 C++ 和 C# 示例一起正常工作。

我不禁觉得“Microsoft.Windows.ActCtx”有问题。这方面的文档非常有限。任何有关使用 Python 或 VBScript 清单文件的帮助将不胜感激。我很想知道是否有人让“Microsoft.Windows.ActCtx”工作。

【问题讨论】:

    标签: c# python c++ windows vbscript


    【解决方案1】:
    1. 您的 EXE 必须具有描述 COM 服务器名称和版本的依赖项部分的清单,例如并排.dll。
    2. 如果您的 EXE 有内部清单:如果存在内部清单,Windows 7 将不会读取外部清单(Windows XP 会首先查找外部清单)。
    3. 在 Windows 7 上,EXE 的内部清单必须更改为依赖于 COM 服务器,或者必须从 EXE 中删除内部清单。可以使用 Visual Studio 中的 mt.exe。
    4. SideBySide.dll 和 SideBySide.dll.manifest 必须与 EXE 位于同一文件夹中。
    5. SideBySide.dll.manifest 必须在 comClass 部分中包含 COM 服务器的 progID。

    VBS 代码示例,使用来自:Registration-Free Activation of COM Components: A Walkthrough 的 DLL

    Dim o
    Set o = CreateObject("Microsoft.Windows.ActCtx")
    
    //in example here is a manifest reference: o.manifest = "SideBySide.X.manifest"
    //but it does not function by me. By me a dependency is described in manifest of EXE.
    
    Dim obj
    Set obj = o.CreateObject("SideBySideLib")
    Call MsgBox(obj.Version())
    Set obj = Nothing
    Set o = Nothing
    

    【讨论】:

      猜你喜欢
      • 2010-09-23
      • 1970-01-01
      • 2010-12-07
      • 2012-03-24
      • 2015-05-23
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 2012-07-25
      相关资源
      最近更新 更多