Показать сообщение отдельно
Старый 13.08.2011, 22:42      #847
Axels
Firefox User
[Alliance]
[Jägertruppe]
Пользователь Mozilla Firefox
 
Аватар для Axels
Лампочка

Итак насчет проблемы, которую озвучивал на прошлой странице!
Спойлер
Сообщение от Axels Посмотреть сообщение
Всем привет! В общем возникла трабла на компе с Windows 7 не запускаются некоторые игры. Больше того - игра хоть и не включается, но отображается в процессах и грузит ЦП на 100%. Кто-нибудь сталкивался с подобным? Антивирусом щас стоит аваст и ничего не нашел.

Ну в общем замена рандлл помогла, но лишь на 2 дня, потом опять 25 и последующие операции с рандлл никак проблему решить не помогли. Сегодня таки добрался до инета и таки часа полтора серфил на счет этой траблы. В итоге нашел решение! Прокатил вариант под номером 4.
Вот что пишут:
Спойлер
Цитата:
Основная проблема Майкрософт заключается в том, что в саппорт набирают полных дебилов.

С технической точки зрения механизм работает так. Пользователь пытается запустить каким-то образом исполняемый файл. Но система не сразу дает ему управление, а сначала пытается проверить его совместимость по различным признакам (такие как имя, контрольная сумма и т.п.) Если системе показалось, что файл находится в списке несовместимых или устаревших, то она может либо предупредить пользователя о том, что нужно применять режимы совместимости, либо вообще заблокировать выполнение этой задачи (установщик старой версии Windows, к примеру).

В Висте/Семерке к этому списку добавился еще и список legacy игр. Проверка для них осуществляется только по имени исполняемого файла. Если имя исполняемого файла игры совпало с одним из этого списка, то _ПЕРЕД_ запуском этого исполняемого файла ОС запускает этот самый rundll32, чтобы он добавил игру в гейм эксплорер. Пока он не отработает - запуска этого исполняемого файла не произойдет. Данные для добавления берутся из файла GameUXLegacyGDFs.dll.

Далее, в какой-то момент портится база данных ГеймЭксплорера. Портится она самопроизвольно в результате работы самого ГеймЭксплорера (точнее того кода, который был в него добавлен в семерке). Не у всех и достаточно редко. Виноват, конечно, сам пользователь - выключил компьютер когда Геймэксплорер на фоне занимался очень важной оптимизацией для быстродействия своих данных или рано закрыл окно ГейЭсплорера после запуска игры, не промедитировав положенные 10 минут . Под БД я понимаю здесь совокупность информации из GameUXLegacyGDFs.dll, реестра и файловой структуры(которая разбросана по куче папок). После этого код GameUx.dll не может правильно проитерировать все записи из GameUXLegacyGDFs.dll (и не может обнаружить порчу метаданных) в результате чего зацикливается.

Зациклившись, он начинает съедать ресурс процессора. Т.к. по счастью, он не многопоточный, то он займет не весь процессор, а только одно ядро. Для одноядерных это может быть процентов 70 (остальное съедят другие задачи), для двухядерных - 50%, для моего 3х-ядерного - 33% и т.д.

Диагностика:

1. Игра может запускаться и работать, но при этом тормозить, не выдавать ожидаемого фпс. Самое явное проявление - дергающийся звук. Даже если вам кажется, что все хорошо - нажмите три кнопки и посмотрите, не висит ли у вас rundll32 в процессах. Владельцы многоядерных могут вообще не замечать проблемы, а таких процессоров сейчас большинство.

2. Игра запускается со второй попытки. Это, кстати, по совместительству, одно из решения проблемы. Просто запустить еще раз и забить на фоновый процесс.

3. Подобная ситуация может возникать не со всеми играми, а только с теми, которые ОС распознает как игры (наличие данных для ГеймЭксплорера) или имя исполняемого файла находится в списке Legacy игр. Или вообще с одной отдельно взятой игрой.

Варианты решения:

1. Способ от саппорта! В геймэксплорере отключить сбор информации об игре. Способ, естественно, не работает, но упоминаю потому, что всех, кто столкнулся с проблемой будут сначала проверять на вирусы, потом отправлять на базу знаний Майрософта, где написана эта рекомендация.

2. Отключить все остальное в геймэксплорере и почистить собранную информацию. Тоже мало кому-помогает.

3. Переименовать исполняемый файл игры. Недостатки: каждую игру нужно переименовывать отдельно, некоторые онлайн-игры скачивают заново исполняемый файл или он создается во время запуска и др.

4. Отключить геймэксплорер путем удаления файлов gameux.dll либо записей в ветви реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Gam eUX. Тоже не всегда является выходом, т.к. многим удобно использовать ГеймЭксплорер, в конце-концов не зря же его делали.

5. Удалить базу старых игр GameUXLegacyGDFs.dll. В отличие от предыдущего, записи о новых играх будут работать. Но отключатся старые.

6. Дождаться, пока кто-то из разработчиков не сделает дифф на старые версии gameux.dll и не удалит ошибочный код. Это будет тяжело и очень долго, т.к. саппорт, который должен осуществлять взаимодействие между пользователем и разработчиком, в Майкрософте страдает херней, рассказывает, что все так и должно быть как оно есть или придумывает свои способы "решения" проблемы.

Вопросы совместимости приложения и операционной системы:

Как в данной ситуации этими может заниматься разработчик приложения, когда до выполнения его кода дело даже и не доходит? Ему надо писать драйвер, который будет обходить механизмы ОС и патчить ошибки Майкрософта? Если этого не происходит в определенных играх, то это просто означает, что имя исполняемого файла еще не попало в список Legacy или на машине еще не повреждена БД ГеймЭксплорера.

Инфа взята в комментариях тут
__________________
Самый лучший темный ситх - явно кто-то из учих!!!
Axels вне форума Пол: Мужчина   Ответить с цитированием Вверх