У моего продукта есть версия w.x.y.z. Мое обновление этого продукта имеет w.x.y.z + 1. Но требование заключается в том, что до обновления четвертого поля версии i.e; z не следует проверять ... i.e; myproduct не должен принимать во внимание поле z ..... Пожалуйста, ответьте мне с ответом.Отображение версий продуктов?
ответ
Вы можете прочитать версию приложения из реестра и сохранить его как переменную, а затем обрезать ее до определенного количества символов. Проверка http://nsis.sourceforge.net/TrimText:_Trim_text_e.g._to_fit_in_a_label
Сценарий ниже будет работать для ANSI NSIS
, если у вас установлена такая версия, если нет, пожалуйста, измените соответственно ReadRegStr
.
Name "TrimTest"
OutFile "TrimTest.exe"
!include "TextFunc.nsh"
!include "nsDialogs.nsh"
!include "LogicLib.nsh"
!include "WinMessages.nsh"
!include "WordFunc.nsh"
!insertmacro VersionCompare
Function TrimText
Exch $R0 ; char
Exch
Exch $R1 ; length
Exch 2
Exch $R2 ; text
Push $R3
Push $R4
StrLen $R3 $R2
IntCmp $R3 $R1 Done Done
StrCpy $R2 $R2 $R1
StrCpy $R3 0
IntOp $R3 $R3 + 1
StrCpy $R4 $R2 1 -$R3
StrCmp $R4 "" Done
StrCmp $R4 $R0 0 -3
IntOp $R3 $R3 + 1
StrCpy $R4 $R2 1 -$R3
StrCmp $R4 "" Done
StrCmp $R4 $R0 -3
IntOp $R3 $R3 - 1
StrCpy $R2 $R2 -$R3
StrCpy $R2 $R2
Done:
StrCpy $R0 $R2
Pop $R4
Pop $R3
Pop $R2
Pop $R1
Exch $R0 ; output
FunctionEnd
!macro TrimText Text Length Char Var
Push "${Text}"
Push "${Length}"
Push "${Char}"
Call TrimText
Pop "${Var}"
!macroend
!define TrimText "!insertmacro TrimText"
Section
ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NSIS ANSI" "DisplayVersion"
${TrimText} $0 7 "-" $R0
;set max lenght to 7, where only 6 chars are needed, as trimmer will stop on - char
;in your case you will probably want to trim to first . from right side
;${TrimText} "string" "max_length" "up_to_char" "$out_var"
MessageBox MB_ICONEXCLAMATION "Line: $R0"
;Input $0 from registry should be "2.46.4-ANSI" if the latest ANSI NSIS is installed
;$R0 after trimm will be "Line: 2.46.4"
${VersionCompare} $R0 "2.46.6" $R2
${If} $R2 == 1 ;if 2.46.6 is lower that $R0
MessageBox MB_ICONEXCLAMATION "Your App Version is newer than this version of update"
${EndIf}
${If} $R2 == 0 ;versions are equal
MessageBox MB_ICONEXCLAMATION "Your App Version is equal to this version of update"
${EndIf}
${If} $R2 == 2 ;if 2.46.6 is higher that $R0
MessageBox MB_ICONEXCLAMATION "Your App Version is older and will be updated"
;here you can write your update section
${EndIf}
SectionEnd
В этом случае это может быть решение (на основе http://nsis.sourceforge.net/Sort_String_2). Я создал тестовый ключ реестра только для проверки с вашим {3.1.123 4.0.112 4.1.119}
. Пожалуйста, замените его на использование вашего приложения.
Name "TrimTest2"
OutFile "TrimTest2.exe"
!include "TextFunc.nsh"
!include "nsDialogs.nsh"
!include "LogicLib.nsh"
!include "WinMessages.nsh"
!include "WordFunc.nsh"
!insertmacro VersionCompare
Function AdvStrSort
Exch $0 ; input string
Exch
Exch $1 ; count to get part
Exch
Exch 2
Exch $2 ; get ammount of chunks from end
Exch 2
Push $3
Push $4
Push $5
Push $6
Push $7
StrCpy $0 " $0"
StrCpy $3 0
StrCpy $4 0
loop:
IntOp $3 $3 - 1
StrCpy $6 $0 1 $3
StrCmp $6 "" skip
StrCmp $6 " " roger ; to change chunk seperators, edit this (" ")
Goto loop
roger:
StrCpy $7 $0 "" $3
IntOp $4 $4 + 1
StrCmp $4 $2 0 loop
StrCmp $1 $2 0 +3
StrCpy $0 $7
Goto end
skip:
StrCpy $4 0
StrLen $5 $7
top:
IntOp $4 $4 + 1
loop2:
IntOp $5 $5 - 1
StrCpy $3 $7 1 -$5
StrCmp $3 "" end
StrCmp $3 " " 0 loop2 ; to change chunk seperators, edit this too (" ")
StrCmp $4 $1 0 top
StrCpy $0 $7 -$5
end:
StrLen $1 $0
IntOp $1 $1 - 1
StrCpy $0 $0 $1 -$1
Pop $7
Pop $6
Pop $5
Pop $4
Pop $3
Pop $2
Pop $1
Exch $0 ; output string
FunctionEnd
Section
ReadRegStr $R1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\UserApplicationName" "Version"
Push 1 ; get text after 1st chunk from string end
Push 1 ; get 1 chunk before the 1st
Push "$R1" ; input string (string that has spaces)
Call AdvStrSort
Pop $R0
MessageBox MB_ICONEXCLAMATION "Result: $R0"
${VersionCompare} $R0 "5.0.114" $R2
;MessageBox MB_ICONEXCLAMATION "Result: $R2"
${If} $R2 == 1 ;if 5.0.114 is lower that $R0
MessageBox MB_ICONEXCLAMATION "Your App Version is newer than this version of update"
${EndIf}
${If} $R2 == 0 ;versions are equal
MessageBox MB_ICONEXCLAMATION "Your App Version is equal to this version of update"
${EndIf}
${If} $R2 == 2 ;if 5.0.114 is higher that $R0
MessageBox MB_ICONEXCLAMATION "Your App Version is older and will be updated"
;here you can write your update section
${EndIf}
SectionEnd
эй хау получил решение ... Strcpy $ 0 $ 0 7 ... $ 0 - это версия, которая считывается из реестра для удаления установленный продукт ... Strcpy читает только первые 7 символов версии ... Итак, четвертое поле не читается ... Спасибо за поддержку, которую вы дали ... Получите intouch, если возникнут другие проблемы ... – Prakash
Если любой из моих ответов помог вам, пожалуйста, проголосуйте за них. Спасибо. – RobeN
Привет, @ user1357950, рассмотрите ['accept answer'] (http://meta.stackexchange.com/a/5235/179541), если это поможет вам решить ваш вопрос. Вы также можете проголосовать за пост (ы), нажав на стрелку вверх над номером голосования в левой части сообщения ;-) Спасибо! – TLama
- 1. Соответствие диапазонов версий продуктов атрибутам
- 2. Woocommerce Отображение продуктов с изображениями продуктов
- 3. отображение продуктов с категориями
- 4. отображение специфических продуктов магазина magento
- 5. Отображение продуктов на странице PDT.php
- 6. Отображение макс 10 доступных продуктов
- 7. Отображение продуктов в индексных действиях
- 8. Динамическое отображение различных версий приложения
- 9. MVC2 Группировка и отображение продуктов по дате
- 10. Отображение подкатегорий продуктов WooCommerce с родителем
- 11. Отображение продуктов с угловыми в html
- 12. Отображение количества продуктов рядом категории для Prestashop
- 13. CSS/HTML - Отображение продуктов с гибкой планировкой
- 14. Отображение продуктов, основанных на пользовательской таксономии, созданной
- 15. Отображение всех категорий продуктов в выпадающем меню
- 16. Отображение NHibernate для двух версий таблицы
- 17. Отображение меню с категориями, подкатегорий и продуктов - Magento
- 18. woocommerce отображение инструкций для загружаемых продуктов только на странице благодарности
- 19. Magento Product pag - отображение связанных продуктов, отсутствующих на складе
- 20. Фильтрация продуктов Bigcommerce - отображение фильтра на главной странице?
- 21. Google ReCaptcha - отображение текстовых изображений вместо изображений продуктов питания
- 22. Как отображение атрибутов связанных продуктов на странице продукта (сгруппированный продукт)
- 23. BigCartel: {{category.name}} и {{artist.name}} отображение на элемент на странице продуктов
- 24. Отображение всех атрибутов в простой таблице продуктов сгруппированного продукта - Magento
- 25. Wordpress WooCommerce: отображение последних и случайных продуктов на одной странице
- 26. отображение продуктов из базы данных с использованием php
- 27. Отображение продаж продуктов за каждый день в SQL
- 28. Неверная совместимость версий версий
- 29. Ограничение продуктов на Virtuemart 2.0.18 Administrator Список продуктов по версии
- 30. Отображение (контроль версий) разметки/аннотации в области номеров строк VIM
Не могли бы вы рассказать вам, пожалуйста, пожалуйста? Если я понимаю, что вы хотите, чтобы ваш патч (обновленная версия продукта) обновлял устаревшую версию, когда он существует, но он должен проверять только версию W.X.Y версии продукта, а не полную W.X.Y.Z? – RobeN
Да, это правда, и вы меня поняли .... Можете ли вы предложить мне, что делать и как исключить проверку Z версии продукта .... – Prakash