如何检测Windows 2012 Core Edition(C )
How to detect Windows 2012 Core edition (C++)
我需要在我的程序中检测到Windows 2012上的版本。
在上一个操作系统上,我使用了getProductinfo的pdwreturnedproducttype,但根据MSDN:
产品_*_ server_core值在Windows Server 2012中未返回。例如,基本服务器
服务器数据中心版本用于构建两个不同的安装选项:"完整服务器"
和"核心服务器"。使用Windows Server 2012,GetProductInfo将返回product_datacenter 无论产品安装过程中使用的选项如何。
还有其他可能检测核心版本的可能性吗?
谢谢。
HKLMSoftwareMicrosoftWindows NTCurrentVersionServerServerLevels
ServerCore = 1
Server-Gui-Mgmt = 1
Server-Gui-Shell = 1
根据MSDN使用这些注册表值是一种方法。另一个是解析DIMS /online /get-features /format:table
的输出,看看是否启用或禁用了功能ServerCore-fullserver。如果它禁用了它,则您处于ServerCore Gui-nose模式。
您可以创建一个程序/函数,该程序/功能为.NET的Core Edition中不存在的功能/库来测试。例如:
using System;
public class CoreChecker
{
public static void Main(string args[])
{
try
{
ImportNonCoreComponent();
Console.WriteLine("NonCoreAssembly found... this is full server.");
}
catch (Exception e)
{
Console.WriteLine("NonCoreAssembly not found... this is core server.");
}
}
public static void ImportNonCoreComponent()
{
using NonCoreAssembly;
}
}
如果这不起作用,则需要将使用的使用移至类范围,然后从entimentnoncorecomponent中的noncoreassembly创建一个类(我不记得它如何工作的确切语义)。
注意:需要将使用语句隔离到测试功能。当JIT编译器对其进行处理时,它将引发例外。该例外将不会由测试功能处理,因此尝试... catch语句需要在称为它的方法中。
您可以使用此技术在MSI中实现自定义操作以在安装过程中失败,或将其用作C#应用程序的一部分,以传达一条消息,说"您需要使用完整的服务器"。(如果他们安装应用程序然后降级为核心,则可以工作)。
如果差异是行为的,则可以在测试功能中检查该行为。
确保测试功能在不同的方案和不同的.NET版本中起作用。
实际上,我找不到任何正确的方法来检测Windows Core Edition。
因此,对于WIN 2012来说,该解决方案是为了检测DWM.EXE流程正在运行(桌面窗口管理器)。它总是在运行,不能被用户杀死,也不存在于Windows Core版本上。
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- C++包含来自 #include "DevEngine/Core.h" 的错误
- 是否可以在Linux上使用.Net Core 3.1创建C++/CLI代码的C#DLL
- 构建 TensorFlow r1.14 C++文件时缺少文件"tensorflow/core/framework/types.pb.h"
- 不要使用静态强制转换进行算术转换(cpp-core-guidelines)
- C++ DLL(不是 CLI)是否可以调用 .NET Core 3.0 委托?
- C++/CLI targetting .NET Core 3.1
- 同时使用Opengl CORE函数以及Comptability Profile - GLFW
- 是否有可能构建面向Linux和Windows的.Net Core C++ / CLI应用程序?
- 为什么此代码中显示"*** stack smashing detected ***: <unknown> terminated Aborted (core dumped) "错误?
- 避免在使用WinAPI(Windows Core Audio)时无效的指针
- 在.NET Core 3.1中运行托管C++/CLI程序集时,映像格式错误
- 以C++为目标的Windows Server Core
- 无法将 c# .Net Core 3.0 与 directx 9.0 依赖项链接
- 如何从.NET Core调用cygwin编译的C++
- 在.NET Core中是否有与DllImport等效的Linux?
- 如何修复访问动态数组中结构中的字符串变量时"segmentation fault (core dumped)"错误
- 将结构数组从 C#(.NET Core) 传递到 C++(unamnaged)
- Linux 上的 .NET Core - 元帅结构
- 如何检测Windows 2012 Core Edition(C )