Показать полную графическую версию : [архив].: NSIS - все вопросы :.
kotkovets
01-05-2011, 15:34
punsh
Сначала читаем значение параметра, к примеру AltDefaultDomainName и сохраняем в $R1
ReadRegStr $R1 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" "AltDefaultDomainName"
а затем WriteRegStr HKLM "SOFTWARE\BurnAware\Install" "InstallEntry" "$R1"
CyberMaster
01-05-2011, 16:49
Подскажите, как лучше всего делать инсталлятор для игр? Тупо запаковать все в один .exe не вариант, так как такой exe файл, весом в 4 гига например, запускается долго, и требует больших усилий от компьютера.
kotkovets
01-05-2011, 17:19
CyberMaster,
как вариант, запихнуть файлы игры в архивы, скажем по 1ГБ, а установщик будет распаковывать архивы в указанное место и делать другие необходимые действия, ну вот к примеру распаковывать таким плагином
http://forum.oszone.net/post-1552431-891.html
CyberMaster
01-05-2011, 17:25
А этот плагин умеет работать с 7z, cab архивами?
kotkovets
01-05-2011, 17:51
А этот плагин умеет работать с 7z, cab архивами? »
Не пробывал, но есть для cab, 7z консольные утилиты, и плагины на офф.сайте.
а универсальный вариант, взять консольную утилитку из архиватора 7-zip (7z.dll и 7z.exe) запихнуть в установщик, а затем запускать с нужными ключами - будет распаковывать все, что умеет 7-zip
nsExec::Exec `"$PLUGINSDIR\7z.exe" x "Путь к архиву" -o"Путь распаковки" -y`
Pop $0 ;код возврата, если $0 = 0 то, успешно
7z.exe и 7z.dll должны лежать в одной директории
SnakeSel
01-05-2011, 22:35
Здравствуйте.
Прошу помочь в решении такой проблемы:
Идет распаковка меню и выбранных портативных программ.
Причем меню распаковывается в INSTDIR, а вот программы в зависимости от того выбрано ли меню для установки.
Если меню устанавливаем, то путь распаковки $INSTDIR\PortableApps.
если нет, то $INSTDIR
Использую следующий код (фрагменты):
;=== страницы установки
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_COMPONENTS
!define MUI_PAGE_CUSTOMFUNCTION_PRE instdir
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
Section "Меню" secMENU
SetOutPath "$INSTDIR"
File /r "${pkgdir}\menu\*"
SectionEnd
SectionGroup /e "Интернет" ;/e
Section "Miranda 0.9.20" secMiranda
SetOutPath "$AppInstallDir"
File /r "${pkgdir}\internet\MirandaPortable"
SectionEnd
SectionGroupEnd
...<тут остальные группы и секции секции>
Function instdir
${If} ${SectionIsSelected} secMENU
StrCpy $AppInstallDir "$INSTDIR\PortableApps"
${Else}
StrCpy $AppInstallDir "$INSTDIR"
${EndIf}
FunctionEnd
Проблема в том, что у меня программы всегда распаковываются в $INSTDIR\PortableApps, независимо стоит ли галочка на секции меню. В чем моя ошибка?
kotkovets
02-05-2011, 00:01
В чем моя ошибка? »
Не то время выбора, вызова функции, функцию instdir можно вызывать при закрытии странички компонентов.
Причем где и как прописана иницилизация функции очень важна!
!include "MUI2.nsh"
OutFile "file.exe"
InstallDir "$PROGRAMFILES\Proga"
ShowInstDetails show
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE instdir
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
Section "Меню" secMENU
SetOutPath "$INSTDIR"
SectionEnd
SectionGroup /e "Интернет" ;/e
Section "Miranda 0.9.20" secMiranda
SetOutPath "$INSTDIR"
SectionEnd
SectionGroupEnd
Function instdir
${If} ${SectionIsSelected} ${secMENU}
StrCpy $INSTDIR "$INSTDIR\PortableApps"
${ElseIfNot} ${SectionIsSelected} ${secMENU}
;если не выбрана секция
${EndIf}
FunctionEnd
SnakeSel
02-05-2011, 00:46
kotkovets, спасибо. Дело оказалось в ${If} ${SectionIsSelected} ${secMENU}.
А разве
!insertmacro MUI_PAGE_DIRECTORY
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE instdir
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
и
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_COMPONENTS
!define MUI_PAGE_CUSTOMFUNCTION_PRE instdir
!insertmacro MUI_PAGE_INSTFILES
ни одно и тоже?
Ведь в первом случае функция вызывается при закрытии окна выбора компонентов, а во втором перед началом установки файлов. Что по сути одно и тоже место.или нет?
kotkovets
02-05-2011, 01:28
SnakeSel почти одно и тоже, но лучше , при закрытии странички компонентов делать, почему?
Потому, что если по каким либо причинам нам надо вернуться назад, пишем Abort и мы снова на страничке выбора компонентов, а при страничке инсталляции такую фишку невозможно сделать такое - прервем установку.
По этому в силу еще разных причин и для таких задач - вызывать функцию, в вашем случае, лучше при закрытии странички.
kotkovets, SOFTWARE\Microsoft\Windows NT » - это для всех Windows? кажись только для XP
kotkovets
02-05-2011, 02:18
punsh,
Возьмите плагин IPconfig (http://nsis.sourceforge.net/IpConfig_plugin) в переменной $R1 - доменное имя компа
IpConfig::GetHostName
Pop $R0
Pop $R1
MessageBox MB_OK "$R1" IDOK
или вот так, работает почти на всех платформах Windows
ReadRegStr $R1 HKLM "SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" "ComputerName"
источник: http://nsis.sourceforge.net/Your_Computer_Name
или вот так, работает почти на всех платформах Windows »
вот это подошло!!!
wolkow70
03-05-2011, 15:27
ТОВАРИЩИ ПОМОГИТЕ!
Делаю скрипт для Opera.
Как удалить профиль по адресу:
Documents and Settings\Administrator\Application Data\Opera\ Opera\profile\
Всяко пробовал, никак не получается.
Какая там переменная?
kotkovets
03-05-2011, 16:55
wolkow70,
Слабо, что ли справку посмотреть, а потом клепать дистры, что ли...
$APPDATA — папка с данными учётной записи пользователя
(c:\Documents and Settings\Ваше имя\Application Data\ или c:\Documents and Settings\All Users\Application Data\).
Для неё справедливо замечание SetShellVarContext, равно как и для:
****************************************************
SetShellVarContext all - для всех пользователей
SetShellVarContext current - для текущего пользователя
****************************************************
"$APPDATA\Opera\Opera\profile"
wolkow70
03-05-2011, 17:06
Слабо, что ли справку посмотреть, а потом клепать дистры, что ли... »
Нет, не слабо. У меня в деинсталляторе уже прописано :
SetShellVarContext current
RMDir /r "$APPDATA\Opera\"
RMDir /r "$LOCALAPPDATA\Opera\"
Но это удаляет профили в папке текущего пользователя, у меня кэш оказался в папке
E:\Documents and Settings\Администратор\Local Settings\Application Data\Opera
Как попасть в директорию профиля администратора? Вот чего нет в справке.
kotkovets
03-05-2011, 17:29
Как попасть в директорию профиля администратора? »
Попадаем так:
!include "MUI2.nsh"
!include "FileFunc.nsh"
!insertmacro GetParent
OutFile "file.exe"
ShowInstDetails show
var FAdmin
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
Section TEST
${GetParent} $DOCUMENTS $FAdmin
MessageBox MB_OK "$FAdmin" IDOK
SectionEnd
или так : http://forum.oszone.net/post-1552188-884.html
wolkow70
03-05-2011, 18:06
Попадаем так:
тыц »
Не понял...
или так : http://forum.oszone.net/post-1552188-884.html »
Получил такую шнягу:
http://s006.radikal.ru/i214/1105/85/13f14094f4af.png
Через
SetShellVarContext all
RMDir /r "$APPDATA\Opera\"
RMDir /r "$LOCALAPPDATA\Opera\"
тоже не получается...
wolkow70
03-05-2011, 18:49
Сделал так:
!include "MUI2.nsh"
!include "FileFunc.nsh"
!insertmacro GetParent
var FAdmin
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
Section "TEST"
${GetParent} $DOCUMENTS $FAdmin
RMDir /r "$FAdmin\Local Settings\Application Data\Opera"
SectionEnd
В результате снесло папку с профилем в
E:\Documents and Settings\User\Local Settings\Application Data\Opera\Opera
Но в папке администратора все на месте.
Тут надо учитывать, что все папки профилей (Администратор, User и ALL user расположены в одной директории и попадают в один шаг....
wolkow70
03-05-2011, 19:22
kotkovets,
Вот так работает!
Section "01"
ReadEnvStr $R0 "PATH"
StrCpy $R0 "E:\Documents and Settings\Администратор\Local Settings\Application Data\Opera"
System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("PATH", R0).r0'
ReadEnvStr $R0 "PATH"
StrCpy $R0 "E:\Documents and Settings\Администратор\Local Settings\Application Data\Opera"
SetEnv::SetEnvVar "PATH" $R0
RMDir /r "$R0\"
SectionEnd
kotkovets
03-05-2011, 19:26
wolkow70, хочется сказать, о боже... справка рулит
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC