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
09-09-2011, 18:17
wolkow70, ну так читайте изменения в реестре, до этих команд и ставьте условия.

wolkow70
09-09-2011, 18:19
Пока только такие мысли...

StrCpy $ClassName "Winamp.File.${extenstion}"
;
ReadRegStr $1 HKLM "SOFTWARE\Classes\.${extenstion}" ""
StrCmp "$1" "$ClassName" 0 +2
DeleteRegValue HKLM "SOFTWARE\Classes\.${extenstion}" ""
DeleteRegKey HKLM "SOFTWARE\Classes\$ClassName"
;
ReadRegStr $2 HKLM "SOFTWARE\Classes\.${extenstion}" "Winamp_Back"
DeleteRegValue HKLM "SOFTWARE\Classes\.${extenstion}" "Winamp_Back"
StrCmp "$1" "$ClassName" 0 +3
StrCmp "$2" "$ClassName" +2 0
WriteRegStr HKLM "SOFTWARE\Classes\.${extenstion}" "" "$2"

kotkovets
09-09-2011, 18:45
wolkow70,
А если нету параметра Winamp_Back?
ReadRegStr $2 HKLM "SOFTWARE\Classes\.${extenstion}" "Winamp_Back"
что запишется в значение по умолчанию в $2?
WriteRegStr HKLM "SOFTWARE\Classes\.${extenstion}" "" "$2"
Значение $2 будет пустым...и не равно $ClassName ???
а $ClassName будет равно $1 ???

wolkow70
09-09-2011, 18:55
Чем дальше в лес, тем толще партизаны...
Я так понимаю, что если нету параметра Winamp_Back, то в значение по умолчанию ничего не пропишется. Расширение будет не ассоциированным.

kotkovets
09-09-2011, 19:01
Чем дальше в лес, тем толще партизаны...
Я так понимаю, что если нету параметра Winamp_Back, то в значение по умолчанию ничего не пропишется. Расширение будет не ассоциированным »
поэтому еще раз повторюсь: http://forum.oszone.net/post-1748077-1611.html

wolkow70
09-09-2011, 19:11
Расширение будет не ассоциированным. »
А ничего страшного здесь и нет. Главное, деинсталлятор выполнит свою задачу: восстановить свой бэкап, а если его нет, то и бэкапить было при установке нечего. Нужно ставить другую программу , и все тут..

yyv
13-09-2011, 13:04
может кому будет полезно
как получить Unix time
аналог того что на php вернет функция time ()
нашел на nsis-совском форуме


system::call *(&i16,l)i.s
system::call 'kernel32::GetLocalTime(isr0)'
IntOp $1 $0 + 16
system::call 'kernel32::SystemTimeToFileTime(ir0,ir1)'
system::call *$1(l.r1)
system::free $0
system::Int64Op $1 / 10000000
Pop $1
system::Int64Op $1 - 11644473600
Pop $1
DetailPrint $1


Change GetLocalTime to GetSystemTime for UTC.

wolkow70
13-09-2011, 18:05
kotkovets,

Будьте любезны посоветовать по одному вопросу:
После выполнения комманд

ExecWait "msiexec.exe /i $\"$TEMP\TUUSetup\TUU2011LP.msi$\" /qn /norestart"
sleep 700
ExecWait "msiexec.exe /i $\"$TEMP\TUUSetup\TUU2011.msi$\" /qn /norestart"
sleep 700

msiexec.exe остается висеть в памяти. Это нормально?

kotkovets
13-09-2011, 19:53
msiexec.exe остается висеть в памяти. Это нормально? »
нормально, это своего рода "стандартная служба установщика пакетов msi", которая заводится "вручную"

kotkovets
14-09-2011, 10:47
А как быть на Windows7
Существует ли переменная для:
C:\ProgramData\TuneUp Software ?
Или есть ли особенности в обозначении переменной для (например)
C:\Users\Alex\AppData\Roaming\Opera »
А что то меняется в переменной на Windows7? впервые слышу...
C:\ProgramData\TuneUp Software ?
SetShellVarContext all
MessageBox MB_OK "$APPDATA\TuneUp Software"
C:\Users\Alex\AppData\Roaming\Opera
SetShellVarContext current
MessageBox MB_OK "$APPDATA\Opera"

wolkow70
14-09-2011, 11:14
kotkovets,
Разобрался уже , вот нашел:

%ALLUSERSPROFILE% - C:\Documents and Settings\All Users
- C:\ProgramData
%APPDATA% - C:\Documents and Settings\{username}\Application Data
- C:\Users\{username}\AppData\Roaming
%COMPUTERNAME% - {Computer Name}
%COMSPEC% - C:\Windows\system32\cmd.exe
%HOMEDRIVE% - C:
%HOMEPATH% - \Documents and Settings\{username}
- \Users\{username}
%PATH% - C:\Windows\System32\;C:\Windows\;C:\Windows\System32\Wbem
%PATHEXT% - .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.WSF;.WSH
- .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
%PROGRAMFILES% - C:\Program Files
%PROMPT% - $P$G
%SYSTEMDRIVE% - C:
%SYSTEMROOT% - C:\Windows
%TEMP% and %TMP% - C:\DOCUME~1\{username}\LOCALS~1\Temp
- C:\Users\{username}\AppData\Local\Temp
%USERNAME% - {username}
%USERPROFILE% - C:\Documents and Settings\{username}
- C:\Users\{username}
%WINDIR% - C:\Windows

Думал, по win7 нужно учитывать некоторые особенности. Оказалось что переменные более универсальны.

kotkovets
14-09-2011, 11:22
Разобрался уже , вот нашел »
Ну так и хорошо, можно и так, получать пути через ExpandEnvStrings
ExpandEnvStrings $R1 %ALLUSERSPROFILE%
MessageBox MB_OK "$R1" IDOK

ExpandEnvStrings $R1 %HOMEDRIVE% ;возвратит в $R1 букву системного диска
MessageBox MB_OK "$R1" IDOK

в справочнике по NSIS эту команду я перевел и привел подробный пример.

wolkow70
14-09-2011, 11:35
Если, я правильно понял,

SetShellVarContext current
"$APPDATA"
для Win7 это C:\Users\{username}\AppData\Roaming
для XP это C:\Documents and Settings\{username}\Application Data

SetShellVarContext all
"$APPDATA"
для Win7 это C:\ProgramData
для XP это C:\Documents and Settings\All Users

, то есть команды для удаления профилей программ одинаковы для обеих систем?

Вопрос возник в связи с тем, что надо несколько комманд cmd кода конвертнуть в NSIS

if exist "%AppData%\TuneUp Software" rd /s /q "%AppData%\TuneUp Software"
if exist "%AllUsersProfile%\Application Data\TuneUp Software" rd /s /q "%AllUsersProfile%\Application Data\TuneUp Software"
if exist "%ProgramData%\TuneUp Software" rd /s /q "%ProgramData%\TuneUp Software"
if exist "%AllUsersProfile%\{24036256-BFDB-4CD3-BE8A-A3D6160F2E16}" rd /s /q "%AllUsersProfile%\{24036256-BFDB-4CD3-BE8A-A3D6160F2E16}"


if exist "%AppData%\Microsoft\Windows\Start Menu\Programs\TuneUp Utilities 2011" rd /s /q "%AppData%\Microsoft\Windows\Start Menu\Programs\TuneUp Utilities 2011"
if exist "%ProgramData%\Microsoft\Windows\Start Menu\Programs\TuneUp Utilities 2011" rd /s /q "%ProgramData%\Microsoft\Windows\Start Menu\Programs\TuneUp Utilities 2011"
if exist "%AllUsersProfile%\ѓ«*ў*®Ґ ¬Ґ*о\Џа®Ја*¬¬л\TuneUp Utilities 2011" rd /s /q "%AllUsersProfile%\ѓ«*ў*®Ґ ¬Ґ*о\Џа®Ја*¬¬л\TuneUp Utilities 2011"
if exist "%UserProfile%\ѓ«*ў*®Ґ ¬Ґ*о\Џа®Ја*¬¬л\TuneUp Utilities 2011" rd /s /q "%UserProfile%\ѓ«*ў*®Ґ ¬Ґ*о\Џа®Ја*¬¬л\TuneUp Utilities 2011"

kotkovets
14-09-2011, 11:44
wolkow70, совершенно верно.
то есть команды для удаления профилей »
не заводите в заблуждение этой фразой других участников форума
Это переменная возвращает путь к профилю пользователя

wolkow70
14-09-2011, 11:57
не заводите в заблуждение этой фразой других участников форума
Это переменная возвращает путь к профилю пользователя »
Ну я имел в виду
RMDir /r "$APPDATA\TuneUp Software"

sawe
14-09-2011, 22:45
Конференция Build пройдет в Калифорнии и начнется 13 сентября в 20:00 МСК.
Вы сможете присоединиться, услышать новости от разработчиков-единомышленников и увидеть новые возможности Windows 8.
Прямая трансляция основного доклада конференции будет организована на сайте - http://clk.atdmt.com/MRR/go/352572697/direct/01/

Скорее всего новый апи функции не буду освещены.

yyv
16-09-2011, 14:43
Хочу сделать режим отладки
что бы потом если инсталер запущен с параметром,то выдавать сообщения типа
!ifdef TESTCONN
MessageBox MB_OK|MB_ICONSTOP "$R0"
!endif

делаю макрос

!macro DEBUG
${GetOptions} $CMDLINE "/G=" $R1
${If} $R1 == "y"
!define TESTCONN "yes"

${EndIf}

!macroend

подключаю его в onInit.nsi
!insertmacro DEBUG

и вот что интересно
если программа запущенна без параметров, то в условие
${If} $R1 == "y"
мы не заходим, но константа при этом все равно определяется и соответственно мне выпадают сообщения которых быть не должно.
Что я делаю не так?

wolkow70
16-09-2011, 15:25
wolkow70,
А если нету параметра Winamp_Back? »
Блин, возможно еще так сделать:

StrCpy $ClassName "Winamp.File.${extenstion}"
;
DeleteRegKey HKLM "SOFTWARE\Classes\$ClassName"
ReadRegStr $1 HKLM "SOFTWARE\Classes\.${extenstion}" ""
ReadRegStr $2 HKLM "SOFTWARE\Classes\.${extenstion}" "Winamp_Back"
DeleteRegValue HKLM "SOFTWARE\Classes\.${extenstion}" "Winamp_Back"
StrCmp "$1" "$ClassName" 0 +5
DeleteRegValue HKLM "SOFTWARE\Classes\.${extenstion}" ""
StrCmp "$2" "" +3 0 ;если нету параметра Winamp_Back
StrCmp "$2" "$ClassName" +2 0 ; если Winamp_Back=$ClassName
WriteRegStr HKLM "SOFTWARE\Classes\.${extenstion}" "" "$2"

Но, НЕКРАСИВО!!! Не люблю крупные условные переходы типа +5

kotkovets
16-09-2011, 15:34
Что я делаю не так? »
Вам уже не раз я говорил, и на ру борде тоже вам говорили!!!

!define - это механизм времени компиляции, вы скомпилировали проект, все!!!, константа объявлена!

Свои переменные объявляйте, и задавайте значения согласно вашим поставленным задачам.
Но, НЕКРАСИВО!!! Не люблю крупные условные переходы типа +5 »
Я вам тысячу раз говорил - используете логические конструкции

wolkow70
16-09-2011, 15:50
Я вам тысячу раз говорил - используете логические конструкции »
У меня вызывает затруднение, что здесь могут присутствовать две ошибки
-если нету параметра Winamp_Back
-если Winamp_Back=$ClassName




© OSzone.net 2001-2012