Показать полную графическую версию : [архив].: NSIS - все вопросы :.
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?
А если установка на 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,
это же иконка инсталлятора »
И что из этого. Изменить нельзя?
А картинку при выборе языка?
kotkovets
05-12-2011, 00:12
А картинку при выборе языка? »
Иконка в диалоге выбора языка - берется иконка инсталлятора, измените иконку инсталлятора,
изменится иконка в диалоге
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC