Предполагая, что testFunction()
не является тривиальным и / или что его нельзя изменить, его можно обернуть в свою собственную функцию с помощью блока tryCatch (). Например:
> FaultTolerantTestFunction <- function(date_in) {
+ tryCatch({ret <- testFunction(date_in);}, error = function(e) {ret <<- NA});
+ ret
+ }
> FaultTolerantTestFunction('bozo')
[1] NA
> FaultTolerantTestFunction('2010-03-21')
[1] "2010-03-21"
в соответствии с официальной ссылкой MSDN есть определенный номер версии для каждой версии Windows. в dot net это можно прочитать с помощью объекта Environment.OSVersion.
Console.WriteLine("OSVersion: {0}", Environment.OSVersion);
//output: OSVersion: Microsoft Windows NT 6.2.9200.0
То, что вы ищете, называется ReleaseID, а не версией окон. это можно прочитать из раздела реестра:
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion\releaseId
using Microsoft.Win32;
string releaseId = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ReleaseId", "").ToString();
Console.WriteLine(releaseId);
В дополнение к ответу Скотта вы также можете получить имя продукта (например, Windows 10 Pro) с этим (* я не беру кредит, так как Скотт является тем, кто упомянул путь к реестру +, я повторно использую его код ниже) :
using Microsoft.Win32;
string ProductName =
Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName", "").ToString();
Console.WriteLine(ProductName);
private static ManagementObject GetMngObj(string className)
{
var wmi = new ManagementClass(className);
foreach (var o in wmi.GetInstances())
{
var mo = (ManagementObject)o;
if (mo != null) return mo;
}
return null;
}
public static string GetOsVer()
{
try
{
ManagementObject mo = GetMngObj("Win32_OperatingSystem");
if (null == mo)
return string.Empty;
return mo["Version"] as string;
}
catch (Exception e)
{
return string.Empty;
}
}
Как использовать:
Console.WriteLine(GetOsVer());
Результат: 10.0.0.1299