|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » [архив].: NSIS - все вопросы :. |
|
[архив].: NSIS - все вопросы :.
|
Ветеран Сообщения: 1216 |
Профиль | Отправить PM | Цитировать
|
|
Отправлено: 23:35, 17-06-2006 |
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата wolkow70:
|
|
------- Отправлено: 13:27, 11-04-2012 | #2521 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2362
|
Профиль | Отправить PM | Цитировать Возвращаясь к вышеразбираемому вопросу с определением 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 |
Последний раз редактировалось MKN, 11-04-2012 в 13:37. Отправлено: 13:30, 11-04-2012 | #2522 |
Ветеран Сообщения: 3206
|
Профиль | Отправить PM | Цитировать Цитата K.A.V.:
|
|
------- Последний раз редактировалось wolkow70, 11-04-2012 в 13:52. Отправлено: 13:44, 11-04-2012 | #2523 |
Ветеран Сообщения: 1216
|
Профиль | Отправить PM | Цитировать wolkow70, в шапке пример парсинга xml
или макросами Word* в папке примеров - большая куча примеров. |
------- Отправлено: 14:09, 11-04-2012 | #2524 |
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата wolkow70:
Цитата wolkow70:
Кстати я хотел добавить в справочник пример данного кода (недавно реализовывал для одного проекта) Чуть причесал и вот сюда выкладываю Скрипт построчно читает в текстовом файле строки и заменяет определённый текст в строке на ваш |
||
------- Отправлено: 14:16, 11-04-2012 | #2525 |
Ветеран Сообщения: 3206
|
Профиль | Отправить PM | Цитировать Цитата kotkovets:
Примерно так, да? !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} |
|
------- Отправлено: 14:31, 11-04-2012 | #2526 |
Старожил Сообщения: 166
|
Профиль | Отправить PM | Цитировать Спасибо все за рецепты, сделал так
;Тип СУБД 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. |
Отправлено: 16:07, 11-04-2012 | #2527 |
Ветеран Сообщения: 3206
|
Профиль | Отправить PM | Цитировать K.A.V.,
Попробовал применить приведенную вами функцию. Все работает. Возникло два вопроса: 1. Если нужно заменить еще значение - назначать новую функцию? 2. Что закомментировать, что бы не было баннера в режиме тихой установки? |
------- Отправлено: 16:29, 11-04-2012 | #2528 |
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать 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 |
------- Отправлено: 16:56, 11-04-2012 | #2529 |
Ветеран Сообщения: 2362
|
Профиль | Отправить PM | Цитировать Напомните пожалуйста, каким образом средствами NSIS манипулировать (удалять, заменять, разрегистрировать) "занятые" системой файлы и ключи реестра.
Например, надо разрегистрировать и удалить файлы Adobe Acrobat Reader_а (надо подчистить "хвосты" после неудачного удаления ПО, перед последующей установкой. Такое часто необходимо.) : \Program Files\Common Files\Adobe\Acrobat\ActiveX\AcroIEHelper.dll и удалить записи его ключей в реестре и др. подобные файлы... "классически" разрегистрировать и удалить этот файл не возможно... (Куча ручных действий с выставлением прав - ессно не годится.) Помнится был способ с назначением системных прав с полным доступом к файлу и рестартом оболочек (Эксплорера или Тотала) Не нахожу никак эту инфу... Желательно без сторонних средств (в смысле, без доп. утилит и дремучих досовских команд). Интересует способ для любых версий ОС. kotkovets, наверняка решил бы эту проблему средствами API... |
Последний раз редактировалось MKN, 11-04-2012 в 18:34. Отправлено: 18:15, 11-04-2012 | #2530 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Мультимедиа - WinAmp .:[ обсуждение всех версий ]:. | ssaram | Программное обеспечение Windows | 406 | 12-02-2022 19:45 | |
WinstyleMonitor .:[все вопросы]:. | Mr dUSHA | Проект WinStyle | 331 | 12-02-2014 13:15 | |
Delphi - Delphi .: [все вопросы] :. | Serega | Программирование и базы данных | 94 | 04-05-2013 18:45 | |
Доступ - Никак не удаляются файлы (AVI и все остальные форматы) .:[все вопросы]:. | Microsoft Windows 2000/XP | 105 | 30-06-2010 11:58 | ||
Вопросы по создателю инсталляций NSIS | MaxDELETE | Программное обеспечение Windows | 14 | 04-07-2007 10:01 |
|