OSDN Git Service

#24606 Debug版に限り、最終的な例外のキャッチを行わないようにした。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / 全体 / Program.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Globalization;\r
4 using System.Text;\r
5 using System.Runtime.InteropServices;\r
6 using System.Threading;\r
7 using System.Diagnostics;\r
8 using System.Windows.Forms;\r
9 \r
10 namespace DTXMania\r
11 {\r
12         internal class Program\r
13         {\r
14                 #region [ 二重機動チェック、DLL存在チェック ]\r
15                 //-----------------------------\r
16                 private static Mutex mutex二重起動防止用;\r
17 \r
18                 private static bool tDLLの存在チェック( string strDll名, string str存在しないときに表示するエラー文字列jp, string str存在しないときに表示するエラー文字列en )\r
19                 {\r
20                         string str存在しないときに表示するエラー文字列 = (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "ja") ?\r
21                                 str存在しないときに表示するエラー文字列jp : str存在しないときに表示するエラー文字列en;\r
22                         IntPtr hModule = LoadLibrary( strDll名 );\r
23                         if( hModule == IntPtr.Zero )\r
24                         {\r
25                                 MessageBox.Show( str存在しないときに表示するエラー文字列, "DTXMania runtime error", MessageBoxButtons.OK, MessageBoxIcon.Hand );\r
26                                 return false;\r
27                         }\r
28                         FreeLibrary( hModule );\r
29                         return true;\r
30                 }\r
31 \r
32                 [DllImport( "kernel32", CharSet = CharSet.Unicode, SetLastError = true )]\r
33                 internal static extern void FreeLibrary( IntPtr hModule );\r
34 \r
35                 [DllImport( "kernel32", CharSet = CharSet.Unicode, SetLastError = true )]\r
36                 internal static extern IntPtr LoadLibrary( string lpFileName );\r
37 \r
38 //              [DllImport("dwmapi.dll", PreserveSig = false)]\r
39 //              public static extern int DwmEnableComposition(bool fEnable);\r
40                 \r
41                 //-----------------------------\r
42                 #endregion\r
43 \r
44                 [STAThread]\r
45                 private static void Main()\r
46                 {\r
47                         mutex二重起動防止用 = new Mutex( false, "DTXManiaMutex" );\r
48 \r
49                         if( mutex二重起動防止用.WaitOne( 0, false ) )\r
50                         {\r
51                                 string newLine = Environment.NewLine;\r
52                                 bool flag = false;\r
53 \r
54                                 if (!tDLLの存在チェック("SlimDX" + CDTXMania.SLIMDXDLL,\r
55                                         "SlimDX" + CDTXMania.SLIMDXDLL + ".dll またはその依存するdllが存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。",\r
56                                         "SlimDX" + CDTXMania.SLIMDXDLL + ".dll, or its depended DLL, is not found." + newLine + "Please download DTXMania again."\r
57                                         )) flag = true;\r
58                                 if (!tDLLの存在チェック("FDK.dll",\r
59                                         "FDK.dll またはその依存するdllが存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。",\r
60                                         "FDK.dll, or its depended DLL, is not found." + newLine + "Please download DTXMania again."\r
61                                         ) ) flag = true;\r
62                                 if( !tDLLの存在チェック( "xadec.dll",\r
63                                         "xadec.dll が存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。",\r
64                                         "xadec.dll is not found." + newLine + "Please download DTXMania again."\r
65                                         ) ) flag = true;\r
66                                 if( !tDLLの存在チェック( "SoundDecoder.dll",\r
67                                         "SoundDecoder.dll またはその依存するdllが存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。",\r
68                                         "SoundDecoder.dll, or its depended DLL, is not found." + newLine + "Please download DTXMania again."\r
69                                         ) ) flag = true;\r
70                                 if (!tDLLの存在チェック(CDTXMania.D3DXDLL,\r
71                                         CDTXMania.D3DXDLL + " が存在しません。" + newLine + "DirectX Redist フォルダの DXSETUP.exe を実行し、" + newLine + "必要な DirectX ランタイムをインストールしてください。",\r
72                                         CDTXMania.D3DXDLL + " is not found." + newLine + "Please execute DXSETUP.exe in \"DirectX Redist\" folder, to install DirectX runtimes required for DTXMania."\r
73                                         )) flag = true;\r
74                                 if (!flag)\r
75                                 {\r
76                                         // turn off Aero Glass\r
77 //                                      try\r
78 //                                      {\r
79 //                                              DwmEnableComposition( false );\r
80 //                                      }\r
81 //                                      catch ( DllNotFoundException )\r
82 //                                      {\r
83 //                                              // DLLがなければXP以下とみなし何もしない\r
84 //                                      }\r
85 \r
86                                         // BEGIN #23670 2010.11.13 from: キャッチされない例外は放出せずに、ログに詳細を出力する。\r
87                                         // BEGIM #24606 2011.03.08 from: DEBUG 時は例外発生箇所を直接デバッグできるようにするため、例外をキャッチしないようにする。\r
88 #if !DEBUG\r
89                                         try\r
90 #endif\r
91                                         {\r
92                                                 using( var mania = new CDTXMania() )\r
93                                                         mania.Run();\r
94 \r
95                                                 Trace.WriteLine( "" );\r
96                                                 Trace.WriteLine( "遊んでくれてありがとう!" );\r
97                                         }\r
98 #if !DEBUG\r
99                                         catch( Exception e )\r
100                                         {\r
101                                                 Trace.WriteLine( "" );\r
102                                                 Trace.Write( e.ToString() );\r
103                                                 Trace.WriteLine( "" );\r
104                                                 Trace.WriteLine( "エラーだゴメン!(涙" );\r
105                                                 MessageBox.Show( e.ToString(), "DTXMania Error", MessageBoxButtons.OK, MessageBoxIcon.Error );  // #23670 2011.2.28 yyagi to show error dialog\r
106                                         }\r
107 #endif\r
108                                         // END #24606 2011.03.08 from\r
109                                         // END #23670 2010.11.13 from\r
110 \r
111                                         if( Trace.Listeners.Count > 1 )\r
112                                                 Trace.Listeners.RemoveAt( 1 );\r
113                                 }\r
114                         }\r
115                 }\r
116         }\r
117 }\r