OSDN Git Service

333de3aeb8e13ba746dc025b255e86bb7aee21c5
[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                 #endregion\r
39 \r
40                 [STAThread]\r
41                 private static void Main()\r
42                 {\r
43                         mutex二重起動防止用 = new Mutex( false, "DTXManiaMutex" );\r
44 \r
45                         if( mutex二重起動防止用.WaitOne( 0, false ) )\r
46                         {\r
47                                 string newLine = Environment.NewLine;\r
48                                 bool flag = false;\r
49 \r
50                                 if (!tDLLの存在チェック("SlimDX" + CDTXMania.SLIMDXDLL,\r
51                                         "SlimDX" + CDTXMania.SLIMDXDLL + ".dll またはその依存するdllが存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。",\r
52                                         "SlimDX" + CDTXMania.SLIMDXDLL + ".dll, or its depended DLL, is not found." + newLine + "Please download DTXMania again."\r
53                                         )) flag = true;\r
54                                 if (!tDLLの存在チェック("FDK.dll",\r
55                                         "FDK.dll またはその依存するdllが存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。",\r
56                                         "FDK.dll, or its depended DLL, is not found." + newLine + "Please download DTXMania again."\r
57                                         ) ) flag = true;\r
58                                 if( !tDLLの存在チェック( "xadec.dll",\r
59                                         "xadec.dll が存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。",\r
60                                         "xadec.dll is not found." + newLine + "Please download DTXMania again."\r
61                                         ) ) flag = true;\r
62                                 if( !tDLLの存在チェック( "SoundDecoder.dll",\r
63                                         "SoundDecoder.dll またはその依存するdllが存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。",\r
64                                         "SoundDecoder.dll, or its depended DLL, is not found." + newLine + "Please download DTXMania again."\r
65                                         ) ) flag = true;\r
66                                 if (!tDLLの存在チェック(CDTXMania.D3DXDLL,\r
67                                         CDTXMania.D3DXDLL + " が存在しません。" + newLine + "DirectX Redist フォルダの DXSETUP.exe を実行し、" + newLine + "必要な DirectX ランタイムをインストールしてください。",\r
68                                         CDTXMania.D3DXDLL + " is not found." + newLine + "Please execute DXSETUP.exe in \"DirectX Redist\" folder, to install DirectX runtimes required for DTXMania."\r
69                                         )) flag = true;\r
70                                 if (!flag)\r
71                                 {\r
72                                         // BEGIN #23670 2010.11.13 from: キャッチされない例外は放出せずに、ログに詳細を出力する。\r
73                                         try\r
74                                         {\r
75                                                 using( var mania = new CDTXMania() )\r
76                                                         mania.Run();\r
77 \r
78                                                 Trace.WriteLine( "" );\r
79                                                 Trace.WriteLine( "遊んでくれてありがとう!" );\r
80                                         }\r
81                                         catch( Exception e )\r
82                                         {\r
83                                                 Trace.WriteLine( "" );\r
84                                                 Trace.Write( e.ToString() );\r
85                                                 Trace.WriteLine( "" );\r
86                                                 Trace.WriteLine( "エラーだゴメン!(涙" );\r
87                                         }\r
88                                         // END #23670 2010.11.13 from\r
89                                         \r
90                                         if( Trace.Listeners.Count > 1 )\r
91                                                 Trace.Listeners.RemoveAt( 1 );\r
92                                 }\r
93                         }\r
94                 }\r
95         }\r
96 }\r