我正在开发一个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();
}
如何在运行后获得正确的版本以及为什么会发生这种情况?
答案 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的上下文中调用了获取版本号。