如何在我的WPF應用程序中使用C#代碼獲取操作系統細節?在C#中標識操作系統細節
8
A
回答
13
Environment類提供了properties可用於獲取系統信息。
4
看一看System.Environment它擁有財產OSVersion
6
您可以從系統中獲取操作系統信息。 Environment.OSVersion Here
2
因爲我只需要關心非服務器版本的,我做的:
enum OS { _2000, XP, Vista, _7, _8 }
public static OS GetOS()
{
var version = Environment.OSVersion.Version;
switch (version.Major)
{
case 5:
switch (version.Minor)
{
case 0:
return OS._2000;
case 1:
return OS.XP;
case 2:
return OS.XP; //could also be Server 2003, Server 2003 R2
}
break;
case 6:
switch (version.Minor)
{
case 0:
return OS.Vista; //could also be Server 2008
case 1:
return OS._7; //could also be Server 2008 R2
case 2:
return OS._8; //could also be Server 20012, Server 2012 R2
}
break;
}
throw new Exception("Strange OS");
}
如果你真的需要考慮服務器版本爲好,那麼你的選擇是:
WMI,你將不得不進行一些手動解析。不知道用戶權限是否會傷害非管理員用戶。
GetVersionEx如在this answer中所述。
在
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
IsOS功能檢查
ProductName
,如在this answer說明。我更喜歡這個..
我提供了一個更完整的答案here。
0
使用註冊表是任何應用程序都可以使用的。在C#中,我爲此做了一個實用類。請注意,微軟已經改變了Windows 10+的密鑰(該類旨在處理這個問題)。這個班級應該給你你需要的信息,我認爲:
namespace Inspection
{
/// <summary>
/// Static class that adds convenient methods for getting information on the running computers basic hardware and os setup.
/// </summary>
public static class ComputerInfo
{
/// <summary>
/// Returns the Windows major version number for this computer.
/// </summary>
public static uint WinMajorVersion
{
get
{
dynamic major;
// The 'CurrentMajorVersionNumber' string value in the CurrentVersion key is new for Windows 10,
// and will most likely (hopefully) be there for some time before MS decides to change this - again...
if (TryGeRegistryKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentMajorVersionNumber", out major))
{
return (uint) major;
}
// When the 'CurrentMajorVersionNumber' value is not present we fallback to reading the previous key used for this: 'CurrentVersion'
dynamic version;
if (!TryGeRegistryKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentVersion", out version))
return 0;
var versionParts = ((string) version).Split('.');
if (versionParts.Length != 2) return 0;
uint majorAsUInt;
return uint.TryParse(versionParts[0], out majorAsUInt) ? majorAsUInt : 0;
}
}
/// <summary>
/// Returns the Windows minor version number for this computer.
/// </summary>
public static uint WinMinorVersion
{
get
{
dynamic minor;
// The 'CurrentMinorVersionNumber' string value in the CurrentVersion key is new for Windows 10,
// and will most likely (hopefully) be there for some time before MS decides to change this - again...
if (TryGeRegistryKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentMinorVersionNumber",
out minor))
{
return (uint) minor;
}
// When the 'CurrentMinorVersionNumber' value is not present we fallback to reading the previous key used for this: 'CurrentVersion'
dynamic version;
if (!TryGeRegistryKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentVersion", out version))
return 0;
var versionParts = ((string) version).Split('.');
if (versionParts.Length != 2) return 0;
uint minorAsUInt;
return uint.TryParse(versionParts[1], out minorAsUInt) ? minorAsUInt : 0;
}
}
/// <summary>
/// Returns whether or not the current computer is a server or not.
/// </summary>
public static uint IsServer
{
get
{
dynamic installationType;
if (TryGeRegistryKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion", "InstallationType",
out installationType))
{
return (uint) (installationType.Equals("Client") ? 0 : 1);
}
return 0;
}
}
private static bool TryGeRegistryKey(string path, string key, out dynamic value)
{
value = null;
try
{
var rk = Registry.LocalMachine.OpenSubKey(path);
if (rk == null) return false;
value = rk.GetValue(key);
return value != null;
}
catch
{
return false;
}
}
}
}
相關問題
- 1. 備份Android操作系統的細節
- 2. 在Prolog中識別操作系統
- 3. 識別操作系統
- 4. 是否有可能獲得詳細的Windows操作系統在c#中的最後一個備份細節?
- 5. C#for 64bit操作系統?
- 6. 指紋識別操作系統
- 7. 確定從32位操作系統或64位操作系統C/C++應用
- 8. 操作系統
- 9. 如何唯一標識計算機上的操作系統?
- 10. 設置操作系統標誌來測試操作系統的具體功能
- 11. Chrome操作系統在VMPlayer
- 12. 操作系統中斷
- 13. FASM操作系統
- 14. Linux操作系統
- 15. 操作系統 - TLB
- 16. 在ChromeWorker內檢測操作系統詳細信息
- 17. android更改目標操作系統
- 18. libumem是否僅在Solaris操作系統或其他操作系統中可用?
- 19. C++檢測操作系統版本
- 20. C#操作系統安裝目錄
- 21. 從C調用操作系統設置#
- 22. 使用C++編寫操作系統
- 23. Android操作系統更新系統
- 24. 預定義爲iPhone操作系統和Mac操作系統
- 25. jQuery - 檢測操作系統和操作系統版本
- 26. 開放源代碼雲操作系統/操作系統架構
- 27. 在C#中獲取唯一的系統標識符
- 28. 在操作系統中搜索文件
- 29. 在Clojure中檢測操作系統
- 30. 在Ubuntu操作系統中生成UUID