Моя программа Delphi в значительной степени зависит от автоматизации Outlook. Outlook версии до 2007 года - SP2, как правило, застревают в памяти из-за плохо написанных дополнений и плохо написанного кода Outlook.
Если Outlook застрял, вызов CreateOleObject ('Outlook.Application') или GetActiveObject... не возвращается и не поддерживает мое приложение, пока Outlook.exe не будет закрыт в диспетчере задач.
Я думал о решении, но я не уверен, что это хорошая практика или нет.
Я бы начал Outlook с CreateOleObject в отдельном потоке, подождать 10 секунд в моем основном потоке и, если Outlook зависает (CreateOleObject не возвращается), предложите пользователю убить процесс Outlook.exe из моей программы.
Но так как я не хочу, чтобы force пользователь мог убить процесс Outlook.exe, в качестве альтернативы мне также нужен способ убить новый поток в моей программе, который теперь висит.
- Это хорошая практика?
- Как я могу завершить висячий поток в Delphi без утечки памяти?