We rise up for the things we believe in over and over again
UPDATE @ 09.10.2012. Продолжение расследования, принесшее весьма любопытные результаты.
"Профиль - смотри профиль, ответ там." (с) Hikedaya
После очередного возникновения подобного непотребства снова запустил File Monitor и изучил его результаты более вдумчиво. Нашел следующее:
Запрос пути: C:\Documents and Settings\%username%\Local Settings\Temp
Результат: not found.
Что за черт? Раньше это почему-то в глаза не бросилось, а вот теперь... И что примечательно, почти сразу после этого сообщения идет следующее:
Запрос пути c:\Windows
Действие: создание файла
Результат: Access Denied.
Налицо неспособность Excel найти временный каталог для создания tmp-файла. Что за черт... Лезу в C:\Documents and Settings\%username%\Local Settings и вижу, что каталога Temp там действительно нет. Все становится понятно. Excel пытается создать файл по требуемому пути, видит, что этого пути не существует в принципе, после чего ломится, как яркий представитель "дикого" софта, в системный каталог, который уж по всякому будет на месте. И уже там получает отлуп, после чего обиженным тоном сообщает, что файл, который мы хотим открыть, "может быть предназначен только для чтения или быть зашифрован".
Любопытнее всего тот факт, что, как уже и было написано, файлы формата Office 2007 продолжают спокойно открываться. А все потому, что тот же Excel 2007 при открытии таких файлов располагает временные документы вовсе не в C:\Documents and Settings\%username%\Local Settings\Temp, а в C:\Documents and Settings\%username%\Local Settings\Temporary Internet Files\Content.MSO. И самое смешное - даже если этого каталога нет, он будет создан по требованию, в отличие от предыдущего, который автоматически создается только один раз - при создании профиля.
В общем, как только руками в профиле пользователя был воссоздан каталог Temp, функционал работы с файлами legacy-форматов восстановился тут же. Ради интереса уничтожил каталог Temp у себя на машине. Результат предсказуем, я получил ровно то же самое поведение, что и на проблемной машине. Создал каталог заново - проблема исчезла.
Осталось понять, при каких обстоятельствах может исчезать, причем целиком и сразу, прямо во время работы, каталог Temp. Ведь там постоянно есть какой-нибудь файл, занятый каким-либо процессом. Следовательно, сначала надо тушить процесс (и еще узнать, какой именно), а потом уже удалять каталог. Но это уже тема отдельного расследования, с привлечением аудита файловой системы. Есть подозрение, что виной всему некорректная установка какого-либо обновления.
Ох и разрастется лог Security на машине-жертве...
Ну и галочка на будущее - если вы озаботились чисткой пользовательских профилей - удостоверьтесь, что в любой момент времени, когда пользователь работает в системе, каталог, обозначенный в переменной %TEMP%, действительно существует.

UPDATE @ 01.10.2012. Отбой. Все указанное ранее не является гарантированным решением. Сегодняшний день убедил меня в обратном, придется копать дальше...

Какое-то время назад на нашу компанию навалилась странная напасть. То на одном ПК, то на втором, то на третьем офисные приложения версии 2007 и выше начали выдавать странное. Им абсолютно не по нраву были попытки открыть файлы формата Office 2003. И именно 2003, потому что документы формата 2007 и выше продолжали открываться без проблем. И если Word выдавал что-то несуразное насчет повреждения файла, то Excel в таком случае радовал следующей ошибкой:
Excel cannot access %filename%. The document may be read-only or encrypted.
Когда это появилось на одной машине, я склонен был списать все на нестабильно работающий офисный комплект. На двух - заставило призадуматься, на трех - уже пора задуматься очень серьезно.
Первое. На шифрование вирусом это не похоже, потому что файлы все же открываются на других компьютерах.
Второе. Настойчивое гугление показало, что проблема может крыться в том, что у пользователя слетели права на файлы в его же профиле. Решение - переназначить права на каталог %userprofile% и ниже, уровень доступа - полный с заменой и наследованием прав от самого %username%. Этот вариант сразу же был отметен, как неработоспособный, потому что поражались только файлы office 2003. Лежащие буквально рядом office 2007 - открываются без проблем.
Третье - проблема лечится, но способ лечения радикальный: убить пользовательский профиль, создать новый, скопировать документы назад. Какое-то время именно этим способом и решал проблему, по крайней мере сотрудник после этого может работать, у меня появляется больше времени на ковыряние ситуации в целом.
В чем же причина и как бороть, если не перебивкой профиля? Апдейты ОС? Вряд ли, специально затормозил одобрение новых, поднял новую систему, накатил на нее все обновки, что есть, отдал сотруднику. Два дня нормальной работы, после чего бедолага попал под ту же раздачу. Значит, стопроцентно не апдейты.
Профиль... Перебивка спасает, значит само ПО не портится. Файлы тоже не портятся. Что может быть в профиле такого, что блокирует запуск файлов формата Office 2003 на приложениях новых версий?
Запуск SysInternals File Monitor, ковыряение результатов. При открытии файла Excel старается записать временный файл прямо в каталог %systemroot%, где нарывается на законный Access denied? Что это за дрянь? Теста ради запускаю тот же механизм наблюдения на "здоровом" ПК, вижу ТОТ ЖЕ результат. Значит, дело не в этом, но в уме галочку себе поставил. А голове все так же не дает покоя мысль: профиль - смотри профиль, ответ там. Но где?
Что у нас хранится в профиле? Настройки, всякая мелкая шушера из той же оперы да временные файлы. СТОП!
Однажды мне уже довелось раскапывать очень непонятное поведение Outlook: в какой-то момент он просто отказывался открывать любые вложения. Решением стала банальная чистка временного каталога оной программы. А поскольку примерно в то же время я озаботился вычисткой от всякого хлама пользовательских профилей вообще... Вот тут все это расписано подробнее.
Итак, временные файлы. А что если грохнуть все то временное месиво, что скапливается в пользовательских профилях, да посмотреть, откроются ли те злосчастные файлы? Сказано, сделано, тем более что и очередной "клиент" "подоспел".
rem clean office temp dirs
del /f/s/q "C:\Documents and Settings\%username%\Local Settings\Temporary Internet Files\Content.MSO\*.*"
del /f/s/q "C:\Documents and Settings\%username%\Local Settings\Temporary Internet Files\Content.Word\*.*"
Результат не заставил себе ждать - файлы открылись тут же. Можно выдохнуть. А в сценарий выхода пользователя из сеанса добавить вышеприведенные пару строк.
К сожалению, причина, по которой происходит вот такой затык в работе, пока что осталась неизвестной, впрочем, само существование файлов во временной папке после завершения приложения - уже достаточный глюк со стороны оного приложения, который не лечится уже много версий подряд.

P.S. Много думаю над тем, чтобы сократить команду очистки до следующей:
del /f/s/q "C:\Documents and Settings\%username%\Local Settings\Temporary Internet Files\*.*"
Но пока еще все же думаю...

@музыка: Medwyn Goodall - Kilimanjaro

@темы: Этот безумный мир

Комментарии
01.10.2012 в 18:46

Выше и выше, сквозь лазерную метель!..
зарубка на память )
01.10.2012 в 19:51

We rise up for the things we believe in over and over again
Владимир Мор-Анор, можешь замазывать зарубку. Это не решение, как показал сегодняшний день. Буду копать дальше.
01.10.2012 в 19:53

Выше и выше, сквозь лазерную метель!..
Hikedaya, гмм, однако. жду развития событий.