@@ -59,7 +59,13 @@ private enum CTRL_EVENT : int
59
59
private static extern int SHOpenFolderAndSelectItems ( IntPtr pidlFolder , int cild , IntPtr apidl , int dwFlags ) ;
60
60
61
61
[ DllImport ( "kernel32.dll" ) ]
62
- public static extern bool SetConsoleCtrlHandler ( IntPtr handlerRoutine , bool add ) ;
62
+ private static extern bool AttachConsole ( int dwProcessId ) ;
63
+
64
+ [ DllImport ( "kernel32.dll" ) ]
65
+ private static extern bool FreeConsole ( ) ;
66
+
67
+ [ DllImport ( "kernel32.dll" ) ]
68
+ private static extern bool SetConsoleCtrlHandler ( IntPtr handlerRoutine , bool add ) ;
63
69
64
70
[ DllImport ( "kernel32.dll" ) ]
65
71
private static extern bool GenerateConsoleCtrlEvent ( int dwCtrlEvent , int dwProcessGroupId ) ;
@@ -225,17 +231,21 @@ public void OpenWithDefaultEditor(string file)
225
231
226
232
public void TerminateSafely ( Process process )
227
233
{
228
- if ( SetConsoleCtrlHandler ( IntPtr . Zero , true ) )
234
+ FreeConsole ( ) ;
235
+
236
+ if ( AttachConsole ( process . Id ) )
229
237
{
238
+ SetConsoleCtrlHandler ( IntPtr . Zero , true ) ;
230
239
try
231
240
{
232
- if ( GenerateConsoleCtrlEvent ( ( int ) CTRL_EVENT . CTRL_C , process . Id ) )
233
- process . WaitForExit ( ) ;
241
+ if ( GenerateConsoleCtrlEvent ( ( int ) CTRL_EVENT . CTRL_C , 0 ) )
242
+ process . WaitForExit ( 2000 ) ;
234
243
}
235
- finally
244
+ catch
236
245
{
237
- SetConsoleCtrlHandler ( IntPtr . Zero , false ) ;
246
+ // DO NOTHING
238
247
}
248
+ SetConsoleCtrlHandler ( IntPtr . Zero , false ) ;
239
249
}
240
250
}
241
251
0 commit comments