在 VB6 清单中包含 .NET 程序集?

发布于 2025-01-02 13:51:27 字数 563 浏览 2 评论 0原文

我正在开发一个 vb6 项目,想要创建一个清单,因此不需要注册。

我使用 MMM(Make My Manifest)工具扫描 VB6 项目中的 dll 依赖项并生成清单。

但是,MMM 不包含 tlb 文件,并且我有一个用 .net 编写的 Client.dll 和 Client.tlb,它们已暴露给 COM 并在我的 VB6 程序中使用。

我不建议你使用 Regasm,因为如果没有注册到注册表,那就太好了。

我尝试通过命令行中的 mt 工具生成单独的清单 'mt.exe -tlb:Client.tlb -dll:Client.dll -out:Client.manifest'

然后我想我可以通过以下方式合并 2 个清单: 'mt.exe -manifest program.exe.manifest client.manifest -out:program.exe.manifest'

但是,当我运行该程序时,我收到一个消息框,显示“运行时错误” -2147220999 (800401f9):自动化错误,Dll 中的错误

我在上面做的事情是否正确,任何人都有类似的经历,任何帮助表示赞赏。

I am working on a vb6 project and want to create a manifest so no registering is required.

I use MMM (Make My Manifest) tool which scans your VB6 project for dll dependencies and generates the manifest.

However, the MMM does not include tlb files, and I have a Client.dll and Client.tlb written in .net that which has been exposed to COM and used in my VB6 program.

I don't to you use Regasm as it would be nice if no register to the registry is done.

I tried to generate a seperate manifest for the via the mt tool in command line, 'mt.exe -tlb:Client.tlb -dll:Client.dll -out:Client.manifest'

Then I thought I could merge the 2 manifest via: 'mt.exe -manifest program.exe.manifest client.manifest -out:program.exe.manifest'

However, when I run the program I'm getting an message box that says ' Run-time error -2147220999 (800401f9): Automation error , Error in the Dll'

Am i doing things correctly above, anyone had similar experience, any help appreciated.

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烂柯人 2025-01-09 13:51:27

以下是 UMMM 如何执行此操作的简短描述:

  1. 首先,它为 .Net dll 生成一个用这个清单到临时文件

    mt.exe -nologo -托管程序集名称:“{dotnet_dll}”-nodependency -out:“{dotnet_dll}.manifest”
    
  2. 然后将此清单作为 RT_MANIFEST 资源 2 嵌入到 .Net dll 中

    mt.exe -nologo -manifest "{dotnet_dll}.manifest" -outputresource:"{dotnet_dll}";2
    
  3. 最后通过从 .Net dll 中提取 assembleIdentity 标记,从 VB6 可执行文件引用 .Net dll清单并将其添加到 dependency\dependentAssembly 标记内的无注册表清单中,如下所示

    <依赖>;
        <依赖程序集>
            < assemblyIdentity name =“PdfSigner”版本=“ 1.0.0.0”processorArchitecture =“ msil”/> >
        
    
    

这样 Hans 提到的 clrClass 标记就会出现在 .Net dll 嵌入清单中,而不是出现在 VB6 可执行清单中。

Here is a short description how UMMM does it:

  1. First, for the .Net dll it generates a manifest to a temp file with this

    mt.exe -nologo -managedassemblyname:"{dotnet_dll}" -nodependency -out:"{dotnet_dll}.manifest"
    
  2. Then embeds this manifest into .Net dll as RT_MANIFEST resource 2 with this

    mt.exe -nologo -manifest "{dotnet_dll}.manifest" -outputresource:"{dotnet_dll}";2
    
  3. Finally references the .Net dll from the VB6 executable by extracting assemblyIdentity tag from .Net dll manifest and adding it to the reg-free manifest inside dependency\dependentAssembly tag like this

    <dependency>
        <dependentAssembly>
            <assemblyIdentity name="PdfSigner" version="1.0.0.0" processorArchitecture="msil" />
        </dependentAssembly>
    </dependency>
    

This way clrClass tags Hans mentions appear in the the .Net dll embedded manifest and not in the VB6 executable manifest.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文