golosrazuma: (Мечтатель)
[personal profile] golosrazuma

Пожалуй, надо запомнить сегодняшний день - более странного глюка от Мелкомягких я не видел и, наверное, вряд ли увижу.
Сразу предупреждаю: этот пост некомпьютерщикам может показаться скучным, но для истинных программеров он станет настоящей детективной историей!

Итак, поехали!

Я делаю один большой проект - прикладное приложение для 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: Решение было найдено с неожиданной стороны. Что, впрочем, тоже никак не объясняет обнаруженный глюк с переименованием. Я решил поиграться с запуском от имени администратора, и вот что выяснилось: и аутлук, и мое приложение должны быть запущены с ОДИНАКОВЫМИ привилегиями: либо оба как от администратора, либо оба как не от администратора. Но во втором случае возникали проблемы доступа к рабочей папке. То есть решение однозначное - после установки Аутлука просто в явном виде указать запуск его как администратор - и проблема решена! Что, впрочем, подчёркиваю ещё раз - никак не объясняет выявленный попутно необъяснимый глюк :)))

Date: 2014-11-26 03:35 pm (UTC)
From: [identity profile] levaleva.livejournal.com
еще в эксперимент. Любую прогу переименовать в проблемное имя и посмотреть :)

Date: 2014-11-26 03:37 pm (UTC)
From: [identity profile] golosrazuma.livejournal.com
Кстати, да, ради интереса надо сделать пустой проект с одной единственной строкой и называть MyProject - посмотреть, как он будет себя вести :))

Date: 2014-11-26 03:43 pm (UTC)
From: [identity profile] mr-quietest.livejournal.com
Ты в курсе, что невозможно залогиниться на рабочую станцию в составе домена, если имя пользователя совпадает с именем рабочей станции?

Я тоже не знал...

Date: 2014-11-26 03:45 pm (UTC)
From: [identity profile] golosrazuma.livejournal.com
Это я знал :) Но здесь можно хоть какое-то объявнение найти.

Date: 2014-11-26 03:48 pm (UTC)
From: [identity profile] mr-quietest.livejournal.com
Опа!!!!!
А дай объяснение!
Потому что я на этих граблях два дня гопак танцевал :)))

Date: 2014-11-26 03:50 pm (UTC)
From: [identity profile] golosrazuma.livejournal.com
Логичного объяснения нет. Но там совпадение имён - конфликт какой-то, не знаю уж почему :))
Здесь же вообще от балды полностью получается.

Date: 2014-11-26 03:55 pm (UTC)
From: [identity profile] mr-quietest.livejournal.com
Это не объяснение. Это констатация факта :))))

Date: 2014-11-26 04:02 pm (UTC)
From: [identity profile] golosrazuma.livejournal.com
Ну я ж не говорил, что У МЕНЯ есть объяснение :))

Date: 2014-11-26 04:32 pm (UTC)
From: [identity profile] etno-exp.livejournal.com
1) А exe-шники сильно отличаются?

2) Тут один официальный диллер некоего линукса уже неделю выпускает дистрибутив с нужной версией curl-а, который умеет TLS 1.2. Казалось бы, причём тут Микрософт?

Date: 2014-11-26 04:45 pm (UTC)
From: [identity profile] golosrazuma.livejournal.com
Размером вообще не отличаются.
Если сравнивать побайтно, то отличия есть :)

Date: 2014-11-26 04:34 pm (UTC)
From: [identity profile] etno-exp.livejournal.com
А, кстати, вспомнил. Было у нас такое же только другое. Что-то где-то как-то криво кешировалось, в результате чтобы починить переименовали функцию.

Date: 2014-11-26 04:45 pm (UTC)
From: [identity profile] golosrazuma.livejournal.com
Да, с кешированием тоже сталкивался. А вот с таким маразмом впервые :)

Date: 2014-11-26 05:10 pm (UTC)
From: [identity profile] sinclair-sc.livejournal.com
Может файл проекта коцаный? Попробуйте сравнить в текстовом виде файлы проектов.

Date: 2014-11-26 05:11 pm (UTC)
From: [identity profile] golosrazuma.livejournal.com
Файл проекта идентичный абсолютно.
Я несколько раз переименовывал его туда-обратно. С одним именем работает, с другим - нет.

Date: 2014-11-26 06:04 pm (UTC)
From: [identity profile] etaceti.livejournal.com
похоже, что проблема не в имени проекта или аппликации, а в ее идентификаторах в assembly/manifest или typelib progid/CLSID... поищите переставшие работать идентификаторы в registry. посмотрите не ликают ли у вас ключи registry в больших кол-вах. попробуйте создавать инстанс com-сервера outlook в цикле несколько раз при получении такой ошибки.

Date: 2014-11-26 06:06 pm (UTC)
From: [identity profile] golosrazuma.livejournal.com
Да, с манифестом тоже пришлось разбираться.
Но в конечном итоге у меня есть два ИДЕНТИЧНЫХ проекта, различающихся только именем. Один работает, другой нет.

Date: 2014-11-27 05:34 am (UTC)
From: [identity profile] lunohod.livejournal.com
компьютеры - неиссякаемый источник глюков
и со стороны софта и со стороны железа
вчера мне тоже такой косячный нетбук попался, изначально было полное ощущение что просто софт глючит, ан нет... жесткий диск похоже

Date: 2014-11-27 06:41 am (UTC)
From: [identity profile] golosrazuma.livejournal.com
Да уж, с ними точно не соскучишься! :)

Date: 2014-11-27 10:08 am (UTC)
From: [identity profile] anshdo.livejournal.com
Сочувствую, коллега. Проблемы с окружением -- это почти всегда самый адов адский ад в отладке.

Date: 2014-11-27 10:09 am (UTC)
From: [identity profile] golosrazuma.livejournal.com
Да-да :))

Date: 2014-12-12 09:33 pm (UTC)
From: [identity profile] grisha-ovnyuk.livejournal.com
А зачем отправлять письмо через аутлук? Проще просто через smtp. А если нужно, чтобы письмо добавилось в отправленные, использовать imap. Это стандартные протоколы, работающие с любым почтовым сервером. Вот решат они отказаться от эксченджа и всё перестанет работать.

Date: 2014-12-12 09:34 pm (UTC)
From: [identity profile] golosrazuma.livejournal.com
От эксченджа они точно не откажутся - он у них возведён в ранг религии практически :))

Date: 2014-12-12 09:54 pm (UTC)
From: [identity profile] grisha-ovnyuk.livejournal.com
Вот придёт время обновлять сервер, они посчитают, прослезятся и купят какой-нибудь коммунигейт, керио коннект или зимбру. И привет аутлуку.
Но в любом случае, использовать в своей программе для стандартных процедур и стандартных протоколов какое-то третье ПО - это очень не круто. Говорю это, как бывший админ.

Date: 2014-12-12 09:56 pm (UTC)
From: [identity profile] golosrazuma.livejournal.com
Дело в том, что они только что обновили сервер и поставили на него новый эксченйдж. Говорю же - религия :)
Но я рассматривал предлагаемый вами вариант и уже не помню по какой причине отмёл его.

Date: 2014-12-12 10:03 pm (UTC)
From: [identity profile] grisha-ovnyuk.livejournal.com
Небось ещё и подписку оформили? Теперь будут вечно MS дань платить.
Кстати, есть ведь ещё и MAPI. Насколько я помню, оно позволяет работать с эксченджем без участия аутлука.

Date: 2014-12-12 10:05 pm (UTC)
From: [identity profile] golosrazuma.livejournal.com
С MAPI я очень долго возился - там возникала ошибка, которую я так и не смог победить.
А с аутлуком смог :)

Profile

golosrazuma: (Default)
golosrazuma

April 2017

S M T W T F S
      1
234 5678
9101112131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 6th, 2026 12:21 am
Powered by Dreamwidth Studios