Показать полную графическую версию : [архив].: NSIS - все вопросы :.
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
Расширение будет не ассоциированным. »
А ничего страшного здесь и нет. Главное, деинсталлятор выполнит свою задачу: восстановить свой бэкап, а если его нет, то и бэкапить было при установке нечего. Нужно ставить другую программу , и все тут..
может кому будет полезно
как получить 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"
Конференция Build пройдет в Калифорнии и начнется 13 сентября в 20:00 МСК.
Вы сможете присоединиться, услышать новости от разработчиков-единомышленников и увидеть новые возможности Windows 8.
Прямая трансляция основного доклада конференции будет организована на сайте - http://clk.atdmt.com/MRR/go/352572697/direct/01/
Скорее всего новый апи функции не буду освещены.
Хочу сделать режим отладки
что бы потом если инсталер запущен с параметром,то выдавать сообщения типа
!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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC