zoukankan      html  css  js  c++  java
  • C#判断DLL文件是32位还是64位

    using System;
    using System.IO;
    
    namespace GetDllVersionDemo
    {
        /// <summary>
        ///     https://www.cnblogs.com/LifeDecidesHappiness/p/15711169.html
        ///     C#判断DLL文件是32位还是64位
        ///     LDH @ 2021-12-20
        /// </summary>
        internal class Program
        {
            private static void Main()
            {
                Console.Title = "C#判断DLL文件是32位还是64位";
    
                GetDll32Or64();
    
                Console.ReadKey();
            }
    
            private static void GetDll32Or64()
            {
                var dllPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Dll\IBM.Data.Informix.dll");
                var result = GetPeArchitecture(dllPath);
                //523 64位    267 32位
                if (result == 523)
                    Console.WriteLine(dllPath + "是【64】位的dll");
                else if (result == 267)
                    Console.WriteLine(dllPath + "是【32】位的dll");
                else
                    Console.WriteLine("执行错误!");
            }
    
            /// <summary>
            ///     获取dll文件是32位还是64位
            ///     523 64位    267 32位
            /// </summary>
            /// <param name="dllFilePath">dll文件路径</param>
            /// <returns></returns>
            public static ushort GetPeArchitecture(string dllFilePath)
            {
                ushort architecture = 0;
    
                try
                {
                    using (var fStream = new FileStream(dllFilePath, FileMode.Open, FileAccess.Read))
                    {
                        using (var bReader = new BinaryReader(fStream))
                        {
                            if (bReader.ReadUInt16() == 23117) //check the MZ signature
                            {
                                fStream.Seek(0x3A, SeekOrigin.Current); //seek to e_lfanew.
                                fStream.Seek(bReader.ReadUInt32(), SeekOrigin.Begin); //seek to the start of the NT header.
                                if (bReader.ReadUInt32() == 17744) //check the PE\0\0 signature.
                                {
                                    fStream.Seek(20, SeekOrigin.Current); //seek past the file header,
                                    architecture = bReader.ReadUInt16(); //read the magic number of the optional header.
                                }
                            }
                        }
                    }
                }
                catch
                {
                    // ignored
                }
    
                // if architecture returns 0, there has been an error.
                return architecture;
            }
        }
    }

     

     

    本文作者:Love In Winter
    本文链接:https://www.cnblogs.com/LifeDecidesHappiness/p/15711169.html
    版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
    声援博主:如果您觉得文章对您有帮助,可以扫一扫,任意打赏,您的鼓励是博主的最大动力!
    扫一扫,支付宝打赏 扫一扫,微信打赏
  • 相关阅读:
    从零到一搭建测试框架
    一文说懂join和setDaemon
    工具代码-timeout
    算法-广度优先遍历-实战-多轮状态
    调用百度AI新闻摘要API
    基于numpy用滑窗方差的办法确定曲线拐点
    python实现离线语音识别
    图床
    传智课堂的授课方案
    C#后台程序与HTML页面中JS方法互调
  • 原文地址:https://www.cnblogs.com/LifeDecidesHappiness/p/15711169.html
Copyright © 2011-2022 走看看