C# - 操作系统的入口点检查

时间:2016-01-03 18:13:54

标签: c# exception exit monogame entry-point

所以我的SQL = "select * from tbluser Where doj >=#" & DateTimePicker1.Text & " # and <=#" & DateTimePicker2.Text & "#" acscmd = New OleDbCommand(SQL, acsconn) acscmd.CommandType = CommandType.Text acsdr = acscmd.ExecuteReader If acsdr.Read = True Then Label1.Text = (acsdr.GetValue(0).ToString()) End If 看起来像这样:

Program.cs

所以我的问题是我真的可以这样做吗? using System; using System.Windows.Forms; using myProj.GameScreens; namespace myProj { #if WINDOWS /// <summary> /// The main class. /// </summary> public static class Program { static StartScreen startScreen; static MainGame mainGame; /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { mainGame = new MainGame(); startScreen = new StartScreen(); Application.EnableVisualStyles(); if (startScreen.ShowDialog() == DialogResult.OK) mainGame.Run(); } } #else System.Environment.Exit(1); #endif } 指令中的代码是否可以访问?如果应用程序没有从Windows操作系统启动,如何退出应用程序?或者我可以使用#else吗? Exception不会在其他操作系统上运行,所以我该怎么办?即使没有Win32Exception,代码也会退出吗?

选项#1:退出应用程序,如果不是Windows

选项#2:告诉用户该应用需要Windows并退出(可能是自定义异常?也是首选。)

我有一些代码严重依赖于#else所以我只能使用Windows。是的,你猜对了,它是一个Windows MonoGame入口点类。

1 个答案:

答案 0 :(得分:2)

这不起作用,因为#if是一个编译时操作,它改变了可执行文件的生成方式。

如果您在Windows上编译并尝试在其他地方运行它,则会尝试(并且失败)运行该程序。

您需要编写用于操作系统运行时检查的代码。 Environment.OSVersion属性可能就是您所需要的,但它返回一个您需要解析的字符串。另请注意:

  

在某些情况下,OSVersion属性可能不会返回与为Windows程序兼容性模式功能指定的版本匹配的操作系统版本。

Source

至于你的行为方式,没有必要明确调用Exit。如果你不做任何其他事情,你的程序将会停止。虽然您的测试必须 Main