Djelf писал(а) 23. Июня 2020 :: 13:32:Этот патч убирает только крэш 1С, что и просил
Noy.
formex не снимал перехват окна.
Сейчас поведение стало более корректное, хотя и с запросом на переиндексацию.
А вот выгрузка formex это была плохая идея, сам себя он никогда не сможет выгрузить
я, похоже, чего-то не понимаю. если требует переиндексацию, значит крэшится? или только с окном ошибки, а тихий вылет не крэш? и формекс я не выгружаю, хотя попробовал
Djelf писал(а) 23. Июня 2020 :: 13:32:спасибо, логика ваших патчей стала понятна

и у меня есть много примеров софта который некорректно работает после отмены завершения системы.
Djelf писал(а) 23. Июня 2020 :: 13:32:Мне вопрос о переиндексации не мешает (поэтому я это и не заметил).
Завершать приложения работающие с БД таким образом не очень хорошая идея, если важна целостность.
На самом деле правильным поведением было бы вообще заблокировать выход из 7ки до ее завершения.
А еще могут быть отрыты документы, модальные окна и т.д. и т.п. и все это тоже должно не дать закрыться 1С корректно.
Так что тут выбор не велик - или блокировать завершение, или как то вот так...
есть ещё вариант: ловить событие завершения в 1С. я, правда, не знаю насколько трудоёмко создать такое, с учётом всех условий, вроде отмены выхода третьей стороной.
будет ловить ПриПолученииКомандыГлавнымОкном (или ПриПолученииСистемнойКомандыГлавнымОкном?) WM_QUERYENDSESSION? тогда
дать подзатыльникзакрыть все окна и завершиться без вопросов.
Djelf писал(а) 23. Июня 2020 :: 13:32:А что мешает, так это то что при любом таком тесте закрываются все компиляторы, отладчики и вообще все что запущено.
На повторное открытие и следующий эксперимент тратится невероятное количество лишнего времени

И вообще не видно, что на самом деле происходит, окон сообщений то нет!
я вообще не понимаю как вы это дебажите
Djelf писал(а) 23. Июня 2020 :: 15:24:Еще одна попытка.
Второй тестовый:
https://cloud.mail.ru/public/4ES5/3uJzAqdxz switch(nMessage) {
case WM_QUERYENDSESSION:{
::SetWindowLong(pMainWindow->GetSafeHwnd(),GWL_WNDPROC,(LONG)hMainWndProc);
break;
}
Переиндексацию перестал требовать.
Но! Если в ПриЗавершенииРаботыСистемы вывести вопрос или предупреждение, то 1С не закрывается, а после отмены логаута отваливаются события ПриПолученииКомандыГлавнымОкном и ПриПолученииСистемнойКомандыГлавнымОкном.
Это я не знаю как восстановить, может АЛьФ что-то придумает.
Предполагаю, нужно перехватывать окончание события ПриЗавершенииРаботыСистемы и, в зависимости от СтатусВозврата, восстанавливать перехват.
может можно сделать метод формекс снять/установить перехват и в ПриЗавершенииРаботыСистемы снимать перехват, а если надо потом устанавливать. или так не будет работать?
добавлено: Подтвеждаю, последний патч решает проблему некорректного завершения 1С при завершении_системы/выходе_сеанса, при условии отсутствия висящих окон вопросов, но это решается таймаутом этих окон.
добавлено: и очень бы хотелось ловить WM_QUERYENDSESSION в 1С