Войти

Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.


Страниц : [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

kotkovets
09-12-2012, 12:02
http://nsis.sourceforge.net/mediawiki/skins/nsis/logo.gif

Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. (http://nsis.sourceforge.net/Main_Page)


Описание:NSIS (Nullsoft Scriptable Install System) - профессиональная система для создания инсталляторов в среде Windows с октрытым исходным кодом. При своем малом размере система очень гибкая, и при с широкими возможностями. Генерируемый ею инсталлятор также имеет очень маленький размер и идеально подходит для распространения продукта через Интернет.

Текущая версия: NSIS 3.05 от 15 декабря 2019 года
Скачать (http://nsis.sourceforge.net/Download) | Архив сборок версии (http://sourceforge.net/project/showfiles.php?group_id=22049&package_id=15374)

Первая часть этой темы (http://forum.oszone.net/thread-67386.html)
Скачать первую часть этой темы одним архивом (ftp://tools.oszone.net/doc/NSIS%20-%20%D0%B2%D1%81%D0%B5%20%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D1%87%D0%B0%D1%81%D1%82%D1%8C_1. zip)

ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов:
Справочник по NSIS (http://forum.oszone.net/thread-168287.html) - создан силами нашего сообщества.
Руководство пользователя. Перевод – Поляков А.В (http://av-mag.ru/doc/nsis.htm), зеркало (https://yadi.sk/i/UDni9G913UvvE7)

Документация

Официальное руководство (http://nsis.sourceforge.net/Docs)
Статья: создаем инсталлятор под Windows в NSIS (http://www.markelov.net/articles.php?lng=ru&pg=39)
Статья: Инсталляция by NSIS (http://www.compdoc.ru/bd/other/nsis/)
Примеры от K.A.V.
Кликабельный BrandingText (http://forum.oszone.net/post-1331929-364.html)
Картинки-превьюшки для радиокнопок (http://forum.oszone.net/post-1343128-395.html)

Утилиты разработчика
HM NIS EDIT - лучший редактор сценариев для NSIS с открытым исходным кодом (http://hmne.sourceforge.net/)
Reg2Nsis конвертор reg файлов в скрипт NSIS (http://nsis.sourceforge.net/Reg2Nsis_-_convert_registry_info_into_NSIS_commands)
ISS2NSI - конвертор скриптов Inno Setup в скрипты NSIS (http://prdownloads.sourceforge.net/hmne/iss2nsi10a1.zip?download)
Плагин для IDE Eclipse EclipseNSIS (http://nsis.sourceforge.net/EclipseNSIS_-_NSIS_plugin_for_EclipseEclipseNSIS). Сам Eclipse здесь: http://www.eclipse.org/
Mihov NSIS Helper - маленькая и простая утилита для визуального создания скриптов NSIS. (http://www.psenica.com/nsis/)

Расширение функциональности

Плагины и полезности к NSIS: http://nsis.sourceforge.net/Category:Plugins

Определение всех ОС WINDOWS (winver2.nsh) (https://yadi.sk/d/NbcEluV3i9LAk)
Работа с процессами (ProcessFunc.nsh) (http://forum.oszone.net/post-2390157-1284.html)

Интерфейс Venis GUI: http://www.spaceblue.com/products/venis
Интерфейс ExperienceUI GUI http://experienceui.xx0r.info/oldengine.php/experienceui/home
Пример:
http://pic.ipicture.ru/uploads/091125/23111/3G4gA1e3q5.png (http://ipicture.ru/)

Интерфейс SkinCrafter Plugin - http://www.skincrafter.com/
Пример:
http://www.skincrafter.com/img/tour/skin1.png
Инструкция по использованию (http://forum.oszone.net/post-1317606-267.html) от K.A.V. (http://forum.oszone.net/member.php?userid=60480)

Примеры скриптов на нашем форуме
Скрипт NSIS для перепаковки AIMP2+Сборки (http://forum.oszone.net/thread-101182.html)
Тема для Notepad++(пример парсинга XML) (http://forum.oszone.net/post-933509.html)

Достоинства

◦ Очень маленький размер установочного блока (около 34 Кбайт)
◦ zlib, bzip2 и LZMA-сжатие
◦ Гибкая система скриптов (спецально разработанная для инсталляторов)
◦ Поддержка многоязычности, точнее 53 языка, есть возможность ввода нового языка
◦ Поддержка плагинов
◦ Скрипт Препроцессор
◦ Создание Web-инсталляторов


Ещё немного полезной информации:


NSIS создан как альтернатива InstallShield, предназначенного для коммерческих продуктов.

NSIS был создан для распространения Winamp. Он базируется на предыдущем продукте Nullsoft — PiMP (plugin Mini Packager), иначе известным как SuperPiMP. После версии 2.0a0, проект был перемещён на SourceForge.net, где к работе над ним присоединились и сторонние разработчики. NSIS 2.0 был выпущен в свет 2 года спустя.

NSIS версии 1 был очень похож на классический Windows Installer, но он был более управлемым с помощью скриптов и поддерживал другие форматы сжатия. NSIS версии 2 поддерживает новый графический интерфейс пользователя, LZMA-сжатие, многоязычность и имеет хорошую систему плагинов.

Версия 2.01 была первой версией, поддерживающей компиляцию на любой из POSIX-платформ. Это позволило создавать Windows-инсталляторы на GNU/Linux и FreeBSD без использования эмулятора Wine. На данный момент поддерживается компиляция только для Windows.

Компилятор NSIS — программа makensis — компилирует скрипты в исполняемый код. Каждая строчка скрипта содержит одну команду. Пример:
# Пример скрипта
Name "Example1"
OutFile "example1.exe"
InstallDir "$PROGRAMFILES\Example1"
Page Directory
Page InstFiles
Section
SetOutPath $INSTDIR
File ..\makensis.exe
SectionEnd


Modern User Interface

В версии 2.0 был введён новый графический интерфейс пользователя, названный Modern UI (MUI). MUI очень похож на интерфейс мастеров, он поддерживает splash screen, выбора языка, выбор компонентов для установки и более широкие возможности настройки по сравнению со своим предшественником. Пример:
# Пример скрипта с Modern UI
!include MUI.nsh
Name "Example 2"
OutFile Example2.exe
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "license.rtf"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "German"
!insertmacro MUI_LANGUAGE "French"
Section "Extract makensis"
SetOutPath $INSTDIR
File ..\makensis.exe
SectionEnd
NSIS может быть расширен при помощи плагинов, которые могут быть написаны на C++, Си, и Delphi. Плагины могут быть использованы для улучшения функциональности и интерфейса инсталлятора. Плагины могут быть вызваны в любой части кода NSIS скрипта.

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


◦ Антивирус Касперского
◦ Qip
◦ 3DNA Desktop
◦ 7-Zip
◦ ATI Display Driver
◦ CDex
◦ Dev-C++
◦ DivX
◦ eMule FileZilla
◦ Google Picasa
◦ Google Talk
◦ Intel C (компилятор)
◦ IrfanView
◦ LightAllow
◦ LyX
◦ Miranda IM Mozilla Firefox 2.0
◦ NASA World Wind
◦ Notepad++
◦ OpenOffice.org для Windows
◦ Pidgin
◦ VLC Player
◦ Winamp


В настоящее время инсталляторы NSIS не могут быть полностью декомпилированы. Сам инсталлятор не содержит в себе никаких функций для того, чтобы извлечь сценарий и/или файлы без инсталляции. Это - выбор разработчика, доступны ли исходный текст и/или файлы для инсталлятора для публики или нет. Есть, однако, внешние инструментальные средства, которые позволяют это сделать. 7-zip поддерживает частичную распаковку NSIS инсталляторов с алгоритмом сжатия lzma или bzip. Так же существует мульти-архивный плагин для TotalCommander.
Небольшая заметка для разработчиков: используйте DCryptDll, если хотите скрыть некоторые файлы в вашей инсталляции.

Valdise
09-12-2012, 13:47
Моё почтение гуру NSIS-а.
Подскажите, возможно-ли добавить описание в создаваемом ДЕинсталляторе?
Чтобы как у Инсталлятора (VIAddVersionKey), при наведении курсора на установщик появлялось описание:

"ProductName" "${PRODUCT_NAME}"
"FileDescription" "Удаление программы"
"ProductVersion" "${PRODUCT_VERSION}" и проч.

Заранее признателен.

kotkovets
09-12-2012, 14:28
Подскажите, возможно-ли добавить описание в создаваемом ДЕинсталляторе? »
VIProductVersion "1.1.1.1"
VIAddVersionKey "ProductName" "PRODUCT_NAME"
VIAddVersionKey "LegalCopyright" "PRODUCT Ltd."
VIAddVersionKey "CompanyName" "© PRODUCT AG"
VIAddVersionKey "FileDescription" "PRODUCT_NAME PRODUCT_VERSION"
VIAddVersionKey "FileVersion" "1"
Эту же информацию пишет автоматом в деинсталятор, тока проверил

Valdise
09-12-2012, 14:50
Эту же информацию пишет автоматом в деинсталятор, тока проверил »
Спасибо за ответ, НО об этом я знаю и в вопросе писал...
Вопрос ещё раз: Можно-ли сделать так, чтобы надписи\подписи при наведении курсора, у Инсталлятора и ДЕинсталлятора были разными?

kotkovets
09-12-2012, 15:05
Можно-ли сделать так, чтобы надписи\подписи при наведении курсора, у Инсталлятора и ДЕинсталлятора были разными? »
не знаю - скорее всего нет, если автоматом пишет, то NSIS не предоставляет стандартный способ..
да не особо нужно то, если честно..

profcom
10-12-2012, 12:45
Подскажите пожалуйста как можно отследить нажатие кнопок аналогичных "назад" "далее"?

kotkovets
10-12-2012, 14:21
profcom, как можно отследить нажатие кнопок аналогичных "назад" "далее"? »
это типа понять и простить ? :)

profcom
10-12-2012, 15:14
это типа понять и простить ? »
ну не совсем :) , допустим мы изменили стандартный интерфейс и добавили еще кнопку. Так вот как привязать функцию к нажатию этой кнопки. Так вот кнопка создана не nsdialogs, и соответственно макрос onclick не работает с этой кнопкой.

K.A.V.
10-12-2012, 16:01
допустим мы изменили стандартный интерфейс и добавили еще кнопку. Так вот как привязать функцию к нажатию этой кнопки. »
Плагин ButtonEvent plug-in (http://nsis.sourceforge.net/ButtonEvent_plug-in) вам в помощь, уважаемый ;)

dix75
10-12-2012, 16:30
Добрый день!

Иногда требуются админ права, чтобы инсталлятор отработал, каим образом можно сообщить пользователю , что нужны для инсталляции админ права.

Сообщением типа у Вас нет админ прав и завершить инсталляцию, не очень современно.
Как быть

K.A.V.
10-12-2012, 20:08
Иногда требуются админ права, чтобы инсталлятор отработал, каим образом можно сообщить пользователю , что нужны для инсталляции админ права. »
Показать обычное сообщение :)

UserInfo::GetAccountType
Pop $1
StrCmp $1 "Admin" +3 0
MessageBox MB_OK|MB_ICONEXCLAMATION `Для установки программы необходимо войти в систему с правами Администратора!`
quit


Сообщением типа у Вас нет админ прав и завершить инсталляцию, не очень современно. »
А что для вас современно? Здоровый диалог в пол экрана с картинкой на заднем фоне?

dix75
11-12-2012, 13:04
Показать обычное сообщение »
Спасибо

Добрый день!

Подскажите пожайлуста, возможно кто-нибудь знает как можно установить тулбар в ie без лишних запросов со стороны браузера.

MKN
11-12-2012, 16:18
Подскажите пожалуйста - есть ли в nsDialogs макрос отметки (снятия отметки) секций ? Не обнаружил в доке такого...
Что то типа аналога ${SectionIsSelected} ${ID sec}
Если нет, то как минимальным кодом это можно реализовать ?

dix75
11-12-2012, 16:28
Возможно ли узнать запущена прорамма или нет?

Просто убивать её критично и просить пользователя закрыть тоже неверно (пользователь не любит лишние вопросы)

profcom
11-12-2012, 16:57
Возможно ли узнать запущена прорамма или нет? »
Элементарно, в справке есть статья с плагином по работе с процессами, а так же есть другие плагины с схожими функциями.
Отследите работает ли программа по ее процессу.

kotkovets
11-12-2012, 17:22
Подскажите пожалуйста - есть ли в nsDialogs макрос отметки (снятия отметки) секций ? Не обнаружил в доке такого...
Что то типа аналога ${SectionIsSelected} ${ID sec} »
а зачем? ты не рисуешь собственный treeview
Есть встроенные средства в Section.nsh для собственного treeview
---
через nsDialogs я рисовал treeview
http://img7.imageshack.us/img7/8239/1233m.png
минимальным никак - забудь, особенно, если это еще чужой treeview

kotkovets
11-12-2012, 19:05
habib2302, чет не туда... у автора скрипт спрашивайте.
на форуме он здесь прописан - в личку ему пишите.

habib2302
11-12-2012, 20:14
kotkovets,
адресок на его профиль можно

kotkovets
11-12-2012, 20:33
habib2302, поиск по теме в первой части --> diakov

diakov
12-12-2012, 00:34
kotkovets, вот заинтересовался созданием портативок по подобию PortableApps.com, и вот дошло дело до создания лаунчера...как я понимаю данная технология заключается в том что когда прога запускается лаунчер вносит необходимые изменения в систему, а когда закрыть, тот самый лаунчер удаляет все следы присутствия в системе (за исключения, понятно самих профилей или настроек которые хранятся непосредственно в папке портабла) вот нарыл скрипт лаунчера фоксит немного что переделал под неро (только в шапке и appinfo.ini) что бы проверить запустится ли), тело скрипта не трогал! Так вот непонятно где в скрипте вносить данные (который должны вносится в систему при запуске ...а где при завершении работы проги...не могли бы объяснить, вот сам код:




!define PORTABLEAPPNAME "Nero Express Portable"
!define NAME "Nero Express Portable"
!define APPNAME "NeroExpressPortable"
!define VER "12.0.28.001"
!define WEBSITE "repachok.net"
!define DEFAULTEXE "NeroExpress.exe"
!define DEFAULTAPPDIR "Nero"
!define DEFAULTSETTINGSDIR "settings"
!define LAUNCHERLANGUAGE "Russian"

;=== Program Details
Name "${PORTABLEAPPNAME}"
OutFile "..\..\${NAME}.exe"
Caption "${PORTABLEAPPNAME}"
VIProductVersion "${VER}"
VIAddVersionKey ProductName "${PORTABLEAPPNAME}"
VIAddVersionKey CompanyName "repachok.net"
VIAddVersionKey LegalCopyright "REPACHOK GROUP"
VIAddVersionKey FileDescription "${PORTABLEAPPNAME}"
VIAddVersionKey FileVersion "${VER}"
VIAddVersionKey ProductVersion "${VER}"
VIAddVersionKey InternalName "${PORTABLEAPPNAME}"
VIAddVersionKey OriginalFilename "${NAME}.exe"
;VIAddVersionKey PrivateBuild ""
;VIAddVersionKey SpecialBuild ""

;=== Runtime Switches
CRCCheck On
WindowIcon Off
SilentInstall Silent
AutoCloseWindow True
RequestExecutionLevel user

; Best Compression
SetCompress Auto
SetCompressor /SOLID lzma
SetCompressorDictSize 32
SetDatablockOptimize On

;=== Include
;(Standard NSIS)
!include LogicLib.nsh
!include Registry.nsh
!include TextFunc.nsh
!insertmacro GetParameters
!include x64.nsh

;(NSIS Plugins)
!include TextReplace.nsh

;(Custom)
!include ReadINIStrWithDefault.nsh
!include ReplaceInFileWithTextReplace.nsh
;!include CheckForPlatformSplashDisable.nsh

;=== Program Icon
Icon "..\..\App\AppInfo\appicon.ico"

;=== Languages
;LoadLanguageFile "${NSISDIR}\Contrib\Language files\${LAUNCHERLANGUAGE}.nlf"
;!include PortableApps.comLauncherLANG_${LAUNCHERLANGUAGE}.nsh

Var PROGRAMDIRECTORY
Var SETTINGSDIRECTORY
Var ADDITIONALPARAMETERS
Var EXECSTRING
Var PROGRAMEXECUTABLE
Var INIPATH
Var SECONDARYLAUNCH
Var MISSINGFILEORPATH
Var LASTDRIVE
Var CURRENTDRIVE
Var FAILEDTORESTOREKEY
Var USERTYPE
Var RegKeyFDFExists
Var RegKeyPDFExists
Var RegKeyPDFIsBlank

Section "Main"
;=== Check if already running
System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${NAME}") i .r1 ?e'
Pop $0
StrCmp $0 0 CheckINI
StrCpy $SECONDARYLAUNCH "true"

CheckINI:
;=== Find the INI file, if there is one
IfFileExists "$EXEDIR\${NAME}.ini" "" NoINI
StrCpy $INIPATH "$EXEDIR"

;=== Read the parameters from the INI file
${ReadINIStrWithDefault} $0 "$INIPATH\${NAME}.ini" "${NAME}" "${APPNAME}Directory" "App\${DEFAULTAPPDIR}"
StrCpy $PROGRAMDIRECTORY "$EXEDIR\$0"
${ReadINIStrWithDefault} $0 "$INIPATH\${NAME}.ini" "${NAME}" "SettingsDirectory" "Data\${DEFAULTSETTINGSDIR}"
StrCpy $SETTINGSDIRECTORY "$EXEDIR\$0"
${ReadINIStrWithDefault} $PROGRAMEXECUTABLE "$INIPATH\${NAME}.ini" "${NAME}" "${APPNAME}Executable" "${DEFAULTEXE}"
${ReadINIStrWithDefault} $ADDITIONALPARAMETERS "$INIPATH\${NAME}.ini" "${NAME}" "AdditionalParameters" ""

IfFileExists "$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE" FoundProgramEXE NoProgramEXE

NoINI:
;=== No INI file, so we'll use the defaults
StrCpy $PROGRAMEXECUTABLE "${DEFAULTEXE}"
StrCpy $ADDITIONALPARAMETERS ""

IfFileExists "$EXEDIR\App\${DEFAULTAPPDIR}\${DEFAULTEXE}" "" NoProgramEXE
StrCpy $PROGRAMDIRECTORY "$EXEDIR\App\${DEFAULTAPPDIR}"
StrCpy $SETTINGSDIRECTORY "$EXEDIR\Data\${DEFAULTSETTINGSDIR}"
Goto FoundProgramEXE

NoProgramEXE:
;=== Program executable not where expected
StrCpy $MISSINGFILEORPATH $PROGRAMEXECUTABLE
MessageBox MB_OK|MB_ICONEXCLAMATION `$(LauncherFileNotFound)`
Abort

FoundProgramEXE:
StrCmp $SECONDARYLAUNCH "true" GetPassedParameters
FindProcDLL::FindProc "${DEFAULTEXE}"
StrCmp $R0 "1" WarnAnotherInstance CheckSettings

WarnAnotherInstance:
MessageBox MB_OK|MB_ICONINFORMATION `$(LauncherAlreadyRunning)`
Abort

CheckSettings:
;=== Check for data files
IfFileExists "$SETTINGSDIRECTORY\*.*" GetPassedParameters

;=== Copy the default settings files
CreateDirectory "$SETTINGSDIRECTORY"
CopyFiles /SILENT "$EXEDIR\App\DefaultData\settings\*.*" "$SETTINGSDIRECTORY"

GetPassedParameters:
;=== Get any passed parameters
${GetParameters} $0
StrCmp "'$0'" "''" "" LaunchProgramParameters

;=== No parameters
StrCpy $EXECSTRING `"$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE"`
Goto AdditionalParameters

LaunchProgramParameters:
StrCpy $EXECSTRING `"$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE" $0`

AdditionalParameters:
StrCmp $ADDITIONALPARAMETERS "" AdjustPaths

;=== Additional Parameters
StrCpy $EXECSTRING `$EXECSTRING $ADDITIONALPARAMETERS`

AdjustPaths:
StrCmp $SECONDARYLAUNCH "true" LaunchAndExit
ReadINIStr $LASTDRIVE "$SETTINGSDIRECTORY\${NAME}Settings.ini" "${NAME}Settings" "LastDrive"
${GetRoot} $EXEDIR $CURRENTDRIVE
StrCmp $LASTDRIVE $CURRENTDRIVE RegistryBackup
${ReplaceInFile} '$SETTINGSDIRECTORY\${NAME}.reg' '$LASTDRIVE\\' '$CURRENTDRIVE\\'

;StoreCurrentDriveLetter:
WriteINIStr "$SETTINGSDIRECTORY\${NAME}Settings.ini" "${NAME}Settings" "LastDrive" "$CURRENTDRIVE"

RegistryBackup:
;=== Backup the registry
${registry::KeyExists} "HKEY_CURRENT_USER\Software\Foxit Software\Foxit Reader-BackupBy${NAME}" $R0
StrCmp $R0 "0" RestoreTheKey
${registry::KeyExists} "HKEY_CURRENT_USER\Software\Foxit Software\Foxit Reader" $R0
StrCmp $R0 "-1" RestoreTheKey
${registry::MoveKey} "HKEY_CURRENT_USER\Software\Foxit Software\Foxit Reader" "HKEY_CURRENT_USER\Software\Foxit Software\Foxit Reader-BackupBy${NAME}" $R0
Sleep 100

RestoreTheKey:
IfFileExists "$SETTINGSDIRECTORY\${NAME}.reg" "" BackupHKLM

IfFileExists "$WINDIR\system32\reg.exe" "" RestoreTheKey9x
nsExec::ExecToStack `"$WINDIR\system32\reg.exe" import "$SETTINGSDIRECTORY\${NAME}.reg"`
Pop $R0
StrCmp $R0 '0' BackupHKLM ;successfully restored key

RestoreTheKey9x:
${registry::RestoreKey} "$SETTINGSDIRECTORY\${NAME}.reg" $R0
StrCmp $R0 '0' BackupHKLM ;successfully restored key
StrCpy $FAILEDTORESTOREKEY "true"

BackupHKLM:
UserInfo::GetAccountType
Pop $USERTYPE
StrCmp $USERTYPE "Guest" LaunchNow
StrCmp $USERTYPE "User" LaunchNow
${registry::MoveKey} "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FoxitReader.Document" "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FoxitReader.Document-BackupBy${NAME}" $R0
${registry::MoveKey} "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FoxitReader.FDFDoc" "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FoxitReader.FDFDoc-BackupBy${NAME}" $R0
${registry::MoveKey} "HKEY_CLASSES_ROOT\CLSID\{14E8BBD8-1D1C-4D56-A4DA-D20B75EB814E}" "HKEY_CLASSES_ROOT\CLSID\{14E8BBD8-1D1C-4D56-A4DA-D20B75EB814E}-BackupBy${NAME}" $R0
${registry::MoveKey} "HKEY_CLASSES_ROOT\CLSID\{A43F4073-BEBD-4142-B590-27A74384620B}" "HKEY_CLASSES_ROOT\CLSID\{A43F4073-BEBD-4142-B590-27A74384620B}-BackupBy${NAME}" $R0
${registry::KeyExists} "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.pdf" $R0
${If} $R0 == "0"
StrCpy $RegKeyPDFExists true
${registry::Read} "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.pdf" "" $R0 $R1
${If} $R0 == ""
StrCpy $RegKeyPDFIsBlank true
${EndIf}
${EndIf}
${registry::KeyExists} "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.fdf" $R0
${If} $R0 == "0"
StrCpy $RegKeyFDFExists true
${EndIf}

LaunchNow:
Sleep 100
ExecWait $EXECSTRING

CheckRunning:
Sleep 1000
FindProcDLL::FindProc "$PROGRAMEXECUTABLE"
StrCmp $R0 "1" CheckRunning

StrCmp $FAILEDTORESTOREKEY "true" SetOriginalKeyBack
${registry::SaveKey} "HKEY_CURRENT_USER\Software\Foxit Software\Foxit Reader" "$SETTINGSDIRECTORY\${NAME}.reg" "" $0
Sleep 100

SetOriginalKeyBack:
${registry::DeleteKey} "HKEY_CURRENT_USER\Software\Foxit Software\Foxit Reader" $R0
${registry::KeyExists} "HKEY_CURRENT_USER\Software\Foxit Software\Foxit Reader-BackupBy${NAME}" $R0
Sleep 100
StrCmp $R0 "-1" CleanupHKLM
${registry::MoveKey} "HKEY_CURRENT_USER\Software\Foxit Software\Foxit Reader-BackupBy${NAME}" "HKEY_CURRENT_USER\Software\Foxit Software\Foxit Reader" $R0
Sleep 100
Goto CleanupHKLM

CleanupHKLM:
StrCmp $USERTYPE "Guest" RegistryCleanup
StrCmp $USERTYPE "User" RegistryCleanup
${registry::DeleteKey} "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FoxitReader.Document" $R0
${registry::MoveKey} "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FoxitReader.Document-BackupBy${NAME}" "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FoxitReader.Document" $R0
${registry::DeleteKey} "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FoxitReader.FDFDoc" $R0
${registry::MoveKey} "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FoxitReader.FDFDoc-BackupBy${NAME}" "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FoxitReader.FDFDoc" $R0
${registry::DeleteKey} "HKEY_CLASSES_ROOT\CLSID\{14E8BBD8-1D1C-4D56-A4DA-D20B75EB814E}" $R0
${registry::MoveKey} "HKEY_CLASSES_ROOT\CLSID\{14E8BBD8-1D1C-4D56-A4DA-D20B75EB814E}-BackupBy${NAME}" "HKEY_CLASSES_ROOT\CLSID\{14E8BBD8-1D1C-4D56-A4DA-D20B75EB814E}" $R0
${registry::DeleteKey} "HKEY_CLASSES_ROOT\CLSID\{A43F4073-BEBD-4142-B590-27A74384620B}" $R0
${registry::MoveKey} "HKEY_CLASSES_ROOT\CLSID\{A43F4073-BEBD-4142-B590-27A74384620B}-BackupBy${NAME}" "HKEY_CLASSES_ROOT\CLSID\{A43F4073-BEBD-4142-B590-27A74384620B}" $R0
${If} $RegKeyPDFExists != true
${registry::DeleteKey} "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.pdf" $R0
${EndIf}
${If} $RegKeyPDFIsBlank == true
${registry::Read} "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.pdf" "" $R0 $R1
${If} $R0 != ""
${registry::DeleteValue} "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.pdf" "" $R0
${EndIf}
${EndIf}
${If} $RegKeyFDFExists != true
${registry::DeleteKey} "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.fdf" $R0
${EndIf}

RegistryCleanup:
;=== Cleanup the registry
${registry::DeleteKeyEmpty} "HKEY_CURRENT_USER\Software\Foxit Software" $R0
Goto TheEnd

LaunchAndExit:
Exec $EXECSTRING

TheEnd:
${registry::Unload}
newadvsplash::stop /WAIT
SectionEnd

Спасибо!

Тоесть как бы не понятно на каком этапе скрипта выполняются команды для внесения изменений в систему а на каком наоборот удаления этих изменений..

Или может можно как то упростить сие чудо (как бы две секции в одной команды запуска в другой команды по завершению работы проги)




© OSzone.net 2001-2012