RegPathConverter - динамическое изменение пути к приложению в реестре.
$$$
До Н.Г.
ВЕРСИЯ ДЛЯ СЛАБОВИДЯЩИХ

RegPathConverter - динамическое изменение пути к приложению в реестре.

Опубликовано: 22-04-2014 22:36 Автор: MBTY Теги: Мои разработки
Что может быть общего у нерабочего Лаунчера Skyrim,
Skyrim Launcher (dzzb.ru)
Skyrim Launcher
Неприменяющегося патча Warcraft III,
Warcraft III patch (dzzb.ru)
Warcraft III patch
Ошибки запуска Red Alert 3,
Red Alert 3 (dzzb.ru)
Red Alert 3
Нерабочего Scanner,
scanner (dzzb.ru)
Scanner
И, скажем, нерабочей функции автозагрузки у часов AlfaClock Free Edition? (скрина нет :) )
Ответ: Неправильно прописан путь к приложению в реестре.
Да. Многие приложения (чаще игры) не могут нормально функционировать, если путь в реестре не сходится с действительностью (Игра лежит в C:\Games, а в реестре указано D:\Games) или его там просто нет. Чаще всего ключ, который за это отвечает несет имя "Installpath".
Когда он может теряться или запортиться?
1) Вы переустановили систему. Ключ в реестре исчез и игра перестала запускаться.
2) Вы скопировали игруху у друга, принесли домой и получили ту же ошибку - реестр-то вы у друга не взяли.
3) Купили на торрентах кривой репак. Вспомните описания к множеству игрух в сети "Все пути реестра сохранены" - это как-раз то, о чем я говорю.
Чтобы было окончательно всё понятно, приведу примеры к вышеописанным приложениям попорядку:
Лаунчер Skyrim будет работать наполовину (не увидит дополнений и не сохранит настройки), если у вас потерян ключ реестра: "Installed Path"
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Bethesda Softworks\Skyrim]
"Installed Path"="D:\\Program Files\\R.G. Mechanics\\Skyrim - Legendary Edition\\"
Патч Warcraft не применится, если потерян "InstallPath"
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III]
"InstallPath"="D:\\Games\\WarCraft III"
Red Alert 3 не стартанет без "Install Dir"
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Electronic Arts\Electronic Arts\Red Alert 3 Uprising]
"Language"="russian"
"Install Dir"="d:\\Program Files\\Electronic Arts\\Red Alert 3 Uprising\\"
Scаnner добавляет строку в контекстное меню дисков и папок, которое не сработает, если повреждены следующие ключи.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\Scan_Content]
@="Отобразить размеры через Scanner"
"Icon"="C:\\Scanner\\Scanner.exe"
[HKEY_CLASSES_ROOT\Directory\shell\Scan_Content\command]
@="C:\\Scanner\\Scanner.exe \"%1\"" <<<<ЭТОТ
[HKEY_CLASSES_ROOT\Drive\shell\Scan_Content]
@="Отобразить размеры через Scanner"
"Icon"="C:\\Scanner\\Scanner.exe"
[HKEY_CLASSES_ROOT\Drive\shell\Scan_Content\command]
@="C:\\Scanner\\Scanner.exe \"%1\"" <<<<И ЭТОТ
Многие приложения (для нас AlfaClock) вписывают себя в автозагрузку через реестр:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
"AlfaClock Classic"="\"c:\\Program Files\\AlfaClock\\AlfaClock.exe\" /startup"
И так далее.
Решить проблему запуска любого приложения труда не составляет: Загуглил нужную ветку реестра для приложения, скачал файл в формате reg подправил пути блокнотом и применил. Потом имеет смысл держать этот файл в папке с приложением, на случай переустановки системы или перенесения самого приложения в другю папку. Обычному пользователю с таким приходится сталкиваться если ниразу, то пару раз в жизни. (Хотя в сети почти для каждой игры или приложения можно найти тему, где пользователи просят поделиться веткой реестра).
Другое дело, если вы клепаете установочные пакеты к приложениям, делаете репаки и так далее. Нужно пилить скрипты и изобретать костыли, чтобы путь к прижению прописывался в реестр всегда верно, в зависимости от того, куда пользователь установит ваше приложение. Самый простой способ написать cmd скрипт. Приведу пример для Варкрафта:
set "put=%cd:\=\\%" << скрипт определет путь и приписывает везде "\\". Заметили, что в реестре всегда путь указан через две косые черты?
echo Windows Registry Editor Version 5.00>%tmp%\tmpreg.reg << Присывается обязательная первая строка файла реестра во временный файл реестра, который и будет применен.
echo [HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III]>>%tmp%\tmpreg.reg << Вторая строка реестра. Без изменений.
echo "InstallPath"="%put%">>%tmp%\tmpreg.reg << Тут уже путь указан, как переменная. Будет указан скриптом при запуске.
reg import "%tmp%\tmpreg.reg" << Применение файла реестра
DEL /f /q "%tmp%\tmpreg.reg" << Удаление файла реестра.
Получается, что можно абсолютно любой файл реестра конвертировать в скриптовую форму и хранить его в папке с приложением, на всякий случай или вшить скрипт в Ваш установщик.
Ну и для своих собственных нужд был создан конвертер файла реестра в скрипт под названием RegPathConverter, работать с которым очень просто:
В левую часть закидываем (или копипастим) исходный реестр, ОБЯЗАТЕЛЬНО ВЫДЕЛЯЕМ ПУТЬ (выделенный кусок текста и будет заменен на динамическую переменную), конвертируем реестр в скрипт, сохраняем, применяем.
RegPathConverter(dzzb.ru)
RegPathConverter
Кнопка "1-2-3" Выполняет конвертирование,сохранение и применение скрипта одним шагом.
Скачать


◘▲▼▲◘◘▲▼▲◘◘▲▼▲◘