Развенчатель мифов (golosrazuma) wrote,
Развенчатель мифов
golosrazuma

Categories:

Микрософт не перестаёт удивлять, или муки программерские

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

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

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

Tags: абсурд, ебанько, компьютеры, работа
Subscribe

  • Коллекция херни

    Что я понимаю под этим? Например, вы купили что-то, а оно по какой-то причине вам не нравится. Сдать не получается — либо товар невозвращаемый, либо…

  • Почти новоселье

    Всем привет! :) Продолжение и окончание эпопеи с переездом: http://vozvrashenec.net/archives/1106 http://vozvrashenec.net/archives/1117…

  • В Подмосковье!

    Что-то я как-то в последнее время совсем забросил этот блог, всё больше в ФБ тусуюсь :) Кризис жарна, не иначе. А пока предлагаю вам очередную порцию…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 23 comments

  • Коллекция херни

    Что я понимаю под этим? Например, вы купили что-то, а оно по какой-то причине вам не нравится. Сдать не получается — либо товар невозвращаемый, либо…

  • Почти новоселье

    Всем привет! :) Продолжение и окончание эпопеи с переездом: http://vozvrashenec.net/archives/1106 http://vozvrashenec.net/archives/1117…

  • В Подмосковье!

    Что-то я как-то в последнее время совсем забросил этот блог, всё больше в ФБ тусуюсь :) Кризис жарна, не иначе. А пока предлагаю вам очередную порцию…