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

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 и мы снова на страничке выбора компонентов, а при страничке инсталляции такую фишку невозможно сделать такое - прервем установку.
По этому в силу еще разных причин и для таких задач - вызывать функцию, в вашем случае, лучше при закрытии странички.

punsh
02-05-2011, 01:47
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

punsh
03-05-2011, 13:12
или вот так, работает почти на всех платформах 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