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入门级。
这将不起作用,因为#if
是一个更改可执行文件生成方式的编译时操作。
如果你在Windows上编译了这个程序,并试图在其他地方运行它,它会尝试(但失败)运行该程序。
您需要为操作系统的运行时检查编写代码。Environment.OSVersion
属性可能正是您所需要的,但它会返回一个需要解析的字符串。另请注意:
在某些情况下,OSVersion属性可能不会返回与为Windows程序兼容性模式功能指定的版本匹配的操作系统版本。
源
至于你的行为,没有必要明确地调用Exit
。如果你不做任何其他事情,你的程序无论如何都会停止。尽管您的测试必须在Main
内部。