コード例 #1
0
ファイル: Program.cs プロジェクト: 0x00000FF/Emuera
        static void Main(string[] args)
        {
            ExeDir = Sys.ExeDir;
#if DEBUG
            //debugMode = true;

            //ExeDirにバリアントのパスを代入することでテスト実行するためのコード。
            //ローカルパスの末尾には\必須。
            //ローカルパスを記載した場合は頒布前に削除すること。
            ExeDir = @"";
#endif
            CsvDir     = ExeDir + "csv\\";
            ErbDir     = ExeDir + "erb\\";
            DebugDir   = ExeDir + "debug\\";
            DatDir     = ExeDir + "dat\\";
            ContentDir = ExeDir + "resources\\";
            //エラー出力用
            //1815 .exeが東方板のNGワードに引っかかるそうなので除去
            ExeName = Path.GetFileNameWithoutExtension(Sys.ExeName);

            //解析モードの判定だけ先に行う
            int argsStart = 0;
            if ((args.Length > 0) && (args[0].Equals("-DEBUG", StringComparison.CurrentCultureIgnoreCase)))
            {
                argsStart = 1;                //デバッグモードかつ解析モード時に最初の1っこ(-DEBUG)を飛ばす
                debugMode = true;
            }
            if (args.Length > argsStart)
            {
                //必要なファイルのチェックにはConfig読み込みが必須なので、ここではフラグだけ立てておく
                AnalysisMode = true;
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            ConfigData.Instance.LoadConfig();
            //二重起動の禁止かつ二重起動
            if ((!Config.AllowMultipleInstances) && (Sys.PrevInstance()))
            {
                MessageBox.Show("多重起動を許可する場合、emuera.configを書き換えて下さい", "既に起動しています");
                return;
            }
            if (!Directory.Exists(CsvDir))
            {
                MessageBox.Show("csvフォルダが見つかりません", "フォルダなし");
                return;
            }
            if (!Directory.Exists(ErbDir))
            {
                MessageBox.Show("erbフォルダが見つかりません", "フォルダなし");
                return;
            }
            if (debugMode)
            {
                ConfigData.Instance.LoadDebugConfig();
                if (!Directory.Exists(DebugDir))
                {
                    try
                    {
                        Directory.CreateDirectory(DebugDir);
                    }
                    catch
                    {
                        MessageBox.Show("debugフォルダの作成に失敗しました", "フォルダなし");
                        return;
                    }
                }
            }
            if (AnalysisMode)
            {
                AnalysisFiles = new List <string>();
                for (int i = argsStart; i < args.Length; i++)
                {
                    if (!File.Exists(args[i]) && !Directory.Exists(args[i]))
                    {
                        MessageBox.Show("与えられたファイル・フォルダは存在しません");
                        return;
                    }
                    if ((File.GetAttributes(args[i]) & FileAttributes.Directory) == FileAttributes.Directory)
                    {
                        List <KeyValuePair <string, string> > fnames = Config.GetFiles(args[i] + "\\", "*.ERB");
                        for (int j = 0; j < fnames.Count; j++)
                        {
                            AnalysisFiles.Add(fnames[j].Value);
                        }
                    }
                    else
                    {
                        if (Path.GetExtension(args[i]).ToUpper() != ".ERB")
                        {
                            MessageBox.Show("ドロップ可能なファイルはERBファイルのみです");
                            return;
                        }
                        AnalysisFiles.Add(args[i]);
                    }
                }
            }
            MainWindow win = null;
            while (true)
            {
                StartTime = WinmmTimer.TickCount;
                using (win = new MainWindow())
                {
                    Application.Run(win);
                    Content.AppContents.UnloadContents();
                    if (!Reboot)
                    {
                        break;
                    }

                    RebootWinState = win.WindowState;
                    if (win.WindowState == FormWindowState.Normal)
                    {
                        RebootClientY  = win.ClientSize.Height;
                        RebootLocation = win.Location;
                    }
                    else
                    {
                        RebootClientY  = 0;
                        RebootLocation = new Point();
                    }
                }
                //条件次第ではParserMediatorが空でない状態で再起動になる場合がある
                ParserMediator.ClearWarningList();
                ParserMediator.Initialize(null);
                GlobalStatic.Reset();
                //GC.Collect();
                Reboot = false;
                ConfigData.Instance.ReLoadConfig();
            }
        }