Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9]

Ответить
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 9]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: El Sanchez
Дата: 06-06-2020
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:

Показать/скрыть: Ссылки на примеры скриптов:

Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;

  • RegExporter - Бесплатная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.3.0 [17.01.2015] - Скачать;



Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Скрипты Inno Setup. Помощь и советы [часть 6] | Скрипты Inno Setup. Помощь и советы [часть 6].7z
Скрипты Inno Setup. Помощь и советы [часть 7] | Скрипты Inno Setup. Помощь и советы [часть 7].7z
Скрипты Inno Setup. Помощь и советы [часть 8] | Скрипты Inno Setup. Помощь и советы [часть 8].7z
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:09, 04-04-2018

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата ErikPshat:
И больше на Windows 10 мало вероятно что предвидится. »
4.7 PowerShell Core 6.0
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:07, 23-01-2019 | #221



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

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


Аватара для ErikPshat

Пользователь


Сообщения: 54
Благодарности: 11

Профиль | Отправить PM | Цитировать


Iska, ну допустим, пусть будет даже и так. Это ядро пока ещё не зарелизено на оффсайте, там давно уже лежит версия 5.1 и она давно не обновляется. Но разве это на что-то влияет? Предположим программе требуется для её стабильной работы версия 5.1, не меньше, но конечно же можно старше и если у юзера установлена меньшая версия, тогда ему предлагается обновиться как минимум на требуемую 5.1. И что это меняет, для работы моей программы, даже если завтра выйдет PS 6,0, потом 7.0 и так далее? Но они же будут не меньше 5.1, а если у юзера установлена более свежая версия, тогда логично ему и не будет предлагаться скачать и установить 5.1.

Ну я так понял, это просто опровержение моих слов типа "мало вероятно что предвидится"

Отправлено: 09:00, 23-01-2019 | #222


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024

Профиль | Отправить PM | Цитировать


Цитата ErikPshat:
Я пытаюсь прочитать это и как-то загадочно это. Предположим у пользователя (у меня) установлена последняя версия PowerShell 5.1, тогда читаю:
"Если не 5.1.14409.1005 (возвращает PSVersion из реестра) или 0.0.14409.1005 < 0 тогда... begin" и у меня пошла скачка и установка, даже если мне это не надо. »
ErikPshat, немного я протупил, все-таки там 5.1 должно стоять. Главное, сначала правильно написал, потом переклинило и на 5.2 исправил .
Цитата ErikPshat:
Первое условие из реестра получается никогда не выполняется, а служит только для доставания ключа из реестра в переменную PSVersion?
Вторым условием производится сравнение версии из реестра с требуемой нами. Но тогда и оно не отрабатывает, тем более, если оставить там 5.2. »
ErikPshat, если не прочитали версию, то сравнивать нечего, нет у нас PowerShell, выполняем блок. Если прочитали, то сравниваем то, что прочитали, по результату проверки выполняем блок. Также в блоке пропишите сообщение, когда PowerShell не установлен (выпонилось первое условие).
Цитата ErikPshat:
По-моему, моя прежняя конструкция вполне прозрачна (для меня) и отрабатывает правильно, даже если завтра выйдет версия 10. »
ErikPshat, отлично, выходит 10.0.0.1, вы с Copy режете до 3 символов, теперь сравните строки '10.' < '5.1'. Ой.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:44, 23-01-2019 | #223


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


ErikPshat, мы уже поимели версию ОС Windows за номером 10.0 сразу после версии 6.3. Так что не зарекайтесь.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:19, 23-01-2019 | #224


Аватара для ErikPshat

Пользователь


Сообщения: 54
Благодарности: 11

Профиль | Отправить PM | Цитировать


El Sanchez, ещё раз благодарю за помощь и разъяснения! Потихоньку кое-что проясняется.

Есть ещё один один момент, который я оказывается упустил. Дело в том, что на Windows Vista идёт версия PS 1.0, на Windows 7 идёт из коробки версия PS 2.0 и что самое важное, они прописываются по другому пути в реестре, там разница в цифре 1 в пути:
Код: Выделить весь код
SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
А, начиная с Windows 8.0 PS 3.0 в пути вместо 1 идёт 3. Получается, что на 7-ке будет возвращаться пустая строка, как и в Vista (но ей пристального внимания уже не уделяем).
Тогда получается, нужно добавить условие проверки ключа реестра под 7-ку. Правильно ли будет, если я сделаю так:
Код: Выделить весь код
if not RegQueryStringValue(HKLM,'SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine','PowerShellVersion',PSVersion) or
   not RegQueryStringValue(HKLM,'SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine','PowerShellVersion',PSVersion) or
   (StrCmpLogicalW(PSVersion, '5.1') < 0) then
Либо можно соорудить другую конструкцию через if и else, т.е. провести по отдельности верификацию через первый ключ, в противном случае через второй.

Цитата Iska:
ErikPshat, мы уже поимели версию ОС Windows за номером 10.0 сразу после версии 6.3. »
Цитата El Sanchez:
ErikPshat, отлично, выходит 10.0.0.1, вы с Copy режете до 3 символов, теперь сравните строки '10.' < '5.1'. Ой. »
Предположим, выйдет версия 10.0123.456, через Copy мы отсекаем первые 3 символа, получится 10. (десять с точкой).
Тогда при сравнении 10. < 5.1 разве система не поймёт, что нужно сравнивать цифры до точки, а потом после точки. Если стоит точка, тогда думаю система должна определять, что это дробная запятая и, если после точки ничего не стоит, то это означает 0, т.е. 10.0 < 5.1. Это конечно можно проверить на практике, но пока это так, размышления и аналитическая деятельность.

Отправлено: 19:39, 23-01-2019 | #225


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата ErikPshat:
Это конечно можно проверить на практике, но пока это так, размышления и аналитическая деятельность. »
Проверяю:
AutoIt
Код: Выделить весь код
AutoItSetOption("MustDeclareVars", 1)

ConsoleWrite( _
	"Returns  0 if the strings are identical." & @CRLF & _
	"Returns  1 if the string pointed to by psz1 has a greater value than that pointed to by psz2." & @CRLF & _
	"Returns -1 if the string pointed to by psz1 has a lesser value than that pointed to by psz2."  & @CRLF & @CRLF _
)


ConsoleWrite("1    w/s 5   ==> " & String(_StrCmpLogicalW("1",    "5"  )) & @CRLF)
ConsoleWrite("1    w/s 5.0 ==> " & String(_StrCmpLogicalW("1",    "5.0")) & @CRLF)
ConsoleWrite("1.0  w/s 5   ==> " & String(_StrCmpLogicalW("1.0",  "5"  )) & @CRLF)
ConsoleWrite("1.0  w/s 5.0 ==> " & String(_StrCmpLogicalW("1.0",  "5.0")) & @CRLF)

ConsoleWrite(@CRLF)

ConsoleWrite("10   w/s 5   ==> " & String(_StrCmpLogicalW("10",   "5"  )) & @CRLF)
ConsoleWrite("10   w/s 5.0 ==> " & String(_StrCmpLogicalW("10",   "5.0")) & @CRLF)
ConsoleWrite("10.0 w/s 5   ==> " & String(_StrCmpLogicalW("10.0", "5"  )) & @CRLF)
ConsoleWrite("10.0 w/s 5.0 ==> " & String(_StrCmpLogicalW("10.0", "5.0")) & @CRLF)

ConsoleWrite(@CRLF)

ConsoleWrite("10   w/s 10   ==> " & String(_StrCmpLogicalW("10",   "10"  )) & @CRLF)
ConsoleWrite("10   w/s 10.0 ==> " & String(_StrCmpLogicalW("10",   "10.0")) & @CRLF)
ConsoleWrite("10.0 w/s 10   ==> " & String(_StrCmpLogicalW("10.0", "10"  )) & @CRLF)
ConsoleWrite("10.0 w/s 10.0 ==> " & String(_StrCmpLogicalW("10.0", "10.0")) & @CRLF)

Exit(0)

Func _StrCmpLogicalW($s1, $s2)
	Return DllCall('shlwapi.dll', 'int', 'StrCmpLogicalW', 'wstr', $s1, 'wstr', $s2)[0]
EndFunc
Цитата:
Код: Выделить весь код
Returns  0 if the strings are identical.
Returns  1 if the string pointed to by psz1 has a greater value than that pointed to by psz2.
Returns -1 if the string pointed to by psz1 has a lesser value than that pointed to by psz2.

1    w/s 5   ==> -1
1    w/s 5.0 ==> -1
1.0  w/s 5   ==> -1
1.0  w/s 5.0 ==> -1

10   w/s 5   ==> 1
10   w/s 5.0 ==> 1
10.0 w/s 5   ==> 1
10.0 w/s 5.0 ==> 1

10   w/s 10   ==> 0
10   w/s 10.0 ==> -1
10.0 w/s 10   ==> 1
10.0 w/s 10.0 ==> 0

Отдельное внимание на последнюю группу.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:09, 23-01-2019 | #226


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024

Профиль | Отправить PM | Цитировать


Цитата ErikPshat:
огда получается, нужно добавить условие проверки ключа реестра под 7-ку. Правильно ли будет, если я сделаю так: »
ErikPshat, нет. Вы проверяете наличие PS 5.0, так что чтение из PowerShell\1 бессмысленно.
Цитата ErikPshat:
Тогда при сравнении 10. < 5.1 разве система не поймёт, что нужно сравнивать цифры до точки, а потом после точки. »
ErikPshat, нет. Строковые литералы сравниваются посимвольно и сравнение закончится на первом символе, т.к. '1' < '5'.
Цитата Iska:
10 w/s 10.0 ==> -1
10.0 w/s 10 ==> 1 »
Iska, хе-хе, об этом надо помнить. Кстати, StrCmpLogicalW еще и -2 возвращает, если какой-либо параметр пуст.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:42, 23-01-2019 | #227


Аватара для ErikPshat

Пользователь


Сообщения: 54
Благодарности: 11

Профиль | Отправить PM | Цитировать


Iska, El Sanchez, ага, спасибо! Понятно, значит идёт посимвольное сравнение как текст, а не как цифры.

Да, я это на практике проверил, поменял в реестре версию PS, просто добавил 1 спереди, получилось 15.1 )))
Оказывается для 64-битки путь автоматически в реестре меняется на Wow6432Node:
Код: Выделить весь код
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\PowerShell\3\PowerShellEngine
И вывел через MsgBox версию, чтобы воочию убедиться верно ли возвращает:



Ну и далее пошло скачивание и установка, т.е. условие сравнения не выполнилось правильно. То есть, вы правы, сравнение идёт посимвольно и никакие точки, запятые, дроби тут не учитываются. Ещё нашёл функцию в Inno Preprocessor - DecodeVer и EncodeVer, но не понял, почему она не задействуется сразу, хотя вроде бы функция объявлена изначально по умолчанию.

Отправлено: 00:26, 24-01-2019 | #228


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата El Sanchez:
Кстати, StrCmpLogicalW еще и -2 возвращает, если какой-либо параметр пуст. »
Что ж они, заразы, не пишут об том?

Но зато пишут не менее интересное:
Цитата:
Note Behavior of this function, and therefore the results it returns, can change from release to release. It should not be used for canonical sorting applications.
.


