这些天我非常忙于开发一个 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
问题 -
即使在 SP3 中,“Microsoft.Windows.ActCtx”界面在 Windows Xp 机器中也不可用 - Microsoft 从来不会让事情变得简单 -
这个问题有什么解决办法吗?您知道创建该界面的任何其他方法或 Windows 更新吗?
我发现了我的清单的问题。我将与可能遇到类似问题的其他人分享。
请注意,当与“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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)