2017-05-29 35 views
1

我正在開發WPFMVVM應用程序以顯示一些Windows System Informations並練習一些MVVMWindows版本在設計中顯示真實值,但在運行程序時顯示不同的值

不知何故設計Environment.OSVersion.ToString()工作正常,但調試後沒有。我試過調試和發佈模式,但沒有任何改變。

「的Microsoft Windows NT 10.0.15063.0」 被顯示在設計時間:

「的Microsoft Windows NT 6.2.9200.0」 在當我運行該軟件顯示:

我用戶控件

<UserControl.DataContext> 
    <viewModels:WindowsVersionViewModel /> 
</UserControl.DataContext> 
<Grid> 
    <TextBox IsReadOnly="True" 
      HorizontalAlignment="Left" 
      VerticalAlignment="Top" 
      Text="{Binding Path=Version, Mode=OneWay}" /> 
</Grid> 

我的視圖模型

public class WindowsVersionViewModel : ObservableObject { 
    public string Version { get; } = Environment.OSVersion.ToString(); 
} 

如何在運行後得到正確的版本以及爲什麼會發生這種情況?

+1

此調用不建議從文檔中找到。 「從Windows 8開始,OSVersion屬性將爲所有Windows平臺返回相同的主要和次要版本號,因此,我們不建議您檢索此屬性的值以確定操作系統版本。」 – Steve

回答

4

發生這種情況是因爲您的應用程序不適用於Windows 8.1或更高版本。

當一個非顯式應用程序調用GetVersionEx()時,如果該函數在較新版本的OS上運行,該函數將返回Windows 8.0的版本號。

要解決此問題,您需要爲您希望支持的Windows版本顯示應用程序。

爲此,您需要​​。

例如:

<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
     <!-- A list of the Windows versions that this application has been tested on and is 
      is designed to work with. Uncomment the appropriate elements and Windows will 
      automatically selected the most compatible environment. --> 

     <!-- Windows Vista --> 
     <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />--> 

     <!-- Windows 7 --> 
     <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" /> 

     <!-- Windows 8 --> 
     <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" /> 

     <!-- Windows 8.1 --> 
     <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" /> 

     <!-- Windows 10 --> 
     <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" /> 
    </application> 
</compatibility> 

這部作品在設計師的原因是因爲Visual Studio是表現爲Windows 10,並獲得版本號碼的呼叫在Visual Studio的背景下正在取得進展。

+0

這解決了我的問題,謝謝。 ,但是這仍然不適合我:D – tetralobita

+0

請放心,這是絕對正確的@tetralobita。 Visual Studio正確顯示,因此在設計時報告實際的操作系統版本。您的應用程序沒有正確顯示,因此操作系統在運行時會告訴您它的實際版本是什麼。 –

+1

順便說一句,提到這種行爲是爲了向後兼容性考慮而選擇的,並且這在設計良好的應用程序中不是問題可能是有用的。你不應該進行版本號檢查;相反,您應該檢查對特定功能的支持。 –

相關問題