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

diakov
05-08-2012, 16:24
добро счас бду колдовать)
Догнал....я чето думал что будет запускаться глобальный деинстал...а запускаться будет локальные...

K.A.V.
09-08-2012, 11:00
Пришел собрать полезняшки :tongue:

Обновился Справочник по NSIS (http://forum.oszone.net/thread-168287.html)

MKN
09-08-2012, 16:35
Подскажите пожалуйста :
как удалить (или переместить) из папки все файлы (файлов много и они разные по типу и расширению), исключая - далее перечисление этих тоже разных конкретных файлов, которые должны остаться в папке.

Что то наподобие действия : File /r /x *.res /x *.obj /x *.pch source\*.* (Manual 4.9.1.5. File ) но для операции удаления

K.A.V.
09-08-2012, 16:57
MKN, используй функцию Locate для поиска всех файлов и далее в callback функции Locate у тебя получится что-то типа такого:


Function Locate_callback
${GetFileExt} "$R7" $R0
StrCmp $R0 "exe" noDelete 0
StrCmp $R0 "dll" noDelete 0
StrCmp $R0 "txt" noDelete 0

Delete "$R9"

noDelete:
FunctionEnd


Если встретятся файлы с указанными расширениями - их не удалять и пропускать, остальные файлы будут удалены

diakov
09-08-2012, 17:32
Добрый день господа! Такой вопрос назрел после установки Ashampoo HDD Control запускаются два процесса AHDDC2_Service.exe и DfSdkS.exe и соответствующие им службы AHDDC2 и DfSdkS

http://s019.radikal.ru/i640/1208/a4/fe46345950ba.png
http://s019.radikal.ru/i644/1208/b9/b0bf8f6609f9.png
http://s018.radikal.ru/i502/1208/09/a56088ad54a8.png

Как реализовать это в НСИС пробовал как то так

nsSCM::Install /NOUNLOAD "AHDDC2_Service.exe" "AHDDC2_Service.exe" 16 2 \ "$INSTDIR\AHDDC2_Service.exe" "" "" "" ""
nsSCM::Install /NOUNLOAD "mst Defrag SDK Service.exe" "mst Defrag SDK Service.exe" 16 2 \ "$INSTDIR\DfSdkS.exe" "" "" "" ""


НЕ получается...подскажите...

K.A.V.
09-08-2012, 18:27
diakov, Вас что именно смущает то? То, что описание разное или что? Объясните проблему более понятно, в чем у вас проблема

Как я понял из описания плагина nsSCM, он не умеет устанавливать описание создаваемой службе

Лучше используйте плагин NSIS Simple Service Plugin (http://nsis.sourceforge.net/NSIS_Simple_Service_Plugin)

diakov
09-08-2012, 18:35
Да нет просто при таком коде

nsSCM::Install /NOUNLOAD "AHDDC2_Service.exe" "AHDDC2_Service.exe" 16 2 \ "$INSTDIR\AHDDC2_Service.exe" "" "" "" "" nsSCM::Install /NOUNLOAD "mst Defrag SDK Service.exe" "mst Defrag SDK Service.exe" 16 2 \ "$INSTDIR\DfSdkS.exe" "" "" "" ""

Службы (процессы) вообще не запускаются и Ashampoo HDD Control выдает ошибку что службы не запущены...

То есть если использовать NSIS Simple Service Plugin:

SimpleSC::InstallService [name_of_service] [display_name] [service_type] [start_type] [binary_path] [dependencies] [account] [password]

То делать так:
2 - SERVICE_AUTO_START - Service auto start

SimpleSC::InstallService "AHDDC2_Service.exe" "AHDDC2_Service" "16""2" "$INSTDIR\AHDDC2_Service.exe" """" ""

Так будет правильно или что то нада поправить что бы заработало?

K.A.V.
09-08-2012, 18:50
Ashampoo HDD Control выдает ошибку что службы не запущены... »

Так правильно будет
nsSCM::Install /NOUNLOAD "AHDDC2" "AHDDC2_Service.exe" 16 2 \ "$INSTDIR\AHDDC2_Service.exe" "" "" "" ""
nsSCM::Install /NOUNLOAD "DfSdkS" "mst Defrag SDK Service.exe" 16 2 \ "$INSTDIR\DfSdkS.exe" "" "" "" ""

Имя службы и отображаемое имя - не одно и то же
Программа обращается к службам AHDDC2 и DfSdkS чтобы узнать их статус, и правильно говорит, что они не запущены, их же не существует в системе...

diakov
09-08-2012, 18:53
Спасибо...счас опробую...туплю потому что еще не разу не работал с службами...

diakov
09-08-2012, 19:13
K.A.V., чето не то если писать так
nsSCM::Install /NOUNLOAD "AHDDC2" "AHDDC2_Service.exe" 16 2 \ "$INSTDIR\AHDDC2_Service.exe" "" "" "" ""
nsSCM::Install /NOUNLOAD "DfSdkS" "mst Defrag SDK Service.exe" 16 2 \ "$INSTDIR\DfSdkS.exe" "" "" "" ""

То тогда в службах появляються соотв. надписи
http://s53.radikal.ru/i139/1208/40/6984a8bd123e.png
Но обе службы остановлены и при попытки их запустить вручную (правая кнопка) выдает
http://s15.radikal.ru/i188/1208/6c/bf61ff00bb96.png
Хотя в папка $INSTDIR у меня c:\Program Files\Ashampoo HDD Control оба файла AHDDC2_Service.exe и DfSdkS.exe присутствуют!
Что не так делаю?

K.A.V.
09-08-2012, 19:20
nsSCM::Install /NOUNLOAD "AHDDC2" "AHDDC2_Service.exe" 16 2 \ "$INSTDIR\AHDDC2_Service.exe" "" "" "" ""
nsSCM::Install /NOUNLOAD "DfSdkS" "mst Defrag SDK Service.exe" 16 2 \ "$INSTDIR\DfSdkS.exe" "" "" "" ""
Символ слеша пишется только для перевода длинных строк на новую строку, для удобности чтения, вот пример:

nsSCM::Install /NOUNLOAD "XXX" "XXX driver" 1 3 \
"$SYSDIR\drivers\XXX.sys" "" "" "" ""

Если у вас эти 2 команды на создание службы написаны на 2 строки (одна команда - одна строка), то удалите из строк символы слеша, выделенные красным цветом (плагин за параметр исполняемой службы принимает символ слеша)

diakov
09-08-2012, 19:30
Убрал слеш получилось

nsSCM::Install /NOUNLOAD "AHDDC2" "AHDDC2_Service.exe" 16 2 "$INSTDIR\AHDDC2_Service.exe" "" "" "" ""
nsSCM::Install /NOUNLOAD "DfSdkS" "mst Defrag SDK Service.exe" 16 2 "$INSTDIR\DfSdkS.exe" "" "" "" ""

Но все равно тоже самое, службы остановлены и не запускаются :durak:

Может есть какой то другой вариант или как?

K.A.V.
09-08-2012, 19:40
Но все равно тоже самое »
Код ошибки какой при запуске службы?

Может есть какой то другой вариант или как? »
Вариант с другим плагином разве что. Я со службами не работал, возможно службы запускаются с ключами, посмотрите конфигурацию служб, когда они установлены оригинальной программой установки

Так же могу посоветовать посмотреть соответствующие разделы служб в реестре, можете импортировать настройки с живой службы (сохранив ваш путь запускаемого файла) и посмотрите разницу, будет ли работать


Настройки служб хранятся здесь:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

diakov
09-08-2012, 19:42
Код ошибки какой при запуске службы? »

http://s15.radikal.ru/i188/1208/6c/bf61ff00bb96.png

При попитки запуска вручную и фсе...

возможно службы запускаются с ключами »

Отлавливал ProcMonом нет ключей...

K.A.V.
09-08-2012, 19:45
diakov, ну вам же ясно говорят...Значит проверяйте, как инсталлятор прописывает путь к исполняемому файлу службы


Либо смотрите в реестре, в той ветке где я вам выше написал, либо через оснастку mmc services.msc (Пуск => Выполнить) смотрите пути исполняемых файлов, возможно что-то не так прописываете, либо распаковывается у вас не туда...

diakov
09-08-2012, 19:49
Добро счас бду смотреть...

diakov
09-08-2012, 20:29
Разобрался спасибо! Дело было именно в реестре оказалось при конвертации рег файлы в скрипт путь к самому файлу был бинарником) поправил..но теперь такие вопросы

SimpleSC::InstallService "AHDDC2" "Ashampoo servise" 16 2 "$INSTDIR\AHDDC2_Service.exe" "" "" ""
SimpleSC::InstallService "DfSdkS" "mst Defrag SDK Service.exe" 16 2 "$INSTDIR\DfSdkS.exe" "" "" ""

1. При установке службы ставятся все харашо но их статус (остановлена) (Эт на скорость не влияет так как при запуске проги она их запускает сама) но все же интеренсно как их запустить еще до старта самой программы, читал есть параметр

service_status - one of the following codes
1 - SERVICE_STOPPED
2 - SERVICE_START_PENDING
3 - SERVICE_STOP_PENDING
4 - SERVICE_RUNNING
5 - SERVICE_CONTINUE_PENDING
6 - SERVICE_PAUSE_PENDING
7 - SERVICE_PAUSED
Но куда его всунуть не пойму так как в примере нет такого поля

SimpleSC::InstallService [name_of_service] [display_name] [service_type] [start_type]
[binary_path] [dependencies] [account] [password]


2 Как эти службы убить при удалении, потому как эти службы запущены пишу в секции деинсталляции

SimpleSC::RemoveService "AHDDC2"
SimpleSC::RemoveService "DfSdkS"
но они не убиваются, а продолжают работать вместе с процессами в следствии чего файлы в папке остаются после отработки

Есть вариант канечно такой

Function un.onInit
ExecWait 'TASKKILL /F /IM DfSdkS.exe'
ExecWait 'TASKKILL /F /IM AHDDC2.exe'
FunctionEnd

Но мне кажется это не совсем правильно...

Все с первым разобрался просто дописал после строк установки сервиса это:

SimpleSC::StartService "AHDDC2"
SimpleSC::StartService "DfSdkS"

Разобрался и со вторым дописав:
SimpleSC::StopService "AHDDC2" 1 30
SimpleSC::StopService "DfSdkS" 1 30

Объясните что означают цифры 1 30

kotkovets
09-08-2012, 20:51
MKN спасибо за ссылку!
---
С позволения автора, Полякова Андрей Валерьевича, в шапке разместил ссылку:
Руководство пользователя по NSIS (Перевод – Поляков А.В)
Хороший и качественный перевод.

diakov
09-08-2012, 21:03
MKN , kotkovets спасибо! Теперь можно осваивать на родном:rupor:

K.A.V.
09-08-2012, 21:09
Руководство пользователя по NSIS (Перевод – Поляков А.В) »
Может стоит объеденить наш справочник с этим документом, да распространять в одном архиве?

Изменить шапку темы Справочник по NSIS (http://forum.oszone.net/thread-168287.html) и вложить только PDF документ вместе с нашим справочником в один архив


Для совсем новичков будет очень полезно почитать
И ещё, было бы лучше, на мой взгляд, делать в CHM формате, удобней просматривать и передвигаться по командам, нежели в PDF формате




© OSzone.net 2001-2012