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

Painkiller
10-12-2011, 19:58
Здравствуйте господа, нужна ваша помощь . Есть скрипт на языке Inno Setup
Сам скрип : Filename: "rundll32.exe"; Parameters: "setupapi.dll, InstallHinfSection DefaultInstall 132 .\CisUtMonitor.inf"; WorkingDir: "{app}"; StatusMsg: "{cm:installing_driver}"; Tasks: "install_service"; Check: "NOT IsX64"; MinVersion: 0.0,5.0;
Нужно перевести в язык nsis. Вот как я сделал :
ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $INSTDIR\CisUtMonitor.inf"
Ну во время установки выскакивает окно выбора файла . Что я сделал не так ?

Krinkels
10-12-2011, 20:48
SETUPAPI.DLL,InstallHinfSection »
Попробуй убрать запятую

kotkovets
10-12-2011, 20:55
Ну во время установки выскакивает окно выбора файла . Что я сделал не так ? »
команда выполняется успешно, претензий нет, претензии к inf файлу:
нужный файл не найден по скрипту inf, поэтому просит указать на файл, типа ты где, хоть сюда?!
в какой разрядности системы заводите? В x64 две версии rundll.exe
Попробуй убрать запятую »
не нужно убирать запятую, синтаксис верен.

Painkiller
10-12-2011, 21:52
команда выполняется успешно, претензий нет, претензии к inf файлу:
нужный файл не найден по скрипту inf, поэтому просит указать на файл, типа ты где, хоть сюда?!
в какой разрядности системы заводите? В x64 две версии rundll.exe »
Вот что выскакивает :
http://fotohosting.org/share.php?id=C0CA_4EE3A23B
в x86 windows 7. То что просит показанном на скрине , он ищет в нужной папке

kotkovets
10-12-2011, 22:55
Painkiller
Проблема не в NSIS, правте inf, в частности касаемого файла, да остальных наверняка..
заодно, не помешает, с правами разобраться.
Пробуйте так, расположите скрипт inf (все нужные компоненты прописанные в inf -рядом с inf),
рядом со скриптом NSIS
и выполните
ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $EXEDIR\CisUtMonitor.inf"
А гадать, че так и что не так нечего!

kotkovets
10-12-2011, 23:12
Painkiller,
И что здесь не работает????
OutFile "test.exe"

InstallDir "$PROGRAMFILES\test"

Section
SetOutPath "$INSTDIR"
File "CisUtMonitor.inf"
File "CisUtMonitor.sys"
ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $INSTDIR\CisUtMonitor.inf"
SectionEnd
Все установилось штатно и без проблем!

Painkiller
10-12-2011, 23:15
Painkiller
Проблема не в NSIS, правте inf, в частности касаемого файла, да остальных наверняка..
заодно, не помешает, с правами разобраться.
Пробуйте так, расположите скрипт inf (все нужные компоненты прописанные в inf -рядом с inf),
рядом со скриптом NSIS
и выполните
Код:
ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $EXEDIR\CisUtMonitor.inf"
А гадать, че так и что не так нечего! »
Всё спасибо проблему решил. Проблема в другом была =) Проблема была в файлах=) Пришлось переименовывать файлы ) Когда я распаковал стандартный установщик то там была 2 фала CisUtMonitor1.sys и CisUtMonitor2.sys. А искалось CisUtMonitor.sys

MKN
11-12-2011, 12:47
Какие то то сомнения в x64 ? откуда? »
Да вот пишут, что драйвер может не установится... Рекомендуют так :
${If} ${RunningX64}
${DisableX64FSRedirection}
SetRegView 64
${EndIf}
ExecWait '$SYSDIR\RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $INSTDIR\<myinf>.inf'
Но у меня похоже не в том загвоздка... Нужный мне драйвер, как всегда, не совсем классический (ArcSec.sys - драйвер системы доступа к данным, нужен для просмотра AACS-защищенных дисков) , хотя имеются все необходимые причиндалы - inf файл и пр. Короче не устанавливается ни в какую... Может дело в том , что он должен установиться как сервис...

wolkow70
11-12-2011, 13:00
Может дело в том , что он должен установиться как сервис... »
Дак вы в инфе посмотрите в секциях устанавливается он в службы или нет. Хотя, можно быть уверенным, что устанавливается.
Убедиться еще нужно в следующем:
1. Что объявлена $INSTDIR.
2. Что в секции, из которой производится установка подключено SetOutPath "$INSTDIR"
3. Что к моменту запуска установки драйвера нужные файлы распакованы в папку назначения с верными именами.

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

kotkovets
11-12-2011, 13:48
MKN, А как он вообще ставится? т.е я имею ввиду штатными-системными способами?
Я очень многие дрова ставлю так:
http://forum.oszone.net/post-1733766-1482.html
но многие дрова не ставятся так.

MKN
11-12-2011, 14:01
kotkovets,
Этот драйвер устанавливается из InstallShield инсталлятора согласно собственного сценария, доступа к которому нет...
Известно какие файлы и куда копируются, какие записи появляются в реестре. Также, предположительно, в установке участвуют собственные утилиты - MyDevCon32.exe и MyDevCon64.exe, при запуске которых даже появляется хелп синтаксиса команды установки. Но драйвер-служба всё равно почему то не устанавливается...

kotkovets
11-12-2011, 14:11
InstallShield инсталлятора согласно собственного сценария, доступа к которому нет... »Известно какие файлы и куда копируются, какие записи появляются в реестре. »
Этого мало.
Там сценарий установки драйвера написан на языке си(с++), если бы он был мне известен -
на nsis переделал в два счета или за сто лет :)
Так, что изучай тщательнее хелп синтаксис - MyDevCon64.exе и все получится

Alexey_KF
11-12-2011, 16:05
Нашел в скрипте таку строку \makensis.exe" /P2 /V3
Что за параметр запуска /P2 /V3 ? Что означает. В Справке такого нету.

kotkovets
12-12-2011, 14:17
makensis.exe" /P2 /V3 »
/Px sets the compiler process priority, where x is 5=realtime,4=high,
3=above normal,2=normal,1=below normal,0=idle
/Vx verbosity where x is 4=all,3=no script,2=no info,1=no warnings,0=none
Командная строка компилятора:
P - уровень приоритета выполнения процесса makensis.exe
V - уровень вывода в консоли выводмого текcта и предупреждения в скрипте(при не фатальных ошибок в скрипте)
при компилировании компилировании скрипта

wolkow70
13-12-2011, 13:46
kotkovets,

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

DeleteRegKey HKLM "SOFTWARE\Pandora.TV" ""
ClearErrors
DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\4F6D5E84-5826-4394-9F40-3A9A19165651_is1" ""
ClearErrors
DeleteRegKey HKLM "SYSTEM\CurrentControlSet\Services\PanService" ""
и т.д.?

kotkovets
13-12-2011, 15:02
Обязательно ли выставлять ClearErrors перед следующей коммандой на Нужно, удаление ключа который тоже возможно не существует? »
Нужно по условиям скрипта, ключ не существует - установщик выкидывает флаг ошибки:
IfErrors 0 +2
MessageBox MB_OK "error" IDOK
Если имеется в скрипте иные команды, срабатывающие на флаге ошибке, но не по условию
несуществующего ключа в реестре, то обязательно, во избежание ложных срабатываний.
К примеру мне выдал установщик флаг ошибки из-за несуществующего ключа в реестре.
А затем в скрипте идет команда проверки удаления файла, то проверка удаления файла будет всегда срабатывать из-за ошибки ключа, а не удаления файла. По этому нужно выпиливать ненужный флаг ошибки принудительно - ошибку несуществующего ключа.

tisole
16-12-2011, 20:39
Всем здравствуйте!
Возникла следующая проблема с Caption деинсталлятора. В зависимости от того, с каким ключом вызывается деинсталлятор, он либо деинсталлирует программу либо изменяет её настройки. Соответственно хотелось бы менять заголовок (caption) окон в зависимости от того, какие функции осуществляются деинсталлятором. Понятно, что выбор заголовка происходит только в момент запуска, а не во время компиляции.

Есть вариант делать это с помощью
SendMessage $HWNDPARENT ${WM_SETTEXT} 0 "STR:$(CaptionModify)" для каждого окна.
Тогда у меня возникает проблема со стандартной страницей MUI_UNPAGE_INSTFILES. При запуске этой страницы я посылаю указанное сообщение, устанавливается нужный мне заголовок. После выполнения действий по изменению/деинсталляции, окно автоматически не закрывается, то есть SetAutoClose = false, и заголовок меняется на первоначальный, указанный начале кода. Не могу понять, по какому событию мне послать новое сообщение, чтобы вернуть прежний, нужный мне заголовок.
Возможно, кто-то сможет мне помочь:)

kotkovets
17-12-2011, 00:37
Возникла следующая проблема с Caption »
Можно так, хитростью, все события замены текста выполняются, когда страничка открывается
OutFile Test.exe
ShowInstDetails show

!include "MUI2.nsh"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW WELCOME_SHOW
!insertmacro MUI_PAGE_WELCOME
!define MUI_PAGE_CUSTOMFUNCTION_SHOW INSTFILES_SHOW
!insertmacro MUI_PAGE_INSTFILES
!define MUI_PAGE_CUSTOMFUNCTION_SHOW FINISH_SHOW
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "Russian"

Function WELCOME_SHOW
${NSD_SetText} $HWNDPARENT "WELCOME_SHOW"
FunctionEnd

Function INSTFILES_SHOW
${NSD_SetText} $HWNDPARENT "INSTFILES_SHOW"
FunctionEnd

Function FINISH_SHOW
${NSD_SetText} $HWNDPARENT "FINISH_SHOW"
FunctionEnd

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Section
MessageBox MB_OK "INSTFILES_SHOW" IDOK
SectionEnd
Аналогичные действия делаем с деинсталлятором, но с приставкой un

wolkow70
17-12-2011, 15:26
kotkovets,

Ходатайствую о помощи в таком вопросе:

Пишу в секции:

StrCpy $3 "{Home}Мои документы"
StrCpy $4 "{Resources}program"

WriteINIStr "$APPDATA\Opera\Opera\operaprefs.ini" "User Prefs" "Download Directory" "$3"
WriteINIStr "$APPDATA\Opera\Opera\operaprefs.ini" "Saved Settings" "Save Dir" "$3"
WriteINIStr "$APPDATA\Opera\Opera\operaprefs.ini" "Saved Settings" "Open Dir" "$4"

В результате в UTF8 имею такую картину:
Download Directory={Home}ͮ桤﫳���[Saved Settings]
Save Dir={Home}ͮ桤﫳���Open Dir={Resources}program

Как корректно отразить строки с русским текстом?

Сама Opera как-то же сохраняет:
[Saved Settings]
Save Dir={Home}Мои документы

kotkovets
17-12-2011, 16:56
Сама Opera как-то же сохраняет »
Опера настройки сохраняет в формате UTF8,
NSIS пишет файлы в формате ANSI: кирилица искажается при чтении браузером своих настроек
Попробуйте плагином Unicode (http://nsis.sourceforge.net/Unicode_plug-in) созданный конфиг (ANSI)
конвертировать в формат UTF8, т.е с таким форматом хранит Opera свои настройки




© OSzone.net 2001-2012