Пожалуй, надо запомнить сегодняшний день - более странного глюка от Мелкомягких я не видел и, наверное, вряд ли увижу.
Сразу предупреждаю: этот пост некомпьютерщикам может показаться скучным, но для истинных программеров он станет настоящей детективной историей!
Итак, поехали!
Я делаю один большой проект - прикладное приложение для Windows. Как это обычно бывает у программистов, то, что планировалось как небольшое приложение максимум на полгода, вылилось в грандиозный проект, который продолжается уже 4-й год, и список "хотелок" от заказчика не иссякает. А мне и хорошо - деньги платят, пусть и дальше хотят :))
Есть в этом приложении момент, где оно автоматически отправляет через Outlook электронное письмо-подтверждение клиенту из базы данных. И всё было прекрасно, всё работало на любых виндах и на любой версии аутлука. До вчерашнего дня. Один компьютер заказчик обновил до Windows 8.1 и впендюрил на него Outlook 2013. И оказалось, что при запущенном аутлуке приложение не может отправить сообщение, вылетая с ошибкой:
OLE Error Code 0x80080005 Server Execution Failed.
Я перерыл весь инет и ничего полезного для себя не нашел. Усугублялась ситуация тем, что проверить всё это у себя я не мог ввиду отсутствия у меня как восьмых форточек, так и 13-го аутлука. Но делать нечего - пришлось мне спецом ради такого установить себе на дополнительный ноут восьмёрку с соответствующим офисом, потратив полдня.
И вот случилась первая большая радость программиста - мне удалось воспроизвести ошибку! Считай, это значит, я уже на полпути к решению проблемы :))
Итак, с чего начать "ремонт"? Самое простое - создать новый проект с одним единственным модулем с одной единственной операцией, которая бы при запущенном аутлуке отправляла письмо на мой адрес посредством аутлука же. Здесь всё сработало безукоризненно. Тогда я начал вставлять эту строку в свое приложение, которое неизменно грохалось. В попытках определить, в каком месте кода находится тот самый "рубикон", после которого возникает этот глюк, я стал ставить эту строку всё ближе и ближе к началу, пока не поставил её самой первой строкой в приложении - оно по-прежнему грохалось.
Тогда я решил зайти с другой стороны. Я создал совершенно новый проект с новым именем (назовем его MyProj) и потратил почти час, кропотливо добавляя в него каждый модуль, который присутствовал в оригинальном проекте (назовем его MyProject). Скомпилировал новый проект и получил экзешник myproj.exe. Запустил - ура, работает! Убрал первую строку и проверил систему уже в реальном действии - письмо отсылается, всё прекрасно!
И тут начинается самое интересное. Воодушевлённый, я переименовал оригинальный проект в MyProject_OLD, новый проект MyProj обозвал привычным MyProject и радостно скомпилировал myproject.exe. Запустил его, и вижу знакомый глюк. Первая мысль была - старые версии файлов где-то в кэше остались. Поэтому я очистил кэш, перезапустил рабочую среду, полностью перекомпилировал myproject.exe - тот же глюк. Я начинаю понимать, что я чего-то не понимаю, но чего именно я не понимаю, я пока ещё не понимаю :)))
Переименовываю этот же проект обратно в MyProj, компилирую myproj.exe - он работает без единой помарки. Абсолютно тот же самый проект, названный MyProject, скомпилированный в myproject.exe, даёт ошибку. Беру рабочий myproj.exe, переименовываю в myproject.exe - всё прекрасно работает. А скомпилированный из MyProject, он работать отказывается. Итак, резюме: MyProj, скомпилированный в экзешник с любым именем, работает. А тот же самый проект, переименованный в MyProject и скомпилированный в экзешник с любым именем, работать отказывается.
Как такое вообще возможно??? Впрочем, на этот вопрос вряд ли есть вразумительный ответ :) Для меня же главное - решение найдено, но не перестают удивлять ребята из Микрософта :))))
UPD: Внезапное продолжение истории. Через некоторое время MyProj тоже перестал работать. Зато переименовываю его во что угодно другое, компилирую, переименовываю экзешние - и всё работает! Это какой-то немыслимый пипец! Похоже, мне предстоит долгая ночка :)))
UPD2: Решение было найдено с неожиданной стороны. Что, впрочем, тоже никак не объясняет обнаруженный глюк с переименованием. Я решил поиграться с запуском от имени администратора, и вот что выяснилось: и аутлук, и мое приложение должны быть запущены с ОДИНАКОВЫМИ привилегиями: либо оба как от администратора, либо оба как не от администратора. Но во втором случае возникали проблемы доступа к рабочей папке. То есть решение однозначное - после установки Аутлука просто в явном виде указать запуск его как администратор - и проблема решена! Что, впрочем, подчёркиваю ещё раз - никак не объясняет выявленный попутно необъяснимый глюк :)))
no subject
Date: 2014-11-26 03:35 pm (UTC)no subject
Date: 2014-11-26 03:37 pm (UTC)no subject
Date: 2014-11-26 03:43 pm (UTC)Я тоже не знал...
no subject
Date: 2014-11-26 03:45 pm (UTC)no subject
Date: 2014-11-26 03:48 pm (UTC)А дай объяснение!
Потому что я на этих граблях два дня гопак танцевал :)))
no subject
Date: 2014-11-26 03:50 pm (UTC)Здесь же вообще от балды полностью получается.
no subject
Date: 2014-11-26 03:55 pm (UTC)no subject
Date: 2014-11-26 04:02 pm (UTC)no subject
Date: 2014-11-26 04:32 pm (UTC)2) Тут один официальный диллер некоего линукса уже неделю выпускает дистрибутив с нужной версией curl-а, который умеет TLS 1.2. Казалось бы, причём тут Микрософт?
no subject
Date: 2014-11-26 04:45 pm (UTC)Если сравнивать побайтно, то отличия есть :)
no subject
Date: 2014-11-26 04:34 pm (UTC)no subject
Date: 2014-11-26 04:45 pm (UTC)no subject
Date: 2014-11-26 05:10 pm (UTC)no subject
Date: 2014-11-26 05:11 pm (UTC)Я несколько раз переименовывал его туда-обратно. С одним именем работает, с другим - нет.
no subject
Date: 2014-11-26 06:04 pm (UTC)no subject
Date: 2014-11-26 06:06 pm (UTC)Но в конечном итоге у меня есть два ИДЕНТИЧНЫХ проекта, различающихся только именем. Один работает, другой нет.
no subject
Date: 2014-11-27 05:34 am (UTC)и со стороны софта и со стороны железа
вчера мне тоже такой косячный нетбук попался, изначально было полное ощущение что просто софт глючит, ан нет... жесткий диск похоже
no subject
Date: 2014-11-27 06:41 am (UTC)no subject
Date: 2014-11-27 10:08 am (UTC)no subject
Date: 2014-11-27 10:09 am (UTC)no subject
Date: 2014-12-12 09:33 pm (UTC)no subject
Date: 2014-12-12 09:34 pm (UTC)no subject
Date: 2014-12-12 09:54 pm (UTC)Но в любом случае, использовать в своей программе для стандартных процедур и стандартных протоколов какое-то третье ПО - это очень не круто. Говорю это, как бывший админ.
no subject
Date: 2014-12-12 09:56 pm (UTC)Но я рассматривал предлагаемый вами вариант и уже не помню по какой причине отмёл его.
no subject
Date: 2014-12-12 10:03 pm (UTC)Кстати, есть ведь ещё и MAPI. Насколько я помню, оно позволяет работать с эксченджем без участия аутлука.
no subject
Date: 2014-12-12 10:05 pm (UTC)А с аутлуком смог :)