繁体   English   中英

在运行时以编程方式读取目标平台

[英]Programmatically read target platform during run time

我想知道(出于记录目的)存储应用程序是否已针对x86 / x64 / AnyCPU / Win32进行了编译。

我什么都找不到,但是似乎该信息在运行时应该可用。

转到项目属性,然后为每个平台添加“ 条件编译”符号 (在“ 构建”选项卡中)。 假设PLATFORM_X86PLATFORM_X64PLATFORM_ANYCPU (您也可以从命令行使用/D选项)。

您可以在代码中使用以下符号:

#if PLATFORM_X86
    // Code specific for X86 builds
#endif

如果您需要记录日志,则可以简单地声明一个常量,例如:

#if PLATFORM_X86
private const string Platform = "X86";
#elif PLATFORM_X64
private const string Platform = "X64";
#elif PLATFORM_ANYCPU
private const string Platform = "AnyCPU";
#endif

当然,在为AnyCPU进行编译时,您可以使用Environment.Is64BitProcess来知道您在哪里运行。

使用IntPtr.Size以这种方式尝试

var result="";
if (IntPtr.Size == 8)
      result= "x64";
else
      result="x86";

下一个方法在Windows-store-apps中不起作用,因为@Adriano Repetti标记了我。
我不会仅出于社区原因将其删除。

另一种方法是使用\\[Module.GetPEKind Method\\]

 Assembly assembly = Assembly.GetExecutingAssembly();
 PortableExecutableKinds p;
 ImageFileMachine machineInfo;
 assembly .ManifestModule.GetPEKind(out p, out machineInfo);

在这行代码之后, machineInfo变量应为以下之一:

  1. 针对64位AMD处理器的AMD64
  2. ARM为ARM处理器
  3. 适用于32位Intel处理器的I386
  4. IA64用于64位Intel处理器)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM