PDA

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


Страниц : 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 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170

K.A.V.
11-04-2012, 13:27
Товарищи, рельно ли средствами NSIS в файле opera_install_log.xml все пути C:\Program Files\Opera поменять на путь прописанный в $INSTDIR или нет? »
Реально :yes:

MKN
11-04-2012, 13:30
Возвращаясь к вышеразбираемому вопросу с определением Provider=* в длинющей строке :

Можно и так :

Section

;Provider= может находится и в начале
;StrCpy $0 "Provider=SQLOLEDB;Data Source=W2K3SP2\SQLEXPRESS;Initial Catalog=user_db;Persist Security Info=True;User ID=user;Password=user;"

; и в середине строки

StrCpy $0 "Data Source=W2K3SP2\SQLEXPRESS;Initial Catalog=user_db;Provider=SQLOLEDB;Persist Security Info=True;User ID=user;Password=user;"

${WordFind2X} "$0" "Provider=" ";" "+1" $1

MessageBox MB_OK "$1"
; В $1 будет SQLOLEDB

SectionEnd
Для сокращения кода строку можно и не заносить в переменную... Хотя может это и дурной тон... :)

wolkow70
11-04-2012, 13:44
Реально »
Обнадеживает. Где можно почитать на счет этого. Это же не простой текстовый файл, а .xml ?

kotkovets
11-04-2012, 14:09
wolkow70, в шапке пример парсинга xml
или макросами Word* в папке примеров - большая куча примеров.

K.A.V.
11-04-2012, 14:16
Обнадеживает »
Как спросили, так и ответил :biggrin:

Это же не простой текстовый файл, а .xml ? »
Откройте его блокнотом - обычный текстовый файл со множеством строк

Кстати я хотел добавить в справочник пример данного кода (недавно реализовывал для одного проекта)
Чуть причесал и вот сюда выкладываю

Скрипт построчно читает в текстовом файле строки и заменяет определённый текст в строке на ваш

В начале кода:

!include "StrFunc.nsh"
!include "WinMessages.nsh"
${StrRep}


Функция поиска и замены фразы в текстовом файле

Function ReplaceLinesInFile
Banner::show /NOUNLOAD ""
Banner::getWindow /NOUNLOAD
Pop $1
GetDlgItem $2 $1 1030
; Создаём баннер, чтобы видеть прогресс (для наглядности)

Var /Global _FindInFile ; В эту переменную поместим полный путь к файлу, в котором будем производить замену
Var /Global _LineReplace ; В эту переменную поместим строку, которую будем искать и заменять
Var /Global _LineToInsert ; В эту переменную поместим строку, НА которую мы будем заменять искомую строку
Var /Global _CurLineNumber ; В этой переменной храним номер обрабатываемой строки
Var /Global _CurLine ; В этой переменной храним строку, с которой в данный момент сверяем
Var /Global _LineNumbers ; В этой переменной храним количество строк в искомом файле

StrCpy $_FindInFile '$EXEDIR\opera_install_log.xml' ; Заменяем строки в этом файле
StrCpy $_LineReplace 'C:\Program Files\Opera' ; Ищем и заменяем ЭТУ строку
StrCpy $_LineToInsert '$EXEDIR' ; На что будем заменять

${LineSum} "$_FindInFile" $_LineNumbers ; Подсчитываем количество строк
strcpy $_CurLineNumber 0
startLineRead:
intop $_CurLineNumber $_CurLineNumber + 1

SendMessage $2 ${WM_SETTEXT} 0 "STR:Обработка строки $_CurLineNumber [Всего: $_LineNumbers]" ; Смотрим прогресс обработки строк =)

IntCmp $_CurLineNumber $_LineNumbers 0 0 endFunc ; Если номер текущей строки больше количества строк в файле - поиск завершен

${LineRead} "$_FindInFile" "$_CurLineNumber" $_CurLine ; Читаем строку по номеру текущей строки
${WordFind} '$_CurLine' "$_LineReplace" "E+1{" $R0 ; Ищем в строке нужный текст

StrCmp $R0 "1" startLineRead 0 ; Если в строке присутствует искомый текст, выполняем код ниже
${LineFind} "$_FindInFile" "" "" "Insert_Line" ; Вызываем функцию Insert_Line, которая произведёт замену
goto startLineRead
endFunc:

Banner::destroy ; Уничтожаем баннер
FunctionEnd


Function Insert_Line
StrCmp $R8 "$_CurLineNumber" 0 push
${StrRep} $_CurLine "$_CurLine" "$_LineReplace" "$_LineToInsert"
FileWrite $R4 "$_CurLine"
StrCpy $0 SkipWrite
push:
Push $0
FunctionEnd

wolkow70
11-04-2012, 14:31
wolkow70, в шапке пример парсинга xml
или макросами Word* в папке примеров - большая куча примеров. »


Примерно так, да?

!include "XML.nsh"

SetOutPath "$INSTDIR"
${xml::LoadFile} "$INSTDIR\opera_install_log.xml" $0
${xml::GotoPath} "C:\Program Files\Opera" $0
${xml::SetAttribute} "pathPrefix" "$INSTDIR\" $0
${xml::SaveFile} "" $0
${xml::Unload}

DruOleg
11-04-2012, 16:07
Спасибо все за рецепты, сделал так:)

;Тип СУБД
StrCpy $DB_type "$connect_string" ;присваиваем строку подключения
${WordFind} "$DB_type" ";" "+1" "$3" ;получаем подстроку до первого символа ' ; '
Strlen $1 "Provider=" ;вычисляем длину отсекаемой части
StrCpy $DB_type "$3" "" $1 ;отсекаем

;Сервер БД
StrCpy $DB_server "$connect_string" ;присваиваем строку подключения
${WordFind} "$DB_server" ";" "+2" "$3" ;получаем подстроку до первого символа ' ; '
Strlen $1 "Data Source=" ;вычисляем длину отсекаемой части
StrCpy $DB_server "$3" "" $1 ;отсекаем

;Имя БД
StrCpy $DB_name "$connect_string" ;присваиваем строку подключения
${WordFind} "$DB_name" ";" "+3" "$3" ;получаем подстроку до первого символа ' ; '
Strlen $1 "Initial Catalog=" ;вычисляем длину отсекаемой части
StrCpy $DB_name "$3" "" $1 ;отсекаем

;Логин пользователя БД
StrCpy $DB_user "$connect_string" ;присваиваем строку подключения
${WordFind} "$DB_user" ";" "+5" "$3" ;получаем подстроку до первого символа ' ; '
Strlen $1 "User ID=" ;вычисляем длину отсекаемой части
StrCpy $DB_user "$3" "" $1 ;отсекаем

;Пароль пользователя БД
StrCpy $DB_password "$connect_string" ;присваиваем строку подключения
${WordFind} "$DB_password" ";" "+6" "$3" ;получаем подстроку до первого символа ' ; '
Strlen $1 "Password=" ;вычисляем длину отсекаемой части
StrCpy $DB_password "$3" "" $1 ;отсекаем

;Определяем тип СУБД: MS SQL или Firebird
${If} $DB_type == "SQLOLEDB"
StrCpy $DB_type "MS SQL"
ExecWait "sqlcmd.exe -S $DB_server -d $DB_name -U $DB_user -P $DB_password -i get_version.sql"
${ElseIf} $DB_type == "LCPI.IBProvider"
StrCpy $DB_type "Firebird"
${Else}
MessageBox MB_OK "Не удалось определить тип СУБД!!!"
;Abort
${EndIf}

Хотел еще спросить как присвоить значение переменной:
ExecWait "sqlcmd.exe -S $DB_server -d $DB_name -U $DB_user -P $DB_password -i get_version.sql"

Запрос:
SELECT REV FROM VERSN - возвращает обычное число... Его и нужно сравнить с числом 14525.

wolkow70
11-04-2012, 16:29
K.A.V.,
Попробовал применить приведенную вами функцию. Все работает.

Возникло два вопроса:

1. Если нужно заменить еще значение - назначать новую функцию?
2. Что закомментировать, что бы не было баннера в режиме тихой установки?

K.A.V.
11-04-2012, 16:56
wolkow70, сделайте так:

В начале кода

Var _FindInFile ; В эту переменную поместим полный путь к файлу, в котором будем производить замену
Var _LineReplace ; В эту переменную поместим строку, которую будем искать и заменять
Var _LineToInsert ; В эту переменную поместим строку, НА которую мы будем заменять искомую строку
Var _CurLineNumber ; В этой переменной храним номер обрабатываемой строки
Var _CurLine ; В этой переменной храним строку, с которой в данный момент сверяем
Var _LineNumbers ; В этой переменной храним количество строк в искомом файле

!include "StrFunc.nsh"
${StrRep}



