【问题标题】:Microsoft.Windows.ActCtx on Windows XpWindows Xp 上的 Microsoft.Windows.ActCtx
【发布时间】:2009-06-11 06:01:34
【问题描述】:

这些天我非常忙于开发一个activex/com 应用程序。我们的一些客户在严格限制的 Windows 环境下工作。所以我决定让我的应用程序无注册。我发现 genman32.exe 可以轻松创建清单(mt.exe 也很有用)。一切都很顺利,但是当我尝试从 wsh(vbs 或 js) 执行我的应用程序时——这是我的情况,因为应用程序在 com 服务器上运行——

set o = CreateObject("Application.Interface") 

// No object reference 

因为“CreateObject”查看注册表并且没有注册表条目:) 然后我搜索并找到了“actctx”的东西。在 dot.net 环境中很容易实现。但我必须从 wsh(vbs 或 js) 执行我的应用程序;) 所以我决定搜索一下然后找到

set o = CreateObject("Microsoft.Windows.ActCtx")
o.manifest = "L:\\Application.dll.manifest"
set app = o.CreateObject("Application.Interface")
app.Launch() // which is my executing function

问题 - “Microsoft.Windows.ActCtx”接口在 Windows Xp 机器中甚至在 SP3 中都不可用 - 微软从不让它变得简单 - 这个问题有什么解决办法吗?您知道创建该界面的任何其他方法或 Windows 更新吗?

【问题讨论】:

    标签: c# javascript vbscript wsh regfreecom


    【解决方案1】:

    我发现我的清单有问题。我会与其他可能遇到类似问题的人分享。

    请注意,在将其与“Microsoft.Windows.ActCtx”接口一起使用时,您必须在清单中指定 progid="" 属性,否则您会收到 ActiveX 组件无法创建对象错误。

    <comClass
    clsid="{ED59F192-EF2E-4BCC-95EB-85A8C5C65326}"
    progid="myclass.process"
    threadingModel = "Apartment" />
    

    以下清单示例应该可以帮助您启动并运行 :)

        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
      manifestVersion="1.0">
    
    <assemblyIdentity
       type="win32"
       name="myclass"
       version="1.0.0.0"/>
    
    <file name = "myclass.dll">
    
    <comClass
        clsid="{ED59F192-EF2E-4BCC-95EB-85A8C5C65326}"
        progid="myclass.process"
        threadingModel = "Apartment" />
    
    <typelib tlbid="{7AE20C3A-48C2-42C1-A68D-A1C3EB0A2C65}"
           version="1.0" helpdir=""/>
    
    </file>
    
    <comInterfaceExternalProxyStub 
        name="_PROCESS" 
        iid="{187D0811-470D-44C0-B68C-C1C7F3EEFDA0}"
        proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
        baseInterface="{00000000-0000-0000-C000-000000000046}"
        tlbid = "{7AE20C3A-48C2-42C1-A68D-A1C3EB0A2C65}" />
    
    </assembly>
    

    【讨论】:

      【解决方案2】:

      如果 Microsoft.Windows.ActCtx 是可再分发的,那么它必须有某种方式才能进入机器并进行全局注册。如果您有权在机器上注册它,您不能简单地注册 Application.Interface 吗?如果您正在处理受限环境……那么您必须处理已经可用的环境。

      您似乎正在使用 wsh 脚本来启动您的应用程序。为什么不编写一个存根以在本机或托管代码中启动应用程序(您可以在其中使用清单),然后调用该存根?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多