Тестирование exe-ек, dll-ек и cpl-ек под XP

Обсуждаем ReactOS по-русски

Moderators: fog, fireball

Post Reply
q4a
Posts: 114
Joined: Tue Apr 17, 2007 7:23 am

Тестирование exe-ек, dll-ек и cpl-ек под XP

Post by q4a »

Довольно давно стало понятно, что до того, как РОС можно будет реально использовать в повседневной работе пройдет еще не мало времени. Цели РОС ставит простые и понятные: совместимость приложений и дров с виндой. При этом для РОС его разработчиками создано довольно большое к-во приложений(exe-ек - как консольных, так и гуевых), библиотек(dll-ек), элементов панели управления(cpl-ек) и дров(sys-ек)..
И если подставлять РОС-овские дрова и ядро в реально используемые системы - по крайней мере мне, страшновато, то вот с user-mode можно вдоволь поиграться:

И тут предлагаю банальнейшую вещь - использовать в винде (в моем случае XP) user-mode приложения, dll и cpl из РОС-а(по мере их перехода в юзабельное состояние).

Цель сего действия проста - обнаружение багов и четкое их разграничение того, что является его причиной - само приложение, используемые ею dll или еще глубже.

Для примера приведу баг из такого простого приложения как notepad: в нем неправильно отображаются номера строк и столбцов в строке состояния. Протестировав его под виндой было выяснено, что при передергивании галочки "Строка состояния" номера строк/столбцов перестают меняться. Но даже исправив проблему с отображением номеров в винде, проблема в РОС решилась не до конца. Протестировав notepad в wine стало ясно, что баг произрастает оттуда и не настолько тривиален, как показалось на первый взгляд.

Если Вы сочтете такое тестирование не особо нужным, то дальше можете не читать, но я считаю, что тестирование user-mode компонентов вполне может происходить гораздо проще - без необходимости каждый раз запускать виртуалку - с помощью замены компонент винды.

Дальнейшие действия заточены под XP, хотя под вистой/7 - они делаются проще.
Имею:
-папку, в которой лежат исходники РОС, которые я периодически компилю: C:\ros\trunk\reactos
-ноут с установленной XP в папку: C:\WINDOWS

Хочу: чтобы после каждой компиляции определенные файлы из РОС "копировались" в соотв. папку в винде.

сделать это можно двумя способами:
1) написать выполняющий копирование .cmd файл, который либо вручную запускать после компиляции, либо прикрутить его к РосБЕ.
2) сделать симлинки, т.е. перенаправить запросы идущие к приложениям, находящимся в C:\WINDOWS, в приложения, находящиеся в C:\ros\trunk\reactos.

Оба метода имеют свои минусы:
1- копирование увеличивает размер (хотя вместо него можно использовать хардлинк), но это не спасает от того, что "копирование" будет происходить только поле выполнения компиляции.

2 - если вдруг кто-то запостит коммитит, который порушит сборку приложения, например notepad-а, на который вы сделали симлинк, то вы временно останетесь без стандартного блокнота.

Поскольку я не большой любитель писать cmd-шки - я выбрал 2 вариант (хотя скорее всего в будущем я перейду на компромисс между 1 и 2, т.к. во время компиляции cmd и explorer заняты и налету их заменять не получится - буду делать хардлинки..)

Ну а чтобы не остаться без блокнота и пр. Удалять файлы из C:\WINDOWS я не решился, так что просто перемещаю их в C:\c\WINDOWS.


Для того, чтобы файл C:\WINDOWS\system32\notepad.exe не восстанавливался после перемещения, необходимо заранее удалить его копию из C:\WINDOWS\system32\dllcache (Удаляйте осторожно. Убедитесь, что у вас все еще есть копия этого файла в C:\WINDOWS\system32 или в C:\c\WINDOWS\system32)

Если у Вас стандартная винда, а не какая-нть мегакрутая сборка, то, скорее всего, винда(Windows File Protection == WFP) начнет ругаться, что не хватает некоторых системных файлов, ставьте диск с виндой для их копирования. WFP скорее всего можно отключить как-то из реестра или встроенными в винду средствами, но мне проще было скачать простенькую гуевую прогу, которая ее выключает: Windows File Protection Switcher - http://download.betanews.com/download/1 ... wfps10.exe

После его запуска нам будет предложено выключить WFP и перезагрузиться, что мы и сделаем =)

К сожалению, тут возникает другая проблема - симлинков в XP нет =( Точнее они есть в виде junction point, которые могут делать симлинки, но только для папок. Как бы ни меня, ни японцев, ни многих других это не останавливало..

Взял я первое попавшееся японскую поделку, оформленную в виде драйвера, консольного приложения, запускающего драйвер, и собственно консольного приложения, создающего симлинки: http://homepage1.nifty.com/emk/#download_symlink
22,379 2006-09-10 01:41 http://homepage1.nifty.com/emk/symlink-1.05-src.zip
85,939 2006-09-10 01:41 http://homepage1.nifty.com/emk/symlink-1.05-x64.zip
84,450 2006-09-10 01:41 http://homepage1.nifty.com/emk/symlink-1.05-x86.cab

Ща навскидку обнаружил еще пару, причем гуевых:
http://schinagl.priv.at/nt/hardlinkshel ... llext.html
http://elsdoerfer.name/=ntfslink
Но японская работает и есть в исходниках, так что пока менять не буду.

Все что надо - это распаковать 3 файла из архива, прописать их в PATH (или банально скопировать в C:\WINDOWS), поставить в автозагрузку senable.exe и, чтобы лишний раз не перезагружаться, запустить его же. После этого из консоли можно будет создавать симлинки вот так:
ln -s существующий_файл создаваемый_файл
И заодно хардлинки:
ln существующий_файл создаваемый_файл

Для нашего примера это выглядит так:
ln -s C:\ros\trunk\reactos\output-i386\base\applications\notepad\notepad.exe C:\WINDOWS\system32\notepad.exe


В результате получим файл C:\WINDOWS\system32\notepad.exe имеющий нулевой размер, который не удаляется, при удалении исходного notepad.exe, а просто ругается.. =)
Затем при необходимости компилим РОС целиком или отдельно notepad - и симлинк просто работает =)

----------------------------------------------------------------------------------------------------

Собственно указанным выше способом можно без проблем заменять приложения из C:\ros\trunk\reactos\output-i386\base\applications
cpl-ки из C:\ros\trunk\reactos\output-i386\dll\cpl
и всевозможные dll-ки..

----------------------------------------------------------------------------------------------------

Подобный способ тестирования я бы порекомендовал тем, кто хочет начать кодить/присылать патчи в рос, но не сильно знаком с режимом ядра и пока не хочет далеко лезть в ядро и kernel-mode.
Собственно, я бы порекомендовал книжку "Щупак - Win32 API. Эффективная разработка приложений" (легко найти в djvu и примеры есть) - по ней можно изучать Win32 API и тут же, не отходя от дела проверять так ли оно работает в РОС-овских приложениях и какие в них баги.

За день такого тестирования я выявил несколько мелких багов(или даже просто мелких нереализованных удобных фич), которые можно предлагать фикстить начинающим девелоперам:
mspaint:
- при вставке картинки бОльшего(чем текущий пустой холст) размера нет автоувеличения размера холста.
- нет сохранения в jpg/png (не так просто реализовать, но просто мне не привычно..)

explorer
- не работает system tray (можно посмотреть как реализовано в сторонних открытых проектах: Explorer++ или Lite Step)
- нет свертывания по 2x Click
- нет настроек классическое или нет меню Пуск, "Мелкие значки в главном меню" и пр. красивости
- нет прозрачности в значке хрома: http://img193.imageshack.us/img193/2448/124f.png

notepad
- имеем оконо(неразвернутое) с включенной строкой состояния, включаем перенос по словам, разворачиваем на все окно и получаем снизу белую полосу:
http://img519.imageshack.us/img519/8423 ... 204737.png

regdit
- нет поиска по значеним и по данным, да и вообще поиск не работает: приложение зависает.

kbswitch
- не перехватывает переключение по Alt+Shift (м.б. потому, что хуки в РОС не реализованы, хотя все равно странно)
- не меняет иконку раскладки при автоизменении, которое делает Punto Switcher

taskmgr
- нет удаления процесса по нажатию Del(я думаю многие к этому приввыкли)
- не работает "Вид"->"История ЦП"->"отдельный график для каждого процессора"

----------------------------------------------------------------------------------------------------

Даже если приложение будет использовать ф-ии, которые еще не реаизованы в РОС или неправильно работают - всегда можно закомментить эти места, но при этом будет видно чего и где для счастья не хватает или где закралась ошибка. В дальнейшем можно будет тестить аналогичным методом подмены и kernel-mode части, но я бы предложил сначала тестить, подменив модуль в виртуалке с установленой хр/2003, потом проверил на тестовой машине, а потом использовал бы на реальной.. Но до этого еще надо дожить..


