我试图确定什么的SQL Server实例/ SQL Express的我已经安装了(手动或编程),但所有的例子都告诉我运行一个SQL查询,以确定这里面假设我已经连接到特定实例.
Microsoft于2018年10月2日发布了Windows Server 2019.从Windows 2000到Windows版本,您可以使用结构OSVERSIONINFOEX并根据变量调用WinAPI函数GetVersionEx,并确定Windows版本,例如Windows 8.1, Windows 10,Windows Server 2012 R2.每个人使用的代码都是这样的:dwMajorVersion
dwMinorVersion
wProductType
OSVERSIONINFOEX osvi;
SecureZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if (GetVersionEx(&osvi)) {
if (osvi.dwMajorVersion == 10 &&
osvi.dwMinorVersion == 0 &&
osvi.wProductType != VER_NT_WORKSTATION) {
Console->Log("We are running on Windows Server 2016");
}
}
Run Code Online (Sandbox Code Playgroud)
从维基百科来看,Windows Server 2019与Server 2016具有相同的NT 10.0版本号.因此上述代码不再起作用.
此外,Microsoft Docs包含以下注释:Windows 8.1之后的版本可能会更改或不可用GetVersionEx.而是使用版本助手功能.
不幸的是,版本助手功能没有检测服务器2019的功能.另外,奇怪的是,关于目标的文档页面在Windows 10停止,并且没有谈论服务器版本,而这些目标清单是检测操作系统必需的在Windows 8.1或Server 2012之上.
更新1.
由于@IInspectable和@RbMm评论了RtlGetVersion
函数的用法.所以我运行了以下代码(取自这个答案):
typedef LONG NTSTATUS, *PNTSTATUS;
#define STATUS_SUCCESS …
Run Code Online (Sandbox Code Playgroud) 我试图在c ++中读取Windows 7中注册表的"(默认)"值,以下是我正在使用的代码:
string GetSZValueUnique( HKEY openKey, const char* regkey, const char* keyName )
{
HKEY hKey = 0;
BYTE data[512] ;
DWORD szsize = 512 ;
string value ;
LONG retValue = RegOpenKeyEx( openKey, regkey, 0, KEY_READ, &hKey ) ;
if ( retValue == ERROR_SUCCESS )
{
LONG retV = RegQueryValueEx( hKey, keyName, 0, 0, data, &szsize ) ;
if ( retV == ERROR_SUCCESS )
{
char* _value = reinterpret_cast<char*>(data) ;
value = _value ;
RegCloseKey (hKey) ;
return …
Run Code Online (Sandbox Code Playgroud) 有一个REG_MULTI_SZ值,我想在一个字符串数组中,以便我的程序可以用它们做其他事情.我从来没有使用过C++来访问注册表,所以在按照一些例子后我有点迷失了.我正在使用VS10.
有一个简单的方法吗?谢谢.