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

wolkow70
04-12-2011, 14:52
Товарищи, подскажите как запустить установку драйвера из инфа коммандой NSIS.
В папку с программой распаковываются revoflt.inf и драйвер revoflt.sys.
После чего должна последовать установка драйвера из инфа.
В скрипте Inno оригинального инсталлятора так прописано:

[Run]
Filename: "rundll32.exe "; Parameters: "SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 {app}\revoflt.inf"; WorkingDir: "{app}"; StatusMsg: "Installing revoflt..."; Description: "Install driver automatically"; MinVersion: 0.0,5.01.2600 Service Pack 1;

и на удаление:

[UninstallRun]
Filename: "rundll32.exe"; Parameters: "SETUPAPI.DLL,InstallHinfSection DefaultUninstall 132 {app}\revoflt.inf"; WorkingDir: "{app}"; MinVersion: 0.0,5.01.2600 Service Pack 1;

kotkovets
04-12-2011, 16:11
wolkow70, да все также, мозг чуть включить и все!
ExecWait `rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 "путь\revoflt.inf"`
Причем, если путь к revoflt.inf не имеет пробелов, то кавычки необязательны.

wolkow70
04-12-2011, 16:54
Че-то не пашет.
В Install прописал:
ExecWait 'rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 "$INSTDIR\revoflt.inf"'

В Uninstall прописал
ExecWait 'rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultUninstall 132 "$INSTDIR\revoflt.inf"'

Выводится ошибка, что установка не произведена (при удалении тоже).
С оригинальным инсталлятором нормально все.
Инф какой-то примитивный.

;;;
;;; Revoflt
;;;
;;;
;;; Copyright (c) 2009, VS Revo Group Ltd.
;;;

[Version]
Signature = "$Windows NT$"
Class = "ActivityMonitor" ;This is determined by the work this filter driver does
ClassGuid = {b86dff51-a31e-4bac-b3cf-e8cfe75c9fc2} ;This value is determined by the Class
Provider = %VSRG%
DriverVer = 12/30/2009,1.0.0.4
CatalogFile =


[DestinationDirs]
DefaultDestDir = 12
Revoflt.DriverFiles = 12 ;%windir%\system32\drivers

;;
;; Default install sections
;;

[DefaultInstall]
OptionDesc = %ServiceDescription%
CopyFiles = Revoflt.DriverFiles

[DefaultInstall.Services]
AddService = %ServiceName%,,Revoflt.Service

;;
;; Default uninstall sections
;;

[DefaultUninstall]
DelFiles = Revoflt.DriverFiles

[DefaultUninstall.Services]
DelService = %ServiceName%,0x200 ;Ensure service is stopped before deleting

;
; Services Section
;

[Revoflt.Service]
DisplayName = %ServiceName%
Description = %ServiceDescription%
ServiceBinary = %12%\%DriverName%.sys ;%windir%\system32\drivers\
Dependencies = FltMgr
ServiceType = 2 ;SERVICE_FILE_SYSTEM_DRIVER
StartType = 3 ;SERVICE_DEMAND_START
ErrorControl = 1 ;SERVICE_ERROR_NORMAL
LoadOrderGroup = "FSFilter Activity Monitor"
AddReg = Revoflt.AddRegistry

;
; Registry Modifications
;

[Revoflt.AddRegistry]
HKR,"Instances","DefaultInstance",0x00000000,%DefaultInstance%
HKR,"Instances\"%Instance1.Name%,"Altitude",0x00000000,%Instance1.Altitude%
HKR,"Instances\"%Instance1.Name%,"Flags",0x00010001,%Instance1.Flags%

;
; Copy Files
;

[Revoflt.DriverFiles]
%DriverName%.sys

[Revoflt.UserFiles]

[SourceDisksFiles]
revoflt.sys = 1,,

[SourceDisksNames]
1 = %DiskId1%,,,

;;
;; String Section
;;

[Strings]
VSRG = "VS Revo Group"
ServiceDescription = "Revo Uninstaller Filter driver"
ServiceName = "Revoflt"
DriverName = "revoflt"
DiskId1 = "Revoflt Device Installation Disk"

;Instances specific information.
DefaultInstance = "Revoflt - Top Instance"
Instance1.Name = "Revoflt - Top Instance"
Instance1.Altitude = "370330"
Instance1.Flags = 0x0 ; Set automatic attachments

kotkovets
04-12-2011, 17:01
revoflt.inf - это тоже скрипт, а где файлы должны быть по скрипту в секции DefaultInstall revoflt.inf ?
Положите рядом с revoflt.inf - revoflt.sys
А вот так у меня все стало как нужно, т.е путь к revoflt.inf без кавычек
ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $EXEDIR\revoflt.inf"

wolkow70
04-12-2011, 17:26
revoflt.inf и драйвер revoflt.sys распаковываются в папку $INSTDIR и оттуда драйвер копируется в %windir%\system32\drivers\

kotkovets
04-12-2011, 17:35
wolkow70, путь к inf файлу без кавычек:
ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $INSTDIR\revoflt.inf"

wolkow70
04-12-2011, 17:48
Да, все заработало.
Там еще разные версии драйверов распаковываются "под систему".
пока сделал так
!include "WinVer.nsh"

Section "!${PRODUCT_NAME}" Install
;
${If} ${IsWinXP}
SetOutPath "$INSTDIR"
File "${pkgdir}\Revo Uninstaller Pro\NT5\revoflt.sys"
${ElseIf} ${IsWin7}
SetOutPath "$INSTDIR"
File "${pkgdir}\Revo Uninstaller Pro\NT6\revoflt.sys"
${EndIf}

А если установка на Vista или Win 2000?

vahe-91
04-12-2011, 20:13
А если установка на Vista или Win 2000? »
а ты вместо If, Else используй strcmp :)

kotkovets
04-12-2011, 22:06
а ты вместо If, Else используй strcmp »
Здесь эта команда неуместна, у меня в скрипте задается условий этак 175,
И что, мне под каждое условие придумывать метку?
ИМХО, логическими конструкциями я задам столько условий, сколько фантазии хватит
и при этом никаких конфликтов по именам меткам никогда не получу и с легкостью пишется
любая, самая хитрая логика.
Там еще разные версии драйверов распаковываются "под систему".
пока сделал так »
${If} ${IsWinXP}

;если WinXP

${ElseIf} ${IsWin7}

;если Win7

${ElseIf} ${IsWinVista}

;если Vista

${ElseIf} ${IsWin2000}

;если Win2000

${EndIf}
Причем условия можно задавать + вложенные условия сколь угодно.

dix75
04-12-2011, 23:31
dix75,
это же иконка инсталлятора »
И что из этого. Изменить нельзя?

А картинку при выборе языка?

kotkovets
05-12-2011, 00:12
А картинку при выборе языка? »
Иконка в диалоге выбора языка - берется иконка инсталлятора, измените иконку инсталлятора,
изменится иконка в диалоге

dix75
05-12-2011, 01:06
Понятно спасибо.

Super285
05-12-2011, 11:56
Всем Привет!!! я навичок,хотел бы научится NSIS,не подскажите где можно найти для обучения видео??
я разбираюсь по батникам хорошо,как мне правильно написать,пример: в батник:
"fail.exe" /silentinstall
"fail.exe" /firewall
"fail.exe" /start
перевести код на NSIS?? что бы запускался.
если я не потеме обращаюсь с этим вапросом,подскажите куда писать??
Зарание блогодарю

kotkovets
05-12-2011, 12:18
Всем Привет!!! я навичок, »
В шапке темы найдите ссылку на справочник по NSIS - начните с него."fail.exe" /silentinstall
"fail.exe" /firewall
"fail.exe" /start
перевести код на NSIS?? что бы запускался. »
ExecWait '"Путь к\fail.exe" /firewall'

wolkow70
05-12-2011, 13:13
Причем условия можно задавать + вложенные условия сколь угодно. »

Сейчас пытаюсь разобраться с вашим хедером WinVer2.

Как я понял можно прописать в

Function .OnInit
${WinVersionMajor} $4
${WinVersionMinor} $5
${WinPlatformArchitecture} $R1
Quit
FunctionEnd

К примеру стоит задача создать логическую конструкцию такого типа:

Если установлена Vista или выше , то можно взять за старшую версию 6 и задать условие этим значением (оно будет работать на всех версиях включая Win7 и даже Win 8 ? Младшую версию нет смысла читать в этом случае?

Дальше как это условие забить в конструкцию? Так?

${If} $4=6 ;если версия 6.0 и выше
${AndIf} $R1=64 ; и 64 битка
-здесь следует комманда для Vista и выше X64
${ElseIf} $4=6 ;если версия 6.0 и выше
${AndIf} $R1=32 ; и 32 битка
-здесь следует комманда для Vista и выше X32
${ElseIf} $4=5 ;если версия 5.0 и выше
${AndIf} $R1=64 ; и 64 битка
здесь следует комманда для 2000 и XP X64
${ElseIf} $4=5 ;если версия 5.0 и выше
${AndIf} $R1=32 ; и 32 битка
-здесь следует комманда для 2000 и XP X32
${EndIf}

То есть, хочу сделать универсальную логическую конструкцию, в которой операции бы выполнялись не только в зависимости от версии, но и архитектуры оси (напрмер распаковка файлов).
Какая разница в значениях X32 и X86?

kotkovets
05-12-2011, 13:37
Здесь логика И, т.е читаем так, если $4 = 0 и $R1 = 64
т.е условие будет выполнено, если $4 = 0 и $R1 = 64
${If} $4 == 6 ;если версия 6.0
${AndIf} $R1 == 64 ; и 64 битка
${EndIf}
А вот так условие выполнится, если $4 больше или равно 6 И $R1=64
${If} $4 >= 6
${AndIf} $R1 == 64 ; и 64 битка
;;;
${EndIf}
${AndIf} $R1=32 ; и 32 битка
-здесь следует комманда для 2000 и XP X32
${EndIf} »
Win2000 --> 64-битной версии в природе не существует.

wolkow70
05-12-2011, 13:54
То есть примерно так?

!include "WinVer2.nsh"

Function .OnInit
${WinVersionMajor} $4
${WinVersionMinor} $5
${WinPlatformArchitecture} $R1
Quit
FunctionEnd

${If} $4 >= 6
${AndIf} $R1 == 64 ; и 64 битка
-здесь следует комманда для Vista и выше X64
${EndIf}
;
${If} $4 >= 6
${AndIf} $R1 == 32 ; и 32 битка
-здесь следует комманда для Vista и выше X32
${EndIf}
;
${If} $4 >= 5
${AndIf} $R1 == 64 ; и 64 битка
-здесь следует комманда для 2000 и XP X64
${EndIf}
;
${If} $4 >= 5
${AndIf} $R1 == 64 ; и 32 битка
-здесь следует комманда для 2000 и XP X32
${EndIf}

Здесь, по моему засада получится, так как $4 >= 5 и $4 >= 6 при этом 6 тоже >5

Не будет ли конфликта с хедером x64.nsh?

kotkovets
05-12-2011, 14:22
Не будет ли конфликта с хедером x64.nsh? »
Нет
А лучше делать так:
${WinVersionMajor} $4
${WinVersionMinor} $5
${WinPlatformArchitecture} $R1
${If} $4 >= 6
${If} $R1 == 64
;64-битная Vista и выше
${ElseIf} $R1 == 32
;32-битная Vista и выше
${EndIf}
${ElseIf} $4 == 5
${OrIf} $5 == 1
${OrIf} $5 == 2
${If} $R1 == 64
;64-битная XP или схожая система-клиент и сервер Win2003
${ElseIf} $R1 == 32
;32-битная XP или схожая система-клиент и сервер Win2003
${EndIf}
${ElseIf} $4 == 5
${AndIf} $5 == 0
;Win2000
${EndIf}

wolkow70
05-12-2011, 14:38
А лучше делать так: »

1. По такому варианту не обязательно помещать в Function .OnInit
${WinVersionMajor} $4
${WinVersionMinor} $5
${WinPlatformArchitecture} $R1 ?

2. Если в такой конструкции для какого-то варианта нет комманды?
3. Хедер WinVer.nsh удалять ?

kotkovets
05-12-2011, 15:59
По такому варианту не обязательно помещать в Function .OnInit »
Необязательно
Хедер WinVer.nsh удалять ? »
если имеете ввиду совместное использование WinVer.nsh и WinVer2.nsh
недопустимо!




© OSzone.net 2001-2012