Ветеран
Сообщения: 1264
Благодарности: 1024
|
Профиль
|
Отправить PM
| Цитировать
Цитата fantik:
Приятно видеть свой скрипт в виде "скрипта от Black Babay" »
|
fantik,
Разрабатывали вы его вместе и ссылка в шапке этой темы - это ссылка на пост Black Babay и к тому же последняя, по которой скрипт скачивается.
Цитата fantik:
и ошибок, насколько мне известно, там с тех пор не находили. »
|
fantik,
Значит плохо искали. Сравните процедуры регистрации и дерегистрации файловых расширений в вашем и моем скриптах. Отличия не замечаете?
Итак: - Регистрация форматов.
- HKLM\SOFTWARE\Classes\FastStone.XXX\...
У вас:
Код:
RegWriteStringValue(HKLM, 'SOFTWARE\Classes\FastStone.'+formats[i].ext+'\shell\open\command', '', '"'+ExpandConstant('{app}')+'\FSViewer.exe" "%1"');
RegWriteStringValue(HKLM, 'SOFTWARE\Classes\FastStone.'+formats[i].ext+'\DefaultIcon', '', ExpandConstant('{app}')+'\FSIcons.db,'+formats[i].icon);
У меня добавлено:
Код:
RegWriteStringValue(HKLM, 'SOFTWARE\Classes\FastStone.' + formats[i].ext, '', 'FastStone ' + UpperCase(formats[i].ext) + ' File');
- эти записи делает оригинальный инсталлятор, вы же забыли. Ошибка №1. - HKLM\SOFTWARE\Classes\.XXX
Все правильно, бэкап безымянного ключа, эти записи добавляются при применении ассоциаций пользователем. - HKCU\SOFTWARE\Classes\.XXX
По-моему, сюда добавляются записи при применении ассоциаций пользователем, при условии, что здесь уже присутствуют классы. У вас эти записи не создаются. Ошибка №2. - HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.XXX
Все правильно, бэкап ключа Progid.
- Дерегистрация форматов.
- HKLM\SOFTWARE\Classes\.XXX
У вас:
Код:
RegWriteStringValue(HKLM, 'SOFTWARE\Classes\.'+formats[i].ext, '', ExpandConstant('{reg:HKLM\SOFTWARE\Classes\.'+formats[i].ext+',FastStone.bak|}'));
RegDeleteValue(HKLM, 'SOFTWARE\Classes\.'+formats[i].ext, 'FastStone.bak');
У меня:
Код:
RegQueryStringValue(HKLM, 'SOFTWARE\Classes\.' + formats[i].ext, 'FastStone.bak', S);
If S = '' Then
RegDeleteKeyIncludingSubkeys(HKLM, 'SOFTWARE\Classes\.' + formats[i].ext)
else
RegWriteStringValue(HKLM, 'SOFTWARE\Classes\.' + formats[i].ext, '', ExpandConstant('{reg:HKLM\SOFTWARE\Classes\.' + formats[i].ext + ',FastStone.bak|}'));
, т.е. если FastStone.bak пустой, то класса до установки не существовало, а значит класс должен быть удален. У вас же останется пустая запись. Ошибка №3. - HKCU\SOFTWARE\Classes\.XXX
Раз вы не вносили эти записи, то и удалять нечего. - HKLM\SOFTWARE\Classes\FastStone.XXX
Все правильно. - HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.XXX
Все правильно. Если бэкап пустой, ключа Progid до установки не было.
- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\FSViewer.exe
Куда подевали? Ошибка №4.
P.S. Не зря. Скрипт хорош, но недоделан.
P.P.S. Можно еще к фунционалу добавить удаление записей не только из HKCU пользователя, запустившего деинсталлятор, но и из HKCU других пользователей на ПК. В принципе решаемо.
|