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

本文关键字:检查 入口 操作系统 C#- | 更新日期: 2023-09-27 18:28:52

所以我的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
}

所以我的问题是,我真的能做这样的事情吗?#else指令中的代码是否可访问?如果应用程序不是从windows操作系统启动的,如何退出?或者我可以使用Exception吗?Win32Exception无法在其他操作系统上工作,我该怎么办?即使没有#else,代码也会退出吗?

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

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

我有一些严重依赖[DllImport("user32.dll"]的代码,所以我只能使用windows。是的,你猜对了,这是一个Windows MonoGame入门级。

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

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

如果你在Windows上编译了这个程序,并试图在其他地方运行它,它会尝试(但失败)运行该程序。

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

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

至于你的行为,没有必要明确地调用Exit。如果你不做任何其他事情,你的程序无论如何都会停止。尽管您的测试必须在Main内部