Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для semiono

Ветеран


Сообщения: 836
Благодарности: 33

Профиль | Отправить PM | Цитировать


Serega_, ведь вы удалили файлы которые свободно можно удалить.
Но я имел ввиду используя PendingFileRenameOperations, чтобы проверить работу самого параметра.
И тут уже не важно что именно это за файлы, так как если помните разговор был об нулях...

Но это уже даже не нужно, так как пару решений снова возникло.

Для того чтобы проверить правильность записей, можно использовать это

Код: Выделить весь код
 ; http://flatassembler.net/fasmw16738.zip
include '%fasm%\win32wx.inc' ; здесь нужно записать корректно!

section '.code' code readable executable
start:
        invoke MoveFileEx,lpExistingFileName1,NULL,MOVEFILE_DELAY_UNTIL_REBOOT
        invoke MoveFileEx,lpExistingFileName2,NULL,MOVEFILE_DELAY_UNTIL_REBOOT
        invoke MoveFileEx,lpExistingFileName3,NULL,MOVEFILE_DELAY_UNTIL_REBOOT
        invoke  ExitProcess,0

        lpExistingFileName1 db '\\?\C:\New Text Document.txt',0
        lpExistingFileName2 db '\\?\C:\New Text Document (2).txt',0
        lpExistingFileName3 db '\\?\C:\New Text Document (3).txt',0

data import
        library kernel32,'KERNEL32.DLL'
        import kernel32,ExitProcess,'ExitProcess',MoveFileEx,'MoveFileExA'
end data

section '.rsrc' resource data readable

        directory RT_ICON,icons,RT_GROUP_ICON,group_icons,RT_VERSION,versions
        resource icons,1,LANG_NEUTRAL,icon_data
        resource group_icons,17,LANG_NEUTRAL,main_icon
        resource versions,1,LANG_NEUTRAL,version

        icon main_icon,\
        icon_data,'%SystemRoot%\Icons\exec.ico'
Получается, что нулей между строками пять! Использование этой API вообще меня обрадовало,
так как записи сами добавляются в хвост, без всяких {olddata}
Можно даже этим бинарем и пользоваться как внешним скриптом.

Но есть и другое решение. Я же изначально знал что NSIS переименовывает файлы а не удаляет.
Но я что-то сам комплексовал и тупил. Почему-то мне показалось это не надёжно то ли не совсем очевидно.
Но я всётаки сейчас понял как всё должно быть, правда ещё сказалось то что я наконец-то прочитал документацию, как они пишут что PendingFileRenameOperations запускается после chkdsk ещё до старта оболочки, тоесть можно смело переименовывать файлы, а зачем их тогда удалять!
Именно так nsis инсталлер и делает. Просто копируется новый файл как *.tmp и на загрузке он копируется
скажем в shll32.dll. То есть я лишнего намудрил с удалениями *.old

Цитата Serega_:
я бы не хотел использовать ваши инсталляторы на своей системе. »
Это не удивительно, и я знаю об этом.
Но просто у меня с инсталлерами это целая философия. Вообще это часть "моей системы" winxp,
которую я собираю для себя. Но всё же хочется верить что и ктонить ещё установит.

Я просто думаю о том, что многие программы, практически все устанавливаются поверх себя сколько угодно раз.
Приложения должны устанавливаться в %ProgramFiles% за исключением каких-то гигантов.
Просто потому что {pf} уже придуманна и её проще целиком переименовать и переместить если не нравиться то что есть.
uninst.exe - хотя и очень маленький файл, но тем не менее по большому счёту хлам.
Я всё же расчитываю немного на продвинутого пользователя, чтобы удалить программу достаточно
удалить её папку [del] и если надо затереть ключи в software разделах реестра.
Остальное можно расчистить любым рег-клинером.
Но самое глдавное, что на самом деле эти записи не на что не влияют.
Да и на размере реестра это не сказывается. Если записи актуальные, то новая интсаляция перепишет их.
Тут дело ещё и в том, что например Adobe Reader во-первых засоряет не на шутку HKLM\Software\Classes,
вдобавок пишет тонны хешей в uninstall ветку реестра, это уже работает MSI интсаллер.
Я одинакого обхожу стороной их обоих. И как бы нахально заявляю что мои програмки все не проблемные
и даже если не нужны совершенно, то не стоит их удалять, так как они никому не мешают.
Хотя о вкусах конечно можно поспорить.
Вообщем я сначала делаю а потом меня пусть осудят ))
Я надеюсь не сильно ругать будут ))
Сейчас стал пробираться в 64 битную WinXP, слежу чтобы инсталятор правильно работал и там.
Поначалу массу ошибок понаделал, так как я думал HKCU32 это панацея от всего, но как оказалось
такого ключа вообще нет, а есть только HKLM32 тоесть ссылка на HKLM\Software\wow6432node,
что гораздо чаще используется так как приложения в большинстве своём 32 битные.
Но ито там думать приходиться так как ярлык
Код: Выделить весь код
Root: HKLM; Subkey: "Software\Classes\CLSID\{{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Cpuz"; ValueType: string; ValueName: ""; ValueData: "&Cpuz"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "Software\Classes\CLSID\{{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Cpuz\command"; ValueType: string; ValueName: ""; ValueData: "{code:GetPath}\Cpuz.exe"; Flags: noerror; Permissions: admins-full
просто не будет виден из HKLM32 под 64 битным проводником ;-

Цитата Serega_:
если да, то использовал скрипт и всё нормально удалилось: »
а в паскале я очень тяжело разбираюсь
чтобы что либо написать самостоятельно гуглю часами как и в остальном всём

-------
Полезное сообщение


Последний раз редактировалось semiono, 04-06-2009 в 18:16.


Отправлено: 17:58, 04-06-2009 | #856