Windows版本在设计中显示真实价值,但在运行程序时显示不同的值

时间:2017-05-29 10:57:43

标签: c# wpf windows-10

我正在开发一个WPF MVVM个应用来展示一些Windows System Informations并练习一些MVVM

设计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>

我的ViewModel

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

如何在运行后获得正确的版本以及为什么会发生这种情况?

1 个答案:

答案 0 :(得分:4)

这种情况正在发生,因为您的应用程序不适用于Windows 8.1或更高版本。

当非显示的应用程序调用{​​{3}}时,如果该操作系统的更高版本在该操作系统上运行,则该函数将返回Windows 8.0的版本号。

要解决此问题,您需要显示您要支持的Windows版本的应用程序。

为此,您需要GetVersionEx()

例如:

<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的上下文中调用了获取版本号。