首先我想說謝謝你幫助我解決這個問題。我非常感謝你的時間和努力。Powershell WMI輸出不匹配c#WMI輸出
標題總結得非常好,但我會提供一些細節。基本上,如果我使用C#提取操作系統版本,它將返回6.2的結果,即使我的系統是8.1,應該返回6.3。經過我的研究,我發現這是System.Enviroment類中的一個有記錄的限制,...必須愛這些「功能」。
我已經找到了一種方法來處理這個問題,方法是進入reg並將我的6.2結果與HKLM \ SOFTWARE \ Microsoft \ WindowsNT \ CurrentVersion下的當前版本關鍵字進行比較,但這是一項非常冒險的操作,因爲reg info如有更改,恕不另行通知
當我試圖通過Powershell輪詢WMI時,這一切都變得很棘手。我不記得爲什麼我做了一個WMI搜索雖然PowerShell中,我猜它是感到好奇:)
C#代碼不只是貓:
string version = Environment.OSVersion.ToString();
MessageBox.Show(version);
//Output "Microsoft Windows NT 6.2.9200.0"
Powershell代碼:
[System.Environment]::OSVersion | Select-Object -Property VersionString
//OUtput "Microsoft Windows NT 6.3.9600.0"
我曾經嘗試都x86和x64建立我的C#程序以及運行PowerShell的x86和x64的。差異沒有改變。
這給我提出了幾個問題,但最基本的是Powershell從哪裏得到正確的信息? Powershell是否像我原計劃修改其輸出一樣使用reg?由於我的構建目標.Net 3.5確實將Powershell拉到.Net 4.5(改變了我的構建,這沒有任何改變)。
從我的理解[System.Environment] :: OSVersion將信息與System.Environment.OSVersion相同。
Powershell如何工作和C#失敗?
:) 再次感謝!
Windows中的版本檢查不斷髮展。顯然.Net OSVersion屬性返回Windows [GetVersionEx](http://technet.microsoft.com/en-us/windows/system.environment.osversion(v = vs.99).aspx)函數報告的版本。 根據[本文](http://msdn.microsoft.com/en-us/library/windows/desktop/dn302074.aspx)「我們對GetVersion(Ex)API在Windows中的工作方式做了一些重大更改8.1由於過去使用GetVersion(Ex)API的方式導致客戶不良行爲。「該頁面上的詳細信息可幫助您將C#排序。 – 2014-11-20 21:06:53