В любой секции или функции вызываем функцию сколько угодно раз, только перед новой заменой, если данные отличаются (в каком файле и что заменить) назначайте переменным новые значения


Section /o "Моя секция"
StrCpy $_FindInFile '$EXEDIR\opera_install_log.xml' ; Заменяем строки в этом файле
StrCpy $_LineReplace 'C:\Program Files\Opera' ; Ищем и заменяем ЭТУ строку
StrCpy $_LineToInsert '$EXEDIR' ; На что будем заменять
call ReplaceLinesInFile
SectionEnd

Function ReplaceLinesInFile
${LineSum} "$_FindInFile" $_LineNumbers ; Подсчитываем количество строк
strcpy $_CurLineNumber 0
startLineRead:
intop $_CurLineNumber $_CurLineNumber + 1
IntCmp $_CurLineNumber $_LineNumbers 0 0 endFunc ; Если номер текущей строки больше количества строк в файле - поиск завершен
${LineRead} "$_FindInFile" "$_CurLineNumber" $_CurLine ; Читаем строку по номеру текущей строки
${WordFind} '$_CurLine' "$_LineReplace" "E+1{" $R0 ; Ищем в строке нужный текст
StrCmp $R0 "1" startLineRead 0 ; Если в строке присутствует искомый текст, выполняем код ниже
${LineFind} "$_FindInFile" "" "" "Insert_Line" ; Вызываем функцию Insert_Line, которая произведёт замену
goto startLineRead
endFunc:
FunctionEnd

Function Insert_Line
StrCmp $R8 "$_CurLineNumber" 0 push
${StrRep} $_CurLine "$_CurLine" "$_LineReplace" "$_LineToInsert"
FileWrite $R4 "$_CurLine"
StrCpy $0 SkipWrite
push:
Push $0
FunctionEnd

MKN
11-04-2012, 18:15
Напомните пожалуйста, каким образом средствами NSIS манипулировать (удалять, заменять, разрегистрировать) "занятые" системой файлы и ключи реестра.
Например, надо разрегистрировать и удалить файлы Adobe Acrobat Reader_а (надо подчистить "хвосты" после неудачного удаления ПО, перед последующей установкой. Такое часто необходимо.) :

\Program Files\Common Files\Adobe\Acrobat\ActiveX\AcroIEHelper.dll и удалить записи его ключей в реестре и др. подобные файлы...
"классически" разрегистрировать и удалить этот файл не возможно...
(Куча ручных действий с выставлением прав - ессно не годится.)

Помнится был способ с назначением системных прав с полным доступом к файлу и рестартом оболочек (Эксплорера или Тотала) Не нахожу никак эту инфу... Желательно без сторонних средств (в смысле, без доп. утилит и дремучих досовских команд). Интересует способ для любых версий ОС.

kotkovets, наверняка решил бы эту проблему средствами API... :)

DruOleg
11-04-2012, 19:01
Помогите, пожалуйста, с запросом к БД.
Нужно сделать запрос к 2 БД: Firebird 2.1 и MS SQL 2005 и выше.
Почти готов инсталлятор, осталось лишь сделать запрос и сравнить результат с числом...

kotkovets
12-04-2012, 01:17
Напомните пожалуйста, каким образом средствами NSIS манипулировать (удалять, заменять, разрегистрировать) "занятые" системой файлы и ключи реестра. »
если файл не удаляется, то пишем команду:
Delete /Rebootok "File"
этот флаг заставит файл удалится при следущей перезагрузке.Желательно без сторонних средств (в смысле, без доп. утилит и дремучих досовских команд). Интересует способ для любых версий ОС. »
можно удалить файл, но не всегда!, если перезагрузить проводник, а точнее правильнее будет,
УЗНАТЬ какой процесс держит файл и грохать процесс.
читай в справке: » Работа с процессами с помощью NSIS

wolkow70
12-04-2012, 06:04
Напомните пожалуйста, каким образом средствами NSIS манипулировать (удалять, заменять, разрегистрировать) "занятые" системой файлы и ключи реестра. »

Так делаю :

Предварительно резрегистрируем файл, или, если комманда не выполняется через рег-сервер, удаляем все ключи реестра, относимые к dll.

ExecWait 'taskkill /F /IM explorer.exe' $0
DetailPrint "taskkill exit: [ $0 ]"
Sleep 500
StrCmp $0 0 0 +2
Exec "explorer.exe"

Delete "$INSTDIR\menu.dll"

