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(); } }