PS для форума длинновато получилось, на open-life или жж пока решил не постить - жду одобрения сообщества, модераторов и т.п.
Demonidios
Posts: 237
Joined: Fri Sep 25, 2009 7:35 pm

Re: Тестирование exe-ек, dll-ек и cpl-ек под XP

Post by Demonidios »

Вы все правильно сделали. Но, по моему мнению, возможен еще и такой вариант:
1. Загружаем ХРюшу(на реальной или виртуальной машине).
2. Копируем из РеактОС нужный компонент/приложение на свободное место на диске, в заранее созданную папку.
3. Запускаем диспетчер задач.
4. Ищем процесс, соответствующий нужному приложению.
5. Убиваем его.
6. Запускаем файл, скопированный из дистрибутива РеактОС.
7. Смотрим результаты. :)

Сегодня пробовал новый экплорер РеактОС в ХР. Тоже сразу в глаза бросилось отсутствие иконок в трее. Программы, висевшие в памяти и работающие в фоне(менеджер закачек, Опера АС 3.7, Касперский 7, Аимп 2.6, БитМетер 2) не заглючили, продолжали работать исправно. Без проблем запустилась игра НекроВизион(непатченая). Снова убил процесс, вернул родной эксплорер ХР. Система снова ничего не заметила, все продолжало работать корректно.
Slava87
Posts: 27
Joined: Fri Sep 12, 2008 1:58 pm

Re: Тестирование exe-ек, dll-ек и cpl-ек под XP

Post by Slava87 »

Как говорится, чем бы дитя не тешилось... лишь бы патчи были написаны :?
User avatar
X512
Posts: 66
Joined: Mon Jul 13, 2009 10:07 pm
Location: Japan

Re: Тестирование exe-ек, dll-ек и cpl-ек под XP

Post by X512 »

Тоже сразу в глаза бросилось отсутствие иконок в трее.
Для того, чтобы трей работал, надо прописать оболочку в реестре.
mshak
Posts: 6
Joined: Tue Jul 05, 2011 8:29 pm

Функционирование приложений ReactOS в WinXP

Post by mshak »

Правильно ли я понял приложения которые написаны для ReactOS (в частности paint, regedit, calc) и работают в РОС так-же должны работать и под MS WIN? если да, то почему это несовсем так?
calc:
в текстовом поле где после запуска должно быть "0" появляются кракозябры. Тоже проявляется если набрать какое-нибудь число и менять систему счисления либо вид калькулятора (обычный, инженерный...)

regedit:
хотел использовать вместо виндового, уж очень он мне понравился но:
- неработает контекстное меню и строка меню (точнее они открываются, но по выбору действия ничего не происходит)
- если находится в ветке HKLM и нажимать F5 (обновить) то переодически появляется/пропадает ветка HKEY_LOCAL_MACHINE\SECURITY

paint: вроде работает ))

во всех приложениях если зайти Справка - О программе выдается стандарное окно MS Win из которого получается что эти программки написаны в MS :)
hto
Developer
Posts: 2193
Joined: Sun Oct 01, 2006 3:43 pm

Post by hto »

Правильно ли я понял приложения которые написаны для ReactOS […] и работают в РОС так-же должны работать и под MS WIN?
Да, должны.
если да, то почему это несовсем так?
http://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%B3 :)
calc:
в текстовом поле где после запуска должно быть "0" появляются кракозябры. Тоже проявляется если набрать какое-нибудь число и менять систему счисления либо вид калькулятора (обычный, инженерный...)

regedit:
хотел использовать вместо виндового, уж очень он мне понравился но:
- неработает контекстное меню и строка меню (точнее они открываются, но по выбору действия ничего не происходит)
- если находится в ветке HKLM и нажимать F5 (обновить) то переодически появляется/пропадает ветка HKEY_LOCAL_MACHINE\SECURITY
http://code.google.com/p/reactos-usersp ... /File_Bugs
во всех приложениях если зайти Справка - О программе выдается стандарное окно MS Win из которого получается что эти программки написаны в MS :)
Это нормально. :)
mshak
Posts: 6
Joined: Tue Jul 05, 2011 8:29 pm

Re: Функционирование приложений ReactOS в WinXP

Post by mshak »

проверил на другом компьютере, аналогично:
багрепорт:
calc - bug 6358
regedit - bug 6359
Post Reply

Who is online

Users browsing this forum: No registered users and 6 guests