PDA

Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.


Страниц : 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

andryz80
13-02-2013, 13:57
profcom, вот на свой яндексдиск архив забросил забрать с яндексдиска (http://yadi.sk/d/az2IUM4E2_UCB)

Lex_from_Belarus
13-02-2013, 15:26
Цитата MKN:
Lex_from_Belarus,
Не знаю как в W8, а в W7 параметры совместимости устанавливаются в
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
Может попробовать перед запуском, сначала туда "прописывать" программу-установщик ? »
полсушайте, я или туплю и непрвильно что-то делаю или фигня происходит с добавлением в реестр в эту ветку тоже из-за прав
в секции делаю (хотя пробовал по разному):
Section
SectionIn 1
SetOutPath $INSTDIR
File /r "${pkgdir}"
WriteRegStr HKCU Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers "$INSTDIR\program.exe" "~WIN7RTM"
ExecWait "$INSTDIR\program.exe /S"
SectionEnd
Я тут правильно пишу? »
нда , с админскими правами всё равно не пишет в реестр, а шрифты установились с помощью RequestExecutionLevel admin

может я в коде не то что-то написал?

MKN
13-02-2013, 15:56
Lex_from_Belarus,
Всё стандартно :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
глобальные права администратора и совместимости
и
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
юзерские права администратора и совместимости

Вопрос рассматривался, в частности здесь :
http://answers.microsoft.com/en-us/windows/forum/windows_7-windows_programs/how-do-i-turn-off-compatability-mode-completely/e6c7d7f2-21be-49ce-8d93-c06b1c616002

Иногда добавляют ключи доп параметров, например :
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
“C:\\Program Files (x86)\\Adobe\\Your_Exe_File.exe”=”RUNASADMIN”

"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" - заключи у себя в кавычки !

ps Font обычно инсталлируют так :

SetOutPath "$FONTS"
File "SYMBOL.TTF"
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" "Symbol (TrueType)" "SYMBOL.TTF"
System::Call `gdi32::AddFontResource(t)i("$FONTS\SYMBOL.TTF").R0`
${If} $R0 > 0
MessageBox MB_OK "Шрифт был успешно установлен!"
${Else}
MessageBox MB_OK "Не удалось установить шрифт!"
${EndIf}

Функция AddFontResource добавляет ресурс шрифта из заданного файла в таблицу системного шрифта. Шрифт впоследствии может быть использован для вывода текста любым приложением.
проверку установки можно не делать

andryz80
14-02-2013, 00:14
Урррааа. все папка проклятая ужаляется и все работает и даже аасоциации
просто вначале добавил


RequestExecutionLevel highest
RequestExecutionLevel admin

но есть одно, что не получается. посоветуйте как при деинсталляции удалить ассоциацию файлов.
и еще одна неприятная мелочь. при ассоциации почему то у файлов ассоциированых иконка неизвестного файла.

Section
SetShellVarContext all
WriteRegStr HKLM "SOFTWARE\Classes\.lay" "" "Layout.File.6"
WriteRegStr HKLM "SOFTWARE\Classes\Layout.File.6" "" "редактор печатных плат"
WriteRegStr HKLM "SOFTWARE\Classes\Layout.File.6\DefaultIcon" "" "$INSTDIR\lay.ico"
WriteRegStr HKLM "SOFTWARE\Classes\Layout.File.6\shell" "" "open"
WriteRegStr HKLM "SOFTWARE\Classes\Layout.File.6\shell\Open\command" "" "$\"$INSTDIR\Layout60.exe$\" $\"%1$\""
WriteRegStr HKCU "Software\Microsoft\Windows NT\CurrentVersion\EXTENSIONS" "lay" "$\"$\"$INSTDIR\Layout60.exe$\" ^.lay$\""

WriteRegStr HKEY_CURRENT_USER "Software\Classes\.lay" "" "Layout.File.6"
WriteRegStr HKEY_CURRENT_USER "Software\Classes\Layout.File.6\shell\open\command" "" "$\"$INSTDIR\Layout60.exe$\" $\"%1$\""
SectionEnd

profcom
14-02-2013, 00:21
Урррааа. все папка проклятая ужаляется и все работает и даже аасоциации
просто вначале добавил »
бесполезно писать обе инструкции так как используется последняя из двух.
но есть одно, что не получается. посоветуйте как при деинсталляции удалить ассоциацию файлов.
и еще одна неприятная мелочь. при ассоциации почему то у файлов ассоциированых иконка неизвестного файла. »
Ассоциацию отменять удаление ключей из реестра которыми ассоциируешь.
На счет иконки завтра напишу в чем беда времени не хватило.

andryz80
14-02-2013, 01:33
На счет иконки завтра напишу в чем беда времени не хватило. »
надеюсь это исправимо? спасибо огромное буду ждать.

Lex_from_Belarus
14-02-2013, 09:45
А подскажите пожалуйста, как прибить окна выполняющегося инсталятора, когда выполняется вот эта команда?
ExecWait "$INSTDIR\program.exe /S"

Тут в частности вылазит, когда программа установлена, сообщение о том что надо удалить старую, а мне бы хотелось, чтобы постоянно просто устанавливалось никому ничего не говоря.

MKN
14-02-2013, 10:31
как прибить окна выполняющегося инсталятора, когда выполняется вот эта команда?
ExecWait "$INSTDIR\program.exe /S" »
Странно, что у тебя при тихой установке, появляются окна...
В зависимости от организации твоего скрипта можно использовать разные приёмы :

При условии запуска Silent установки - от просто AutoCloseWindow true и HideWindow, до радикального

Function .onGUIInit
System::Call "User32::SetWindowPos(i, i, i, i, i, i, i) b ($HWNDPARENT, 0, -10000, -10000, 0, 0, ${SWP_NOOWNERZORDER}|${SWP_NOSIZE})"
FunctionEnd
или, раз у тебя :
Тут в частности вылазит, когда программа установлена, сообщение о том что надо удалить старую »
просто не показывай это сообщение, если установка тихая... Т.е. , или игнорируй проверку наличия уже установленной версии,
или, если проверка положительна :
1. автоудаление старой версии без всяких сообщений
2. в зависимости от ПО, можно сделать установку поверх старой проги, с обновлением файлов и записей реестра и пр.
3. запрет на установку новой...
Выбирай... :)