Цитата ErikPshat:
Оказывается для 64-битки путь автоматически в реестре меняется на Wow6432Node: »
Да нет. Это только если Ваше приложение — x86 под x64 ОС. А так раздел HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell вполне себе существует под x64 ОС. У меня, например, под Windows 7 SP1 x64 он выглядит так:
Скрытый текст
Код: Выделить весь код
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell]
"DisablePromptToUpdateHelp"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1]
"Install"=dword:00000001
"PID"="89383-100-0001260-04309"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\0409]
"Install"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine]
"ApplicationBase"="C:\\Windows\\System32\\WindowsPowerShell\\v1.0"
"PSCompatibleVersion"="1.0, 2.0"
"RuntimeVersion"="v2.0.50727"
"ConsoleHostAssemblyName"="Microsoft.PowerShell.ConsoleHost, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=msil"
"ConsoleHostModuleName"="C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\Microsoft.PowerShell.ConsoleHost.dll"
"PowerShellVersion"="2.0"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PSConfigurationProviders]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PSConfigurationProviders\Microsoft.PowerShell]
"ApplicationBase"="C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\"
"AssemblyName"="System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=msil"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell]
"Path"="C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"
"ExecutionPolicy"="RemoteSigned"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\ScriptedDiagnostics]
"ExecutionPolicy"="Unrestricted"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3]
"ConsoleHostShortcutTargetX86"=hex(2):25,00,50,00,72,00,6f,00,67,00,72,00,61,\
  00,6d,00,44,00,61,00,74,00,61,00,25,00,5c,00,4d,00,69,00,63,00,72,00,6f,00,\
  73,00,6f,00,66,00,74,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,5c,\
  00,53,00,74,00,61,00,72,00,74,00,20,00,4d,00,65,00,6e,00,75,00,5c,00,50,00,\
  72,00,6f,00,67,00,72,00,61,00,6d,00,73,00,5c,00,41,00,63,00,63,00,65,00,73,\
  00,73,00,6f,00,72,00,69,00,65,00,73,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,\
  77,00,73,00,20,00,50,00,6f,00,77,00,65,00,72,00,53,00,68,00,65,00,6c,00,6c,\
  00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,20,00,50,00,6f,00,77,00,\
  65,00,72,00,53,00,68,00,65,00,6c,00,6c,00,20,00,28,00,78,00,38,00,36,00,29,\
  00,2e,00,6c,00,6e,00,6b,00,00,00
"ConsoleHostShortcutTarget"=hex(2):25,00,50,00,72,00,6f,00,67,00,72,00,61,00,\
  6d,00,44,00,61,00,74,00,61,00,25,00,5c,00,4d,00,69,00,63,00,72,00,6f,00,73,\
  00,6f,00,66,00,74,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,5c,00,\
  53,00,74,00,61,00,72,00,74,00,20,00,4d,00,65,00,6e,00,75,00,5c,00,50,00,72,\
  00,6f,00,67,00,72,00,61,00,6d,00,73,00,5c,00,41,00,63,00,63,00,65,00,73,00,\
  73,00,6f,00,72,00,69,00,65,00,73,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,\
  00,73,00,20,00,50,00,6f,00,77,00,65,00,72,00,53,00,68,00,65,00,6c,00,6c,00,\
  5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,20,00,50,00,6f,00,77,00,65,\
  00,72,00,53,00,68,00,65,00,6c,00,6c,00,2e,00,6c,00,6e,00,6b,00,00,00
"Install"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3\0409]
"Install"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine]
"ApplicationBase"="C:\\Windows\\System32\\WindowsPowerShell\\v1.0"
"PSPluginWkrModuleName"="C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\system.management.automation.dll"
"PSCompatibleVersion"="1.0, 2.0, 3.0, 4.0, 5.0, 5.1"
"RuntimeVersion"="v4.0.30319"
"ConsoleHostAssemblyName"="Microsoft.PowerShell.ConsoleHost, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=msil"
"ConsoleHostModuleName"="C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\Microsoft.PowerShell.ConsoleHost.dll"
"PowerShellVersion"="5.1.14409.1005"
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:51, 24-01-2019 | #229


Аватара для ErikPshat

Пользователь


Сообщения: 54
Благодарности: 11

Профиль | Отправить PM | Цитировать


Iska, ну да, у меня то же самое. Просто я говорю о том, что по обычному пути поменял версию PowerShell, потом удивился, что как на скриншоте выше версия не изменилась. Сначала не понял, что за фокусы, подумал, может быть изменения не применились, перезагрузился, снова скомпилировал и опять показывает мне ответ 5.1, хотя я поменял на 15.1 ))) Потом вспомнил об этой ветке реестра, полез туда и там поменял, тогда оно и показалось во всей красе. Ну это я просто так написал, вдруг кому по ходу дела пригодится. Правда, чтобы сменить версию PS в реестре, пришлось себя владельцем ветки сделать, а потом и права выдать :D.

Отправлено: 08:11, 24-01-2019 | #230



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 7] El Sanchez Автоматическая установка приложений 2499 02-02-2015 08:59
Скрипты Inno Setup. Помощь и советы [часть 6] El Sanchez Автоматическая установка приложений 2494 10-03-2014 11:51
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58




 
Переход