You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Rust中能否将DLL文件直接嵌入可执行文件并从中提取复制?

将DLL嵌入可执行文件并提取复制的实现方案

核心思路

把DLL作为嵌入资源打包进EXE,程序运行时从自身资源中读取DLL数据,写入文件后复制到指定的多个目标路径。


步骤1:将DLL嵌入可执行文件

以C#项目为例:

  • 把需要嵌入的DLL文件添加到项目中
  • 右键该DLL文件 → 属性 → 设置「生成操作」为「嵌入的资源」
  • 记住资源的完整名称:格式为「项目命名空间.DLL文件名」,比如你的项目命名空间是MyEmbedDllTool,DLL叫MyLib.dll,那么资源名就是MyEmbedDllTool.MyLib.dll

步骤2:运行时提取DLL并复制到多位置

以下是C#实现代码,直接提取资源并完成多路径复制:

using System;
using System.IO;
using System.Reflection;

class Program
{
    static void Main()
    {
        // 替换为你的嵌入资源完整名称
        string embeddedDllName = "MyEmbedDllTool.MyLib.dll";
        // 临时存储提取的DLL(也可以直接写入目标路径,跳过临时文件)
        string tempDllPath = Path.Combine(Path.GetTempPath(), "MyLib.dll");

        // 从嵌入资源读取DLL数据
        using (Stream resourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(embeddedDllName))
        {
            if (resourceStream == null)
                throw new InvalidOperationException($"未找到嵌入资源:{embeddedDllName}");
            
            using (FileStream fs = new FileStream(tempDllPath, FileMode.Create))
            {
                resourceStream.CopyTo(fs);
            }
        }

        // 定义需要复制到的多个目标路径
        string[] targetLocations = new[]
        {
            @"C:\Program Files\App1\MyLib.dll",
            @"C:\Program Files\App2\MyLib.dll",
            @"D:\CustomDir\MyLib.dll"
        };

        // 批量复制
        foreach (string targetPath in targetLocations)
        {
            // 确保目标目录存在,避免报错
            Directory.CreateDirectory(Path.GetDirectoryName(targetPath));
            // 覆盖已存在的文件(如需保留原文件,可将overwrite设为false)
            File.Copy(tempDllPath, targetPath, overwrite: true);
            Console.WriteLine($"已完成复制:{targetPath}");
        }

        // 清理临时文件
        File.Delete(tempDllPath);
    }
}

关键注意事项

  • 资源名称正确性:如果找不到资源,检查命名空间和文件名是否匹配,可通过Assembly.GetExecutingAssembly().GetManifestResourceNames()打印所有资源名排查
  • 权限问题:若目标路径是系统保护目录(如Program Files),需以管理员身份运行EXE
  • C++实现思路:通过资源脚本(.rc)将DLL作为RCDATA类型嵌入,运行时用FindResource、LoadResource、LockResource获取二进制数据,再写入文件完成复制

内容的提问来源于stack exchange,提问作者BlueberryBush

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 07:24:23