${If} ${FileExists} "$INSTDIR\menu.dll"
Delete /REBOOTOK "$INSTDIR\menu.dll"
SetRebootFlag true
${Else}
SetRebootFlag false
${EndIf}

MKN
12-04-2012, 09:11
kotkovets, wolkow70,
Вы наверное, не так меня поняли или я не точно выразился...

То что вы сказали , зто понятные рядовые ситуации.

Здесь же, файл или ключ "охраняет" защищает система и пока не получишь(не выставишь) системные права и полный доступ к файлу (ключу) - никакой Rebootok ОК не поможет и ничего с файлом и ключом сделать нельзя.
(и никакой процесс этот файл не "держит", а перезапуск оболочки - это будет последний этап для некоторых случаев) .

Интересует , что можно предпринять в таких случаях средствами NSIS ?
Т.е. каким образом организовать назначение системных прав и полного доступа к файлу и ключу реестра, при чём без сторонних утилит (типа Cacls.exe , SubInACL.exe и т.п. )
Почему я и помянул API, т.к. видел инфу как раз по этому поводу с упоминание MoveFileEx с флагом MOVEFILE_DELAY_UNTIL_REBOOT
Только я в API ни черта не понимаю.

kotkovets
12-04-2012, 11:00
Почему я и помянул API, т.к. видел инфу как раз по этому поводу с упоминание MoveFileEx с флагом MOVEFILE_DELAY_UNTIL_REBOOT »
это тоже самое, что:
Delete /Rebootok "File"
или
Rename /Rebootok "File" "New_File"

Если параметр dwFlags устанавливает MOVEFILE_DELAY_UNTIL_REBOOT, параметр lpNewFileName - ПУСТО (NULL), функция MoveFileEx регистрирует файл параметра lpExistingFileName для удаления, когда система перезагружается. Если параметр lpExistingFileName относится к каталогу, система удаляет при перезагрузке каталог, только в том случае, если каталог пуст
http://www.vsokovikov.narod.ru/New_MSDN_API/Menage_files/fn_movefileex.htm

wolkow70
12-04-2012, 11:07
Товарищи, не пойму почему

IntOp $0 ${SF_SELECTED} | ${SF_RO}
SectionSetFlags ${Install} $0

ТАК РАБОТАЕТ!

IntOp $0 ${SF_SELECTED} | ${SF_RO} | ${SF_BOLD}
SectionSetFlags ${Install} $0

ТАК НЕ РАБОТАЕТ!

MKN
12-04-2012, 11:12
kotkovets,
Так как быть то с удалением таких файлов и ключей реестра ?
Delete /Rebootok "File" - файл не удаляет. Что делать с ключами - не ясно...

wolkow70
12-04-2012, 11:12
Еще такую задачку не знаю как проще решить:

InstallDir "$PROGRAMFILES\${PRODUCT_NAME}"

Если директория установки не отличается от C:\Program Files\Opera прописанной в файле opera_install_log.xml то менять значение в файле не нужно, если директория установки выбрана другая, то вызвать функцию Call ReplaceLinesInFile. То есть тут проверка нужна не только на $PROGRAMFILES\${PRODUCT_NAME} , но и с учетом буквы диска.

MKN

В этом разделе не пробовали удалять предварительно ключи?

DeleteRegValue HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls" "$SYSDIR\px.dll"

wolkow70
12-04-2012, 11:28
Так как быть то с удалением таких файлов и ключей реестра ? »
Попробуйте еще Library.nsh

!include "Library.nsh"

Name "Library Test"
OutFile "Library Test.exe"

InstallDir "$TEMP\Library Test"

Page directory
Page instfiles

XPStyle on

RequestExecutionLevel user

!define TestDLL '"${NSISDIR}\Plugins\LangDLL.dll"'
!define TestEXE '"${NSISDIR}\Contrib\UIs\default.exe"'

Section

!insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib DLL NOTSHARED NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib DLL NOTSHARED NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR

!insertmacro InstallLib REGDLL NOTSHARED REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib REGDLL NOTSHARED NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib REGDLL NOTSHARED NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR

!insertmacro InstallLib TLB NOTSHARED REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib TLB NOTSHARED NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib TLB NOTSHARED REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib TLB NOTSHARED NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR

!insertmacro InstallLib REGDLLTLB NOTSHARED REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib REGDLLTLB NOTSHARED NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib REGDLLTLB NOTSHARED REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib REGDLLTLB NOTSHARED NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR

