C# WPF 创建一个动态程序集并将 MAC 地址保存到程序集中的 ManifestResource 中读取该程序集后获取MAC地址后中断
以下是一个示例代码,演示如何创建一个动态程序集,并将 MAC 地址保存到程序集的 ManifestResource 中,并在读取程序集后获取 MAC 地址:
using System;
using System.IO;
using System.Net.NetworkInformation;
using System.Reflection;
using System.Resources;
namespace DynamicAssemblyExample
{
class Program
{
static void Main(string[] args)
{
// 获取 MAC 地址
string macAddress = GetMacAddress();
// 创建动态程序集
Assembly dynamicAssembly = CreateDynamicAssembly(macAddress);
// 保存程序集到文件
string assemblyPath = SaveAssemblyToFile(dynamicAssembly);
// 读取程序集
Assembly loadedAssembly = Assembly.LoadFile(assemblyPath);
// 从程序集的 ManifestResource 中获取 MAC 地址
string loadedMacAddress = GetMacAddressFromAssembly(loadedAssembly);
// 验证读取到的 MAC 地址是否与保存的 MAC 地址相同
if (loadedMacAddress == macAddress)
{
Console.WriteLine("MAC 地址读取成功!");
}
else
{
Console.WriteLine("MAC 地址读取失败!");
}
Console.ReadLine();
}
static string GetMacAddress()
{
// 获取第一个网卡的 MAC 地址
NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
if (networkInterfaces.Length > 0)
{
return networkInterfaces[0].GetPhysicalAddress().ToString();
}
return string.Empty;
}
static Assembly CreateDynamicAssembly(string macAddress)
{
// 创建动态程序集
AssemblyName assemblyName = new AssemblyName("DynamicAssembly");
AssemblyBuilder assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
// 创建动态模块
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("DynamicModule", "DynamicAssembly.dll");
// 创建资源写入器
ResourceWriter resourceWriter = new ResourceWriter("DynamicAssembly.resources");
// 将 MAC 地址保存到资源文件中
resourceWriter.AddResource("MACAddress", macAddress);
// 保存资源文件
resourceWriter.Generate();
// 创建类型并保存到动态模块中
TypeBuilder typeBuilder = moduleBuilder.DefineType("DynamicType", TypeAttributes.Public);
typeBuilder.CreateType();
// 保存动态程序集到文件
assemblyBuilder.Save("DynamicAssembly.dll");
return assemblyBuilder;
}
static string SaveAssemblyToFile(Assembly dynamicAssembly)
{
// 保存动态程序集到文件
string assemblyPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DynamicAssembly.dll");
File.WriteAllBytes(assemblyPath, dynamicAssembly.GetRawAssembly());
return assemblyPath;
}
static string GetMacAddressFromAssembly(Assembly assembly)
{
// 从程序集的 ManifestResource 中获取 MAC 地址
using (Stream resourceStream = assembly.GetManifestResourceStream("DynamicAssembly.resources"))
{
if (resourceStream != null)
{
using (ResourceReader resourceReader = new ResourceReader(resourceStream))
{
foreach (DictionaryEntry entry in resourceReader)
{
if (entry.Key.ToString() == "MACAddress")
{
return entry.Value.ToString();
}
}
}
}
}
return string.Empty;
}
}
}
请注意,此代码需要在具有管理员权限的环境中运行,以获取系统的 MAC 地址
原文地址: https://www.cveoy.top/t/topic/hPIa 著作权归作者所有。请勿转载和采集!