具有清单的OCX Reg-Fre-COM过程

发布于 2025-01-18 02:04:18 字数 3520 浏览 5 评论 0原文

我已经是第三方Lib(DLL和OCX)和我自己的应用程序(EXE和DLL)。

问题:我的应用程序版本1.0使用LIB版本1.0,我的应用程序版本2.1使用LIB版本1.4。这两个Lib版本都不是二进制安全。如果用户已经安装了两个应用程序,则只能使用一个版本,因为仅注册了最后一个LIB/OCX。

现在,我听说了使用清单文件的reg-free-com过程: https://learn.microsoft.com/en-us/previous-vious-versions/dotnet/dotnet/articles/mss973913(v = = msdn.10)?

到目前为止,我所做的使两个应用程序版本都可以与不同的LIBS/OCX文件一起使用。

我已经为我的应用程序创建了一个清单文件:myapp.exe.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <assemblyIdentity name="Comp.MyApp" processorArchitecture="X86" type="win32" version="1.0" />
    <description>MyApp</description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" />
              <assemblyIdentity
                  type="win32"
                  name="GrinderLib.sxs"
                  version="1.0.0.0" />
        </dependentAssembly>
    </dependency>
</assembly>

旁边,我创建了:grinderlib.sxs

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

    <assemblyIdentity
        type="win32"
        name="GrinderLib.sxs"
        version="1.0.0.0" />

    <file name="C:\\GrinderLib\\Grinder.ocx">
        <comClass clsid="{E142C57C-55A3-4AD4-A14C-575D99574B79}" tlbid="{4A97AB7A-66EA-47FC-A420-FD83D1A7DD31}" description="Grinder Control"></comClass>
        <comClass clsid="{E142C57C-55A3-4AD4-A14C-575D99574B80}" tlbid="{4A97AB7A-66EA-47FC-A420-FD83D1A7DD32}" description="Grinder" threadingModel="Apartment"></comClass>
        <typelib tlbid="{4A97AB7A-66EA-47FC-A420-FD83D1A7DD32}" resourceid="2" version="1.8" helpdir=""></typelib>
    </file>
    <comInterfaceExternalProxyStub name="_GrinderView" iid="{E9C8BE74-3AE3-408C-8489-DE27B364DE85}" tlbid="{4A97AB7A-66EA-47FC-A420-FD83D1A7DD32}" proxyStubClsid32="{00030420-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub>
    <comInterfaceExternalProxyStub name="_GrinderViewEvents" iid="{D0A38C7D-B0D9-4FB2-B30A-F26169E9828C}" tlbid="{4A97AB7A-66EA-47FC-A420-FD83D1A7DD32}" proxyStubClsid32="{00030420-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub>
    <comInterfaceExternalProxyStub name="_GrinderViewg" iid="{E9C8BE74-3AE3-408C-8489-DE27B364DE86}" tlbid="{4A97AB7A-66EA-47FC-A420-FD83D1A7DD32}" proxyStubClsid32="{00030420-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub>
    <comInterfaceExternalProxyStub name="_GrinderViewEventsg" iid="{D0A38C7D-B0D9-4FB2-B30A-F26169E9828D}" tlbid="{4A97AB7A-66EA-47FC-A420-FD83D1A7DD32}" proxyStubClsid32="{00030420-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub>

</assembly>

注意: grinderlib.sxs 是通过使用Windows SDK的MT.EXE生成的。

我从注册表中删除了OCX注册regsvr32 /u Grinder.ocx < /code>,如果清单正在工作,请尝试。

目前,这种尝试不起作用。我想念什么?

I've a third-party lib (DLLs and a OCX) and my own app (EXE and DLLs).

Problem: Version 1.0 of my app uses lib version 1.0 and my app version 2.1 uses lib version 1.4. Both lib versions are not binary-safe. If a user has installed both app versions, only one could work, because only the last lib/ocx is registered.

Now I heard of the reg-free-com process using manifest files: https://learn.microsoft.com/en-us/previous-versions/dotnet/articles/ms973913(v=msdn.10)?redirectedfrom=MSDN

What I've done so far to have both app versions work with different libs/ocx files.

I've created a manifest file for my app: MyApp.exe.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <assemblyIdentity name="Comp.MyApp" processorArchitecture="X86" type="win32" version="1.0" />
    <description>MyApp</description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" />
              <assemblyIdentity
                  type="win32"
                  name="GrinderLib.sxs"
                  version="1.0.0.0" />
        </dependentAssembly>
    </dependency>
</assembly>

Beside this one I've created the: GrinderLib.sxs

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

    <assemblyIdentity
        type="win32"
        name="GrinderLib.sxs"
        version="1.0.0.0" />

    <file name="C:\\GrinderLib\\Grinder.ocx">
        <comClass clsid="{E142C57C-55A3-4AD4-A14C-575D99574B79}" tlbid="{4A97AB7A-66EA-47FC-A420-FD83D1A7DD31}" description="Grinder Control"></comClass>
        <comClass clsid="{E142C57C-55A3-4AD4-A14C-575D99574B80}" tlbid="{4A97AB7A-66EA-47FC-A420-FD83D1A7DD32}" description="Grinder" threadingModel="Apartment"></comClass>
        <typelib tlbid="{4A97AB7A-66EA-47FC-A420-FD83D1A7DD32}" resourceid="2" version="1.8" helpdir=""></typelib>
    </file>
    <comInterfaceExternalProxyStub name="_GrinderView" iid="{E9C8BE74-3AE3-408C-8489-DE27B364DE85}" tlbid="{4A97AB7A-66EA-47FC-A420-FD83D1A7DD32}" proxyStubClsid32="{00030420-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub>
    <comInterfaceExternalProxyStub name="_GrinderViewEvents" iid="{D0A38C7D-B0D9-4FB2-B30A-F26169E9828C}" tlbid="{4A97AB7A-66EA-47FC-A420-FD83D1A7DD32}" proxyStubClsid32="{00030420-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub>
    <comInterfaceExternalProxyStub name="_GrinderViewg" iid="{E9C8BE74-3AE3-408C-8489-DE27B364DE86}" tlbid="{4A97AB7A-66EA-47FC-A420-FD83D1A7DD32}" proxyStubClsid32="{00030420-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub>
    <comInterfaceExternalProxyStub name="_GrinderViewEventsg" iid="{D0A38C7D-B0D9-4FB2-B30A-F26169E9828D}" tlbid="{4A97AB7A-66EA-47FC-A420-FD83D1A7DD32}" proxyStubClsid32="{00030420-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub>

</assembly>

Note: The manifest main content of GrinderLib.sxs was generated by using mt.exe of the Windows SDK.

I've removed the OCX registration Regsvr32 /u Grinder.ocx from the registry, to try, if the manifests are working.

Currently this attempt isn't working. What am I missing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文