!insertmacro InstallLib DLL $0 REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib DLL $0 NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib DLL $0 REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib DLL $0 NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR

!insertmacro InstallLib REGDLL $0 REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib REGDLL $0 NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib REGDLL $0 REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib REGDLL $0 NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR

!insertmacro InstallLib TLB $0 REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib TLB $0 NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib TLB $0 REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib TLB $0 NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR

!insertmacro InstallLib REGDLLTLB $0 REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib REGDLLTLB $0 NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib REGDLLTLB $0 REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib REGDLLTLB $0 NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR

!insertmacro InstallLib REGEXE $0 REBOOT_PROTECTED ${TestEXE} $INSTDIR\test.exe $INSTDIR
!insertmacro InstallLib REGEXE $0 NOREBOOT_PROTECTED ${TestEXE} $INSTDIR\test.exe $INSTDIR
!insertmacro InstallLib REGEXE $0 REBOOT_NOTPROTECTED ${TestEXE} $INSTDIR\test.exe $INSTDIR
!insertmacro InstallLib REGEXE $0 NOREBOOT_NOTPROTECTED ${TestEXE} $INSTDIR\test.exe $INSTDIR

WriteUninstaller $INSTDIR\uninstall.exe

SectionEnd

Section uninstall

!insertmacro UninstallLib DLL NOTSHARED NOREMOVE $INSTDIR\test.dll
!insertmacro UninstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib DLL NOTSHARED NOREBOOT_PROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib DLL NOTSHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll

!insertmacro UninstallLib REGDLL NOTSHARED NOREMOVE $INSTDIR\test.dll
!insertmacro UninstallLib REGDLL NOTSHARED REBOOT_PROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib REGDLL NOTSHARED NOREBOOT_PROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib REGDLL NOTSHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll

!insertmacro UninstallLib TLB NOTSHARED NOREMOVE $INSTDIR\test.dll
!insertmacro UninstallLib TLB NOTSHARED REBOOT_PROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib TLB NOTSHARED NOREBOOT_PROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib TLB NOTSHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib TLB NOTSHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll

!insertmacro UninstallLib REGDLLTLB NOTSHARED NOREMOVE $INSTDIR\test.dll
!insertmacro UninstallLib REGDLLTLB NOTSHARED REBOOT_PROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib REGDLLTLB NOTSHARED NOREBOOT_PROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib REGDLLTLB NOTSHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib REGDLLTLB NOTSHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll

!insertmacro UninstallLib DLL SHARED NOREMOVE $INSTDIR\test.dll
!insertmacro UninstallLib DLL SHARED REBOOT_PROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib DLL SHARED NOREBOOT_PROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib DLL SHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib DLL SHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll

!insertmacro UninstallLib REGDLL SHARED NOREMOVE $INSTDIR\test.dll
!insertmacro UninstallLib REGDLL SHARED REBOOT_PROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib REGDLL SHARED NOREBOOT_PROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib REGDLL SHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib REGDLL SHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll

!insertmacro UninstallLib TLB SHARED NOREMOVE $INSTDIR\test.dll
!insertmacro UninstallLib TLB SHARED REBOOT_PROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib TLB SHARED NOREBOOT_PROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib TLB SHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib TLB SHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll

!insertmacro UninstallLib REGDLLTLB SHARED NOREMOVE $INSTDIR\test.dll
!insertmacro UninstallLib REGDLLTLB SHARED REBOOT_PROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib REGDLLTLB SHARED NOREBOOT_PROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib REGDLLTLB SHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib REGDLLTLB SHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll

!insertmacro UninstallLib REGEXE SHARED NOREMOVE $INSTDIR\test.exe
!insertmacro UninstallLib REGEXE SHARED REBOOT_PROTECTED $INSTDIR\test.exe
!insertmacro UninstallLib REGEXE SHARED NOREBOOT_PROTECTED $INSTDIR\test.exe
!insertmacro UninstallLib REGEXE SHARED REBOOT_NOTPROTECTED $INSTDIR\test.exe
!insertmacro UninstallLib REGEXE SHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.exe

SectionEnd

MKN
12-04-2012, 11:33
wolkow70,
Без прав и доступа к файлу - ничего не сделать. Об этом и речь.




© OSzone.net 2001-2012