.: NSIS - все вопросы :. часть 2.

Ответить
 • Просмотры: 53
Аватара пользователя
navab

Re: .: NSIS - все вопросы :. часть 2.

Сообщение navab »

Цитата kotompazb:



А нет ли какого-то способа сохранить версию, в процессе создания инсталятора все-таки?
.: NSIS - все вопросы :. часть 2.




Можно вот так сделать:

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

В константу PRODUCT_VERSION (в коде при необходимости использовать как ${PRODUCT_VERSION}) будет помещена версия файла в формате X.X.X.X

Также будет автоматически генерироваться имя выходного файла с версией в формате "setup_X.X.X.X.exe" и информация о версии файла инсталлятора (в коде выделено жирным)





Код:

Код: Выделить всё

!getdllversion "C:\Users\APTEM\Desktop\TEST.exe" expv_
!define PRODUCT_VERSION "${expv_1}.${expv_2}.${expv_3}.${expv_4}"
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "Моя программа"
!define PRODUCT_PUBLISHER "Моя компания, LLC."
!define PRODUCT_WEB_SITE "http://www.mycompany.com"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
; MUI 1.67 compatible ------
!include "MUI.nsh"
; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
; Welcome page
!insertmacro MUI_PAGE_WELCOME
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!insertmacro MUI_PAGE_FINISH
; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES
; Language files
!insertmacro MUI_LANGUAGE "Russian"
; MUI end ------
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "setup_${PRODUCT_VERSION}.exe"
InstallDir "$PROGRAMFILES\Моя программа"
ShowInstDetails show
ShowUnInstDetails show
VIProductVersion "${PRODUCT_VERSION}"
VIAddVersionKey "ProductName" "${PRODUCT_NAME}"
VIAddVersionKey "LegalCopyright" "${PRODUCT_PUBLISHER}"
VIAddVersionKey "CompanyName" "${PRODUCT_PUBLISHER}"
VIAddVersionKey "FileDescription" "${PRODUCT_NAME} ${PRODUCT_VERSION}"
VIAddVersionKey "FileVersion" "${PRODUCT_VERSION}"
Section "MainSection" SEC01
SectionEnd
Section -Post
  WriteUninstaller "$INSTDIR\uninst.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd
Function un.onUninstSuccess
  HideWindow
  MessageBox MB_ICONINFORMATION|MB_OK "Удаление программы $(^Name) было успешно завершено."
FunctionEnd
Function un.onInit
  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Вы уверены в том, что желаете удалить $(^Name) и все компоненты программы?" IDYES +2
  Abort
FunctionEnd
Section Uninstall
  Delete "$INSTDIR\uninst.exe"
  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
  SetAutoClose true
SectionEnd
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

Цитата 4eshireCat:



Р*то РїСЂ
.: NSIS - все вопросы :. часть 2.




может наоборот? У меня ровно наоборот.

У вас 32бита винда.Может у меня проблема из-за 64бита?
Аватара пользователя
AndreyGun

Re: .: NSIS - все вопросы :. часть 2.

Сообщение AndreyGun »

Цитата alexfinik:



может наоборот? У меня ровно наоборот.

У вас 32бита винда.Может у меня проблема из-за 64бита?
.: NSIS - все вопросы :. часть 2.




Винда у меня тоже 64. Работаю с NSIS 3.0a2, но перепроверил также на v.2.46 - все именно так, как я писал ранее. В ANSI компилируется нормально, в Unicode вместо русского - "иероглифы". Разрядность ОС тут не при чем - на х86 результат аналогичный. Так что в чем тут дело мне не известно... Возможно у вас что-то с кодировками в системе напутано, т.к. даже моя цитата в вашем сообщении выглядит весьма загадочно Изображение

Попробуйте скомпилить под виртуалкой или на другом компе.
Аватара пользователя
AndreyGun

Re: .: NSIS - все вопросы :. часть 2.

Сообщение AndreyGun »

Товарищи, кто-нибудь знает как при выполнении функции замены фразы в текстовом файле (StrFunc.nsh) сделать так, что бы временный файл для обработки создавался не в папке с самим инсталлятором, а в другом месте, например во временной папке $TEMP?

Выполняются команды:

StrCpy $_FindInFile '' ; Заменяем строки в этом файле

StrCpy $_LineReplace '' ; Ищем и заменяем ЭТУ строку

StrCpy $_LineToInsert '' ; На что будем заменять

Call ReplaceLinesInFile
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

Цитата wolkow70:



Товарищи, кто-нибудь знает как при выполнении функции замены фразы в текстовом файле (StrFunc.nsh) сделать так, что бы временный файл для обработки создавался не в папке с самим инсталлятором, а в другом месте, например во временной папке $TEMP?
.: NSIS - все вопросы :. часть 2.




Перед вызовом функции замены фразы подмените значение переменной $EXEDIR

Только не забудьте после отработки функции вернуть значение обратно, иначе проблем можете повидать с неправильными путями и с некорректной работой установщика





Код:

Код: Выделить всё

var /global _EXEDIR
StrCpy "$_EXEDIR" "$EXEDIR"
StrCpy "$EXEDIR" "$TEMP"
 StrCpy $_FindInFile '' ; Заменяем строки в этом файле
 StrCpy $_LineReplace '' ; Ищем и заменяем ЭТУ строку
 StrCpy $_LineToInsert '' ; На что будем заменять
 Call ReplaceLinesInFile
StrCpy "$EXEDIR" "$_EXEDIR"
Аватара пользователя
AndreyGun

Re: .: NSIS - все вопросы :. часть 2.

Сообщение AndreyGun »

Цитата K.A.V.:



Перед вызовом функции замены фразы подмените значение переменной $EXEDIR
.: NSIS - все вопросы :. часть 2.




Да, работает. Хотя, странно, ведь в самом хедере StrFunc.nsh переменная $EXEDIR не встречается в функциях...
Аватара пользователя
Kopejkin

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Kopejkin »

Цитата wolkow70:



$EXEDIR не встречается в функциях.
.: NSIS - все вопросы :. часть 2.





Цитата K.A.V.:



StrCpy "$EXEDIR" "$TEMP"
.: NSIS - все вопросы :. часть 2.




StrFunc.nsh использует переменную $TEMP, перед началом значение "$EXEDIR" копируется в перемееную $TEMP

c ней то и работает StrFunc - а значение $TEMP уже подкорректировано.. перед использованием
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

Задача, проверить по какому интерфейсу раздаётся интернет и вывести MessageBox:




Цитата:



ethernet



wrisless



mobile



Как можно реализовать?
Аватара пользователя
Begin2Fly

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Begin2Fly »

А как однозначно проверить входит ПК в домен или нет, и вывести MessageBox:




Цитата:



ПК состоит в домене Domain.



ПК не состоит в домене.
Ответить

Вернуться в «Автоматическая установка приложений»