Reputation: 455
I am developing a WPF
MVVM
application to show some Windows System Informations
and practice some MVVM
.
Somehow in design Environment.OSVersion.ToString()
works correctly but after debug it does not. I tried debug and release modes but nothing is changed.
"Microsoft Windows NT 10.0.15063.0" was shown in design time:
"Microsoft Windows NT 6.2.9200.0" was shown in when I run the software:
My UserControl
<UserControl.DataContext>
<viewModels:WindowsVersionViewModel />
</UserControl.DataContext>
<Grid>
<TextBox IsReadOnly="True"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Text="{Binding Path=Version, Mode=OneWay}" />
</Grid>
My ViewModel
public class WindowsVersionViewModel : ObservableObject {
public string Version { get; } = Environment.OSVersion.ToString();
}
How can I get correct version after run and why this happens?
Upvotes: 1
Views: 257
Reputation: 109732
This is happening because your application is not manifested for Windows 8.1 or later.
When a non-manifested application makes a call to GetVersionEx()
, that function will return the version number of Windows 8.0 if it is run on later versions of the OS.
To fix this you need to manifest your application for the versions of Windows that you want to support.
To do so, you need to add something to you application's app.manifest
in the "compatibility" section.
For example:
<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>
The reason this works in the designer is because Visual Studio is manifested for Windows 10, and the call to get the version number is being made in the context of Visual Studio.
Upvotes: 4