C#静态构造函数和GetVersion()有什么建议吗?

时间:2010-05-11 14:17:03

标签: c# static constructor

C#静态构造函数和GetVersion()有什么建议吗?

您好, 我在单独的文件OSVERSIONINFO.cs中定义了这样的结构,如下所示:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct OSVERSIONINFO
{
    public static int SizeOf 
    {
        get 
        { 
            return Marshal.SizeOf (typeof(OSVERSIONINFO)); 
        }
    }

    public uint dwOSVersionInfoSize;
    public uint dwMajorVersion;
    public uint dwMinorVersion;
    public uint dwBuildNumber;
    public uint dwPlatformId;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
    public string szCSDVersion;
}

我还有这个文件OS.cs,我在其中定义了以下类:

public static class OS
{
    static OS ()
    {
        OSVERSIONINFO info = new OSVERSIONINFO();
        info.dwOSVersionInfoSize = (uint)OSVERSIONINFO.SizeOf;

        if (!OS.GetVersion(ref info)) 
        {
            Console.WriteLine("Error!!!");
        }

    }

    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool GetVersion (ref OSVERSIONINFO lpVersionInfo);
}

OS类的静态构造函数方式(OSVERSIONINFO结构的实例)失败了吗? 如果我在其他地方(不是OS类)调用OS.GetVersion,那么每件事情都可以吗?

2 个答案:

答案 0 :(得分:8)

您应该使用Environment.OSVersion.Platform property代替。

答案 1 :(得分:0)

要回答这个问题,您需要致电GetVersionEx