精华内容
下载资源
问答
  •  1、插入资源的方法  insert-->resource-->import,在出现的对话框中选择一个要作为资源的文件,接着在出现的对话框中Resource type:下面的框中随便自己输入一个串(如123),查找资源的时候会用到,...

         1、插入资源的方法

          insert-->resource-->import,在出现的对话框中选择一个要作为资源的文件,接着在出现的对话框中Resource type:下面的框中随便自己输入一个串(如123),查找资源的时候会用到,点击OK,编译一下工程,资源插入完毕(在resource.h文件中会增加一条#define IDR_1231           130,在rc文件中会增加一条IDR_1231                123     DISCARDABLE     "所选的文件名字")。

     

       2、EXE中查找资源并释放

     char rcFileName [ 256 ];
     char rcFilePath [ 1024 ];
     

     ZeroMemory ( rcFileName , 256 );
     ZeroMemory ( rcFilePath , 1024 );

     strncpy ( rcType , "123" , strlen ( "123" ) );
     strncpy ( rcFileName , "所选的文件名" , strlen ( "所选的文件名" ) );

     

     HMODULE hInstance = GetModuleHandle ( NULL );

     HRSRC     hRes    = NULL;  //resource handle
     HGLOBAL hgpt     = NULL; //resource pointer
     LPVOID    lpBuff   = NULL; //resource buffer pointer
     DWORD   rcSize   = 0;      //resource size
     DWORD   dwByte;   //byte size had been write
     HANDLE   hFile = INVALID_HANDLE_VALUE; //file to write 
     

    hRes = ::FindResource ( hInstance , MAKEINTRESOURCE ( rcID ) , rcType );
     if ( NULL == hRes )
     {
      return FALSE;
     }
     

    hgpt = ::LoadResource ( hInstance , hRes );
     if ( NULL == hgpt )
     {
      return FALSE;
     }
     

    rcSize = ::SizeofResource ( hInstance , hRes );
     lpBuff = ::LockResource ( hgpt );

     //now i will read the resource and write it to an file

     strcat ( rcFilePath , "c://windows//system32//" ); // 不同情况自己指定
     strcat ( rcFilePath , rcFileName );
     hFile = CreateFile ( rcFilePath , GENERIC_WRITE , 0 , NULL , 

                            CREATE_ALWAYS ,   FILE_ATTRIBUTE_NORMAL , NULL );
     if ( INVALID_HANDLE_VALUE == hFile )
     {
      CloseHandle ( hFile );
      return FALSE;
     }
     

    WriteFile ( hFile , lpBuff , rcSize , &dwByte , NULL );
     CloseHandle ( hFile );
     if ( dwByte != rcSize )
      return FALSE;

    释放资源完毕

     

     3、DLL中查找资源并释放

     char rcFileName [ 256 ];
     char rcFilePath [ 1024 ];
     

     ZeroMemory ( rcFileName , 256 );
     ZeroMemory ( rcFilePath , 1024 );

     strncpy ( rcType , "123" , strlen ( "123" ) );
     strncpy ( rcFileName , "所选的文件名" , strlen ( "所选的文件名" ) );

     

     HMODULE hInstance = GetModuleHandle ( "abc.dll" );// abc.dll就是带有资源的dll,

                                                                        一定不能填NULL,那样会找不到资源的

     HRSRC     hRes    = NULL;  //resource handle
     HGLOBAL hgpt     = NULL; //resource pointer
     LPVOID    lpBuff   = NULL; //resource buffer pointer
     DWORD   rcSize   = 0;      //resource size
     DWORD   dwByte;   //byte size had been write
     HANDLE   hFile = INVALID_HANDLE_VALUE; //file to write 
     

    hRes = ::FindResource ( hInstance/*不能填NULL*/ , MAKEINTRESOURCE ( rcID ) , rcType );
     if ( NULL == hRes )
     {
      return FALSE;
     }
     

    hgpt = ::LoadResource ( hInstance/*不能填NULL*/  , hRes );
     if ( NULL == hgpt )
     {
      return FALSE;
     }
     

    rcSize = ::SizeofResource ( hInstance/*不能填NULL*/  , hRes );
     lpBuff = ::LockResource ( hgpt );

     //now i will read the resource and write it to an file

     strcat ( rcFilePath , "c://windows//system32//" ); // 不同情况自己指定
     strcat ( rcFilePath , rcFileName );
     hFile = CreateFile ( rcFilePath , GENERIC_WRITE , 0 , NULL , 

                            CREATE_ALWAYS ,   FILE_ATTRIBUTE_NORMAL , NULL );
     if ( INVALID_HANDLE_VALUE == hFile )
     {
      CloseHandle ( hFile );
      return FALSE;
     }


     WriteFile ( hFile , lpBuff , rcSize , &dwByte , NULL );
     CloseHandle ( hFile );
     if ( dwByte != rcSize )
      return FALSE;

    释放资源完毕

     

    有关资源操作的总结完毕,具体的api可以查看msdn

    展开全文
  • c# WPF程序将dll文件嵌入到exe文件

    千次阅读 2020-07-31 15:28:35
    一、首先要在debug模式下跑一遍确保debug文件夹文件生成,因为我之前就试过没跑就直接打包了,结果生成的exe文件不知道道输出到哪里去了,找了半天累死个人。 二、点解红框的按钮 切换文

    近日用c# 的wpf编写了一个读取设备数据的exe程序。在最后如何打包的时候犯了难,网上找了很多文章,但是说的不是很详细,只有关键的代码。对于我这才接触c# 两周的人来说 那就是一脸懵逼。最后还是在网易云课堂上找到了相关视频。在这里我详解的贴一下步骤吧!我用的编辑器版本是Visual Studio 2019

    一、首先要在debug模式下跑一遍确保debug文件夹内有文件生成,因为我之前就试过没跑就直接打包了,结果生成的exe文件不知道道输出到哪里去了,找了半天累死个人。

    二、点解红框内的按钮 切换文件试图

     

    三、打开后缀.csproj文件 翻到最后面 在最后添加如下代码。

    <Target Name="AfterResolveReferences">
      <ItemGroup>
        <EmbeddedResource Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.Extension)' == '.dll'">
          <LogicalName>%(ReferenceCopyLocalPaths.DestinationSubDirectory)%(ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension)</LogicalName>
        </EmbeddedResource>
      </ItemGroup>
    </Target>

    不用改动直接粘贴就行了

    四、打开App.xaml.cs文件,添加以下代码

    private static Assembly OnResolveAssembly(object sender, ResolveEventArgs args)
            {
                Assembly executingAssembly = Assembly.GetExecutingAssembly();
                var executingAssemblyName = executingAssembly.GetName();
                var resName = executingAssemblyName.Name + ".resources";
                
                AssemblyName assemblyName = new AssemblyName(args.Name);string path = "";
                if (resName == assemblyName.Name)
                {
                    path = executingAssemblyName.Name + ".g.resources"; ;
                }
                else
                {
                    path = assemblyName.Name + ".dll";
                    if (assemblyName.CultureInfo.Equals(CultureInfo.InvariantCulture) == false)
                    {
                        path = String.Format(@"{0}\{1}", assemblyName.CultureInfo, path);
                    }
                }
    
                using (Stream stream = executingAssembly.GetManifestResourceStream(path))
                {
                    if (stream == null)
                        return null;
    
                    byte[] assemblyRawBytes = new byte[stream.Length];
                    stream.Read(assemblyRawBytes, 0, assemblyRawBytes.Length);
                    return Assembly.Load(assemblyRawBytes);
                }
            }
    
            protected override void OnStartup(StartupEventArgs e)
            {
                base.OnStartup(e);
                AppDomain.CurrentDomain.AssemblyResolve += OnResolveAssembly;
            }

    五、将试图切换回sln,这时候会看见项目已卸载,右键点击项目选择重新加载项目,这时候在App.xaml.cs文件中可能会有报错的情况,将缺失的using导入即可。

    六、右键点击项目选择重新生成

    输出以上信息就表示生成成功了 ,这个时候debug目录下的exe文件就可以使用了

    七、使用的时候可能会出现 “ windows无法访问指定设备路径或文件,你可能没有权限”的问题  这个时候邮件exe程序选择属性

    切换到安全选项卡

    点击编辑 再点击添加 最后点击高级

    点击立刻查找  在列表内找到everyone 并选择 最后确定。此时就可以打开exe程序了

    展开全文
  • 读: /// /// 获取配置文件AppSeting节点数据信息 /// /// /// public static string GetAppSettingKeyValue(string key) { Configuration cfg = Configuratio

    读:

     /// <summary>
            /// 获取配置文件AppSeting节点数据信息
            /// </summary>
            /// <param name="key"></param>
            /// <returns></returns>
            public static string GetAppSettingKeyValue(string key)
            {
                Configuration cfg = ConfigurationManager.OpenExeConfiguration(@"WinDraw.dll");
                return cfg.AppSettings.Settings[key].Value;
            }

    写:

       /// <summary>
            /// 保存配置文件AppSeting节点的数据信息
            /// </summary>
            /// <param name="key"></param>
            /// <param name="value"></param>
            public static void SaveAppSettingKeyValue(string key, string value)
            {
                Configuration cfg = ConfigurationManager.OpenExeConfiguration(@"WinDraw.dll");
    
                bool isExist = false;
                foreach (string k in cfg.AppSettings.Settings.AllKeys)
                {
                    if (k == key)//判断是否存在对应的节点
                    {
                        isExist = true;
                    }
                }
    
                if (isExist)//如果存在则直接赋值
                {
                    cfg.AppSettings.Settings[key].Value = value;
                }
                else//不存在就创建
                {
                    cfg.AppSettings.Settings.Add(key, value);
                }
                cfg.Save(ConfigurationSaveMode.Modified);
                ConfigurationManager.RefreshSection("appSettings");
            }


    展开全文
  • DLL打包在EXE文件中的两种方法

    千次阅读 2019-10-11 15:47:52
    在一些项目中,会有这样的需求:希望发布一个单独的可执行文件,将所引用的DLL文件打包入EXE程序中的方式来实现。 实现原理 想要实现这个库有以下三种方式: 以嵌入的资源将DLL文件打包,然后在运行的时候再...

    需求描述

    在C#的项目中,经常会引用一些外部的DLL库。在发布的时候,必需将这些库和可执行程序一起发布,否则会导致程序无法运行。在一些项目中,会有这样的需求:希望发布一个单独的可执行文件,将所引用的DLL文件打包入EXE程序中的方式来实现。

    实现原理

    想要实现这个库有以下三种方式:

    1. 以嵌入的资源将DLL文件打包,然后在运行的时候再释放出来;
    2. 以嵌入的资源将DLL文件打包,然后在运行时直接加载至内存;
    3. 其他,比如使用第三方工具打包(比如 这里),或者将DLL单独发布(比如 这里)等。

    针对不同的需求可以选择以上三种情况的任意一种。这里介绍第1种和第2种两种方法。在介绍之前,首先了解一下什么是嵌入的资源。

    嵌入的资源

    在C#的项目中,我们可以添加任意类型的文件,作为一个纯二进制的文件嵌入至项目中,作为资源使用。以下对嵌入资源的添加和使用进行简要说明。

    • 添加嵌入资源
      在项目上中点击右键,选择“添加->现有项”,然后添加所需要的文件。如果要添加任意类型,在弹出的打开对话框中选择“所有文件(*.*)”。然后选中已经添加的文件,在属性窗口中设置“生成操作”的属性为“嵌入的资源”。
    • 嵌入资源的路径
      已经添加的资源文件,使用绝对路径访问,格式为 [解决方案名称].[文件夹路径].[文件名]。比如在一个名为 Test 的项目中,加入的资源文件 a.dll 在根目录下,则访问路径为 Test.a.dll。如果 a.dll 是放在文件夹下,比如 Resource 目录下,则其路径为 Test.Resource.a.dll,以此类推。
    • 使用嵌入资源
      在C#中,一个DLL即是一个程序集,使用 System.Reflection.Assembly 类来表示。加载一个程序集可以使用 Assembly.GetExecutingAssembly().GetManifestResourceStream(resourcePath) 来实现,其中 resoucePath 即为DLL的路径。详细操作可参见相关文章。

    注意:以上的嵌入资源都是托管的DLL,即是使用.NET创建的类库。如果是非托管的DLL,如使用C++建立的,则不管用。如需要加载非托管DLL,可以使用以下办法:
    1)从嵌入的DLL加载字节数据 data;
    2)将data写至一个临时文件中;
    3)使用 Assembly.LoadFile(path) 进行加载即可。

    实现过程

    方法1
    第1种方法,只需要读取嵌入的资源,然后写到本地即可。以下代码展示了如何从EXE中读取指定的嵌入的资源文件,读取的结果为字节数组,即 byte[] 类型。

    public byte[] GetResource(String respath)
    {
    	System.IO.Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Test.a.dll");
    	byte[] data = new byte[stream.Length];
    	stream.Read(data, 0, data.Length);
    	return data;
    }
    

    读取成功后的数据可以直接写回到磁盘保存为dll文件,然后程序即可正常调用。比如,我们可以使用使用 System.IO.File.WriteAllBytes("a.dll", data) 方法来保存读取至的程序目录下,名称为 a.dll

    方法2
    第2种方法,可参见 此文,以下为以加载 Test.a.dll 的示例代码。

    static void Main(string[] args)
    {
    	// 在整个程序最开始的地方进行引用DLL的内存载入
    	AppDomain.CurrentDomain.AssemblyResolve += (s, a) =>
    	{ 
    		using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Test.a.dll"))
    		{
    			byte[] data = new byte[stream.Length];
    			stream.Read(data, 0, data.Length);
    			return Assembly.Load(data);
    		}
    	};
    }
    

    小结

    本文介绍了两种将DLL嵌入至EXE,从而实现一个独立的EXE程序的实现办法。这两种办法都是通过嵌入的资源的方式将DLL文件嵌入在EXE中。不同之处在于,第1种方法将DLL文件在启动时读取出来,然后保存在本地,从而实现和一般C#项目一样的项目结构(即EXE+DLL的结构)。第2种方式则更为简单,直接加载至内存,从而在运行时,也不需要本地的DLL文件。具体使用,可以根据实际需求来决定。

    展开全文
  •  需要先添加引用System.Configuration.dll文件  ExeConfigurationFileMap map = new ExeConfigurationFileMap();  map.ExeConfigFilename = @"E:\aaa\bbb.exe.config"; ;  Configuration
  • Qt 之提取 exe/dll/icon 文件图标

    千次阅读 多人点赞 2016-09-11 11:46:26
    简述在 Windows 中,...如果我们要从限定的可执行文件exe)、动态链接库(dll)、或者图标文件中提取图标,可以使用 ExtractIconEx、ExtractIcon。简述 说明 效果 依赖 源码说明 函数 描述 ExtractIcon() 从一个
  • pyinstaller的打包依赖问题...除python自带的模块、包之外(自带是指,pip install xxx 安装上的),其他的例如dll文件类,pyinstaller不负责打包进去,所以需要指定文件所在路径。帮助打包,否则importerror。 打包某
  • 今天做了一个软件,想发布的时候才发现调用的类没几个,就像把它们都跟EXE文件打包在一起,以后复制去别的地方用也方便,于是上网搜了一下,发现网上大部分都是用ILMerge实现的,于是也自己试了一下,不过网上都没有详细的...
  • 当需要读取配置信息的时候,可以直接通过ConfigurationManager.AppSettings[index]来读取*.exe.config中的键值,但很少存在dll assembly需要config file的情况。假如当前dll assembly名为test.dll,如果在test.dll中...
  • 当需要读取配置信息的时候,可以直接通过ConfigurationManager.AppSettings[index]来读取*.exe.config中的键值,但很少存在dll assembly需要config file的情况。假如当前dll assembly名为test.dll,如果在test.dll中...
  • 今天做了一个软件,想发布的时候才发现调用的类没几个,就像把它们都跟EXE文件打包在一起,以后复制去别的地方用也方便,于是上网搜了一下,发现网上大部分都是用ILMerge实现的,于是也自己试了一下,不过网上都没有详细的...
  • app.config文件仅供exe工程读取的,想多数操作一样,使用 ...在调试dll工程时,需要单独指定config文件才能正确读取key值。 static string configPath = System.Reflection.Assembly.GetExecutingAssembly().Loc...
  • 解决WinFrom使用的dll在WebServer调用时无法读取到配置文件的问题。
  • 提供了一个用C#语言实现的txt文件操作类,实现了写入txt、读取txt、读取指定行、删除指定行、查询txt指定内容,按照给定条件查询、删除txt文件内容等功能。调用方便,操作简单,附有使用说明,及源码。
  • 读取网络json文件并保存到指定xml文件
  • C#中读取exe文件的icon类

    千次阅读 2015-03-13 17:29:07
    public class GetSystemIcon { /// ... /// 依据文件名读取图标,若指定文件不存在,则返回空值。 /// /// 文件路径 /// 是否返回大图标 /// public static Icon GetIconByFileName
  • 我们的目的就是生成指定的.lib文件,现在却说无法找到,原因是没有添加生成lib的目录和文件名。 下面介绍一下整体的生成流程: 第一步:找到LIB.EXE所在目录 C:\\Program Files\Microsoft Visual Studio ...
  • 读取大文件夹里面(包含子文件夹)所有指定类型文件。由于前人数据存放没有规律,非常乱。为了整理到一起,所以需要先获取所有目标类型文件的路径及文件名。作为Python新手,在这里记录分享。
  • Dll释放可执行文件

    千次阅读 2012-09-19 14:24:35
    Dll释放可执行文件用途很广泛。一种实现木马注入的方法就是将dll加载...然后被读取、写入文件等。 创建dll的步骤就不介绍了。不 明白的可以参考我的博客《windows核心编程系列》谈谈dll。http://blog.csdn.net/ithzh
  • 从官网下载NPOI2.0版本没有XWPFDocument方法。
  • C# 调用dll文件

    万次阅读 2019-02-28 18:13:55
    动态链接库(也称为DLL,即为“Dynamic Link Library”的缩写)是Microsoft Windows最重要的组成要素之一,打开Windows系统文件夹,你会发现文件夹中有很多DLL文件,Windows就是将一些主要的系统功能以DLL模块的形式...
  • 2、如果要启动的程序为单独一个exe文件没有问题,而当这个程序有配置文件,或在启动时需要读取其他文件时,请配置一下 StartInfo 的 WorkingDirectory 属性为你的应用程序目录。 以上是我遇到相似的问题的解决...
  • ②在其对应的文件根目录下查找其对应的引擎加载驱动ACEODBC.DLL是否存在;路径:C:\Program Files\Common Files\Microsoft Shared。如不存在下载ACEODBC.DLL驱动文件放入报错版本文件根目录即可;③还有一种解决办法...
  • 教你如何将EXEDLL文件打包在一起

    万次阅读 2013-02-06 10:38:12
    捆绑DLL 1.先到http://www.microsoft.com/downloads/details.aspx?FamilyID=22914587-B4AD-4EAE-87CF-B14AE6A939B0&displaylang=en下载ILMerge,才600多K,一下子就下好了.     2.下载后是安装:     3.不...
  • python DLL文件调用问题

    万次阅读 2018-12-29 13:40:42
    在网上搜索很多关于pythonDLL文件调用的问题,大多给出的都是DLL文件的编写,然后python调用,但是在调用中遇到的一些问题却很少有提及,下面将给出在python调用DLL文件时遇到的一些问题等。  ctypes官网:...
  • 获取.exe/.dll/.icon文件的Icon图标资源

    千次阅读 2014-01-04 19:23:33
    获取.exe/.dll/.icon文件的Icon图标资源
  • .c或.cpp文件生成可执行文件.exe分为两个过程,即编译过程和链接过程。 编译是把文本形式源代码翻译为机器语言形式的目标文件的过程。 链接是把目标文件、操作系统的启动代码和用到的库文件进行组织,形成最终生成...
  • 程序代码using System;using System.IO;using System.Drawing;using Microsoft.Win32;using System.Runtime.InteropServices...namespace GetIconDemo{ /// /// 提供从操作系统读取图标的方法 /// public class GetSy
  • java通过JNI调用DLL文件

    千次阅读 2019-04-13 19:44:26
    在底部会有编译的信息其中就有生成的dll文件路径:(这里我选择是是64位因为我的jdk是64的——根据自己需要来选择生成对应的文件) 打开文件看一下 7、将生成的dll文件放入System32下(64位放入SysWOW64...
  • C#读取文件路径

    千次阅读 2015-06-25 19:18:25
    C#读取文件路径  //获取包含清单的已加载文件的路径或 UNC 位置。   public static string sApplicationPath = Assembly.GetExecutingAssembly ( ).Location;  //result: X:\xxx\xxx\xxx.dll (.dll文件所在的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,227
精华内容 22,490
关键字:

exe文件如何读取指定文件内的dll