|
04.09.2012, 15:27 | #1 |
Участник
|
Цитата:
Сообщение от gl00mie
Зачем сразу убийства?.. ExitProcess()
Спасибо большое! |
|
04.09.2012, 15:51 | #2 |
Участник
|
определяем ID процесса
X++: static int GetCurrentProcessId() { Dll kernel32 = new Dll(#KERNELDLL); DllFunction processId = new DllFunction(kernel32, "GetCurrentProcessId"); ; processId.returns(ExtTypes:: DWord); return processId.call(); } X++: static void TerminateProcess(int _processId) { Dll kernel32 = new Dll(#KERNELDLL); DllFunction closeHandle = new DllFunction(kernel32, "CloseHandle"); DllFunction terminateProcess = new DllFunction(kernel32, "TerminateProcess"); DllFunction openProcess = new DllFunction(kernel32, "OpenProcess"); int hProcess; closeHandle.returns(ExtTypes:: DWORD); closeHandle.arg(ExtTypes:: DWORD); terminateProcess.returns(ExtTypes:: DWord); terminateProcess.arg(ExtTypes:: DWord, ExtTypes:: DWord); openProcess.returns(ExtTypes:: DWord); openProcess.arg(ExtTypes:: DWord, ExtTypes::DWord, ExtTypes:: DWord); hProcess = openProcess.call(1, false, _processId); terminateProcess.call(hProcess, 1); closeHandle.call(hProcess); } |
|
04.09.2012, 16:11 | #3 |
Участник
|
Если не сложно, для людей не сильно понимающих разницу - в чем принципиальная разница?
|
|
04.09.2012, 16:26 | #4 |
Участник
|
видимо из-за этого: "Функцию TerminateProcess следует использовать только в исключительных случаях, когда исчерпаны все другие способы воздействия на процесс, поскольку она не позволяет потокам процесса выполнить очистку или сохранить данные, а также не оповещает загруженные DLL о завершении процесса."
|
|
|
За это сообщение автора поблагодарили: f18 (1). |
04.09.2012, 16:40 | #5 |
Участник
|
Цитата:
Сообщение от michel1971
видимо из-за этого: "Функцию TerminateProcess следует использовать только в исключительных случаях, когда исчерпаны все другие способы воздействия на процесс, поскольку она не позволяет потокам процесса выполнить очистку или сохранить данные, а также не оповещает загруженные DLL о завершении процесса."
Преднастроенный терминальный клиент с автозапуском аксапты, если аксапта закрывается - закрывается терминальный клиент. Правильно ли я понимаю, что используя TerminateProcess и, как следствие, выход из терминальной сессии, я гарантирую коректность закрытия dll? |
|
04.09.2012, 17:53 | #6 |
Участник
|
Цитата:
мне кажется что у меня написано ровно противоположное |
|
05.09.2012, 01:10 | #7 |
Участник
|
|
|
04.09.2012, 18:16 | #8 |
Участник
|
Цитата:
Сообщение от f18
Ок, спс! Если у меня аксапта работает след образом
Преднастроенный терминальный клиент с автозапуском аксапты, если аксапта закрывается - закрывается терминальный клиент. Правильно ли я понимаю, что используя TerminateProcess и, как следствие, выход из терминальной сессии, я гарантирую коректность закрытия dll? |
|
05.09.2012, 01:41 | #9 |
Участник
|
|
|