Lex_from_Belarus
14-02-2013, 11:59
MKN, нет, ситуация такова, что program.exe - это не моя программа, но тоже установщик nsis. просто как библотека установится должна, а она уже выдаёт окна, например об уже установленной версии.

andryz80
14-02-2013, 12:17
profcom, и еще вопросик можно ли эту иконку при ассоциации сделать с внешнего файла iconka.ico а не тот, что в ехешнике самой программы?

profcom
14-02-2013, 20:27
MKN, нет, ситуация такова, что program.exe - это не моя программа, но тоже установщик nsis. просто как библотека установится должна, а она уже выдаёт окна, например об уже установленной версии. »
Это говорит о том что скрипт этой программы сконструирован не правильно, и тут два варианта или самому создавать нормальный установщик или например писать на NSIS или Autoit маленький скрипт который будет запускаться со стартом вашего не хорошего установщика и отлавливать появление этого окна, тут же его скрывать и посылать ему закрыться. Как то так должно быть на мой взгляд. Второй вариант быстрее, но менее правильный так ка возможно короткое мерцание при появлении окна.

profcom
15-02-2013, 09:38
profcom, и еще вопросик можно ли эту иконку при ассоциации сделать с внешнего файла iconka.ico а не тот, что в ехешнике самой программы? »
На сколько я понимаю что так сделать нельзя, но возможно вашу желаемую иконку запихнуть в dll и ссылаться на нее. В конечном счете код для вашего инсталятора должен выглядеть так:
!include "FileFunc.nsh"
Section
File "C:\Инсталятор sprint layout\SprintLayout\Icon.dll"
WriteRegStr HKLM "SOFTWARE\Classes\.lay" "" "Layout.File.6"
WriteRegStr HKLM "SOFTWARE\Classes\Layout.File.6" "" "редактор печатных плат"
WriteRegStr HKLM "Software\Classes\Layout.File.6\shell\open\command" "" "$\"$INSTDIR\Layout60.exe$\" $\"%1$\""
WriteRegStr HKLM "SOFTWARE\Classes\Layout.File.6\DefaultIcon" "" "$INSTDIR\Icon.dll,1"
WriteRegStr HKLM "SOFTWARE\Classes\Layout.File.6\shell" "" "open"
WriteRegStr HKLM "SOFTWARE\Classes\Layout.File.6\shell\Open\command" "" "$\"$INSTDIR\Layout60.exe$\" $\"%1$\""
WriteRegStr HKCU "Software\Microsoft\Windows NT\CurrentVersion\EXTENSIONS" "lay" "$\"$\"$INSTDIR\Layout60.exe$\" ^.lay$\""

${RefreshShellIcons}
SectionEnd

Вот ваша dll (http://afpc.ucoz.ru/Downloads/IconLib.dll).

MKN
15-02-2013, 10:03
можно ли эту иконку при ассоциации сделать с внешнего файла iconka.ico а не тот, что в ехешнике самой программы? »
Можно, и пример уже был приведён. Откуда вообще сомнения ? :) (Многие программы используют конкретные иконки для своих ассоциаций. )
DLL используют, когда в неё помещают наборы разных иконок, с разным разрешением, битностью и т.д.
Тогда ссылаются на id нужной иконки в DLL.

profcom
15-02-2013, 12:02
Можно, и пример уже был приведён. Откуда вообще сомнения ? »
У меня сомнения возникли в связи с тем что с его иконкой icons.ico это не проходит(возможно есть требование к разрешению или битности), а вот с dll получается.

MKN
15-02-2013, 12:17
с его иконкой icons.ico это не проходит »
Я использовал обыкновенную стандартную ico 32x32x32бит
Если путь указан верно и используется действительно файл ico, а не нечто иное с расширением ico - то работать просто обязано. :)

andryz80
15-02-2013, 14:25
похоже все дело в самой иконке. в файле ico не одна иконка а три разного размера может потому и не заработала. попробовал с обычной иконкой все пашет на ура

andryz80
16-02-2013, 01:18
прошу еще помощи
команда WriteRegStr записывает в реестр
я так понял DeleteRegKey это наоборот. и синтаксис у нее такой же?

почему то компилятор ругается

K.A.V.
16-02-2013, 09:32
прошу еще помощи
команда WriteRegStr записывает в реестр
я так понял DeleteRegKey это наоборот. и синтаксис у нее такой же?
почему то компилятор ругается »
Когда же люди начнут читать русскоязычную справку??? :read:

Справочник по NSIS => Перевод справки NSIS => Работа с реестром

MKN
16-02-2013, 11:08
Подскажите - каким образом создать таймер, отсчитывающий время в ч:м:с с момента старта, т.е. начиная с 00:00:00 ?
С ${GetTime} что то номер не выходит...

K.A.V.
16-02-2013, 11:15
Подскажите - каким образом создать таймер, отсчитывающий время в ч:м:с с момента старта, т.е. начиная с 00:00:00 ?
С ${GetTime} что то номер не выходит... »
хм, чет не понял, тебе нужно просто подсчитать разницу во времени? Ну т.е. сколько работал инсталлер с момента запуска и до определённого времени/завершения установки?

Если так, то есть прекрасный плагин Time plug-in (http://nsis.sourceforge.net/Time_plug-in), там есть математические операции со временем




© OSzone.net 2001-2012