1. 程式人生 > 其它 >C#判斷DLL檔案是32位還是64位

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 許可協議。轉載請註明出處!
聲援博主:如果您覺得文章對您有幫助,可以掃一掃,任意打賞,您的鼓勵是博主的最大動力!