Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]


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

idxvmfortuna_5@vk
31-10-2017, 11:44
Ребята помогите пожалуйста . нужен скрипт или пример на uninstall созданный полностью на ботве 2 . не могу не где чет найти . за ранее всем огромное спасибо

boss911
31-10-2017, 13:05
[Files]
Source: "D:\Inno Setup\file.txt"; DestDir: "{app}"; Components: a b; »
Будет установлено, если выбрано A и B, либо выбрано A или B. Данное условие равнозначно "A or B". Условия для параметра Components и принцип работы, одинаковы для всех секций, где этот параметр может применяться, в том числе и для [Files].
Если уж совсем коротко.

vk_k14m@vk
31-10-2017, 15:55
Данное место следует понимать как «Параметры любых разделов, принимающих общие параметры, за исключением разделов [Types], [Components] и [Tasks]». То есть [Files] входит в этот перечень «all sections whose entries are separated into parameters, except [Types], [Components] and [Tasks]», и к нему в полной мере должно относиться (по крайней мере, в теории — я не проверял специально) использование «boolean expressions» в параметрах «Components» и «Tasks». »
Вот теперь все доходчиво и понятно. Спасибо

vk_k14m@vk
04-11-2017, 22:38
Еще вопрос. Флаг ignoreversion. Как он работает, не совсем понял из того описания что к нему прилагается. Он же применим ко всем фалам? Или только к EXE?

Как я понял, если убрать этот флаг, то установщик будет записывать версии ВСЕХ файлов? А потом при повторной установке той же программы в ту же папку, установщик начнет сверять версии тех файлов что уже есть, с теми что устанавливает. И если они совпадают, то просто пропускать. А при несовпадении заменять. Я правильно говорю? Таким образом можно будет например восстанавливать поврежденные файлы приложения что б оно снова работало?

И как он вообще проверяет файлы? Как читает версию? Насколько файлы должны быть похожи что б он не заметил подмены? Например два текстовых файлы, в каждом по 100 символов, и во втором файле всего 1 символ отсутствует или изменен. Он увидит разницу?

Iska
04-11-2017, 23:34
vk_k14m@vk, номер версии применим к исполняемым файлам, к библиотекам, к определённого вида шрифтам. Номер версии может заноситься в ресурсы исполняемого файла/библиотеки разработчиком/компилятором при его создании.

И как он вообще проверяет файлы? Как читает версию? »
Файлы — никак не проверяет. Для сравнения номеров версий может банально использовать функцию WinAPI GetFileVersionInfo function (Windows) (https://msdn.microsoft.com/en-us/library/windows/desktop/ms647003(v=vs.85).aspx)/GetFileVersionInfoEx function (Windows) (https://msdn.microsoft.com/en-us/library/windows/desktop/aa969434(v=vs.85).aspx).

Вообще пробежитесь по разделу Version Information (Windows) (https://msdn.microsoft.com/en-us/library/windows/desktop/ms646981(v=vs.85).aspx), станет понятнее.

Насколько файлы должны быть похожи что б он не заметил подмены? »
Без разницы. Содержимое файлов не проверяется никак.

Например два текстовых файлы, в каждом по 100 символов, и во втором файле всего 1 символ отсутствует или изменен. Он увидит разницу? »
Текстовые файлы не содержат информации о версии. Содержимое же файлов и вовсе не имеет значения.

vk_k14m@vk
05-11-2017, 01:47
Iska, ясно. Но ответ все же не полный. Если установить приложение. А потом снова запустить установщик и снова попробовать установить приложение в ту же папку. Что он сделает с файлами которые уже есть? Пропустит, заменит или спрашивать будет? С флагом ignoreversion он заменит все. А что будет без него? На это ответ я не увидел...

З.Ы. И не подсовывайте мне инглиш сайты, знаете же что я не знаю язык. А значит и читать там ничего не буду.

Iska
05-11-2017, 02:37
А что будет без него? На это ответ я не увидел... »
Понял Вас. Откровенно говоря, даже не задумывался, поскольку не требовалось.

Inno Setup Knowledge Base (http://www.jrsoftware.org/iskb.php?filenotreplaced):
PRB: Setup isn't replacing a particular file

Compare the version numbers on the existing file and the new file by right-clicking them in Windows Explorer and selecting Properties. By default, Inno Setup will not replace an existing file unless the existing file has no version info or has a lower version number.

If you're using a version of Windows prior to Windows 2000 and the new file appears to have a higher version number according to Windows Explorer, then it may be that the binary version number ("FILEVERSION") is not in sync with (e.g. lower than) the textual version number. The binary version numbers are what Inno Setup actually compares.

The /LOG switch available in Inno Setup 4.2.1 and later can be handy here. The log will show the binary version numbers of files and why certain files were not replaced.

If you want to force a file to be replaced regardless of its version number, add the ignoreversion flag to the [Files] section entry. This flag should only be used on files private to your application, never on shared system files.

Можете использовать Google Переводчик (https://translate.google.com/translate?hl=ru&sl=auto&tl=ru&u=http%3A%2F%2Fwww.jrsoftware.org%2Fiskb.php%3Ffilenotreplaced).

З.Ы. И не подсовывайте мне инглиш сайты, знаете же что я не знаю язык. А значит и читать там ничего не буду. »
Прошу прощения, всего не упомнишь ;).

vk_k14m@vk
05-11-2017, 03:26
Iska
By default, Inno Setup will not replace an existing file unless the existing file has no version info or has a lower version number. »

По умолчанию Inno Setup не заменит существующий файл, если существующий файл не имеет информации о версии или имеет более низкий номер версии.
Тоесть если есть файл с версией 1.0. А я устанавливаю 2.0, то первый файл заменен не будет? И это касается только тех файлов, которые имеют версию вообще. Файлы без версии заменять не будет.

Как то это глупо. Я имею ввиду про более низкий номер версии. Очевидно же что 2.0 более новый файл. Но он не будет установлен?

Iska
05-11-2017, 06:41
Гуглопереводчик избрал худший вариант из невозможных:
https://i.imgur.com/iF0MTPH.png
Впрочем, и все остальные машинные переводчики «лажают» так же, пусть и с некоторыми отклонениями. И никакие «нейронные сети» тут не помогают.


Понимать «unless» следует как противопоставление, здесь — «за исключением следующих случаев». То есть, в случае отсутствия флага, получается так:
Тоесть если есть файл с версией 1.0. А я устанавливаю 2.0, то первый файл заменен не будет? »
Будет. А вот если попытаетесь наоборот — то не будет.

Файлы без версии заменять не будет. »
Будет.

Например, у нас есть два комплекта установки. В оба комплекта входят по паре одноимённых файлов, например, «docs.txt» и «app.exe», разного содержимого. Кроме того, «app.exe» имеет в первом комплекте версию, например, «1.0.0.0» и во втором — «1.5.0.0».


Мы производим установку первого комплекта, затем второго поверх первого. Оба файла из первоначального комплекта установки будут заменены файлами из второго комплекта: текстовый файл, как не имеющий версии, будет заменён безусловно, а версия нового, исполняемого файла из второго комплекта, более высокая.
Мы производим установку второго комплекта, затем первого поверх второго. Текстовый файл, как не имеющий версии, опять же, будет заменён безусловно, а исполняемый файл — нет, поскольку версия нового, исполняемого файла из первого комплекта, более низкая (а вот если задать флаг — будет заменён безусловно, без оглядки на версию).

R.i.m.s.k.y.
05-11-2017, 07:44
скажите, пожалуйста, inno умеет переменные с плавающей точкой? нужно определить AR монитора и в зависимости от него выполнить некоторые действия

Iska
05-11-2017, 08:50
R.i.m.s.k.y., если речь про встроенный язык Pascal Scripting — то да, там такое есть. Например:
function InitializeSetup(): Boolean;
var MyVar: Single;
begin
MsgBox(FloatToStr(10.0 / 3.0), mbInformation, MB_OK);

MyVar := 9.0 / 2;
MsgBox(FloatToStr(MyVar), mbInformation, MB_OK);
end;

R.i.m.s.k.y.
05-11-2017, 09:04
не, мне хотелось бы как-то так
var ar1, ar2 : float
ar1 := 25/98
ar2 := 3.1415926
if ar1 > ar2 then ...

Iska
05-11-2017, 17:52
не, мне хотелось бы как-то так »
R.i.m.s.k.y., можно «и так»:
function InitializeSetup(): Boolean;
var ar1, ar2 :Single;
begin
ar1:= 25.0 / 98;
ar2:= 3.1415926;

if ar1 > ar2 then
MsgBox(Format('ar1=%f ar2=%f ar1 > ar2', [ar1, ar2]), mbInformation, MB_OK)
else
MsgBox(Format('ar1=%f ar2=%f ar1 <= ar2', [ar1, ar2]), mbInformation, MB_OK);
end;

https://i.imgur.com/5QvwOvj.png

R.i.m.s.k.y.
05-11-2017, 18:28
Single »
вот! я то писал и float и extended
а single не додумался

Iska
05-11-2017, 18:41
R.i.m.s.k.y., ну, и обратите внимание, что хотя для получения результата деления двух целых чисел в виде числа с плавающей запятой достаточно переменной данного типа, но чтобы получить правильный результат, хотя бы один из операндов деления должен быть тоже числом с плавающей запятой. Иначе сначала получается результат в виде целого, который только потом преобразуется к числу с плавающей запятой и может оказаться так:
https://i.imgur.com/BRZN1Po.png

R.i.m.s.k.y.
05-11-2017, 18:48
Iska, ничоси нюансы! дзинкуе!

Iska
05-11-2017, 20:07
R.i.m.s.k.y., нет, это издержки обучения широкого профиля ;). Чаще полезные, но иногда начинаешь путать, что к какому языку относится.

vk_k14m@vk
06-11-2017, 04:59
Народ. Когда то давно, товарищ R.i.m.s.k.y. подкинул мне полезный код.
[Files]
Source: "D:\AA2Decrypt_unpack.bat"; DestDir: "{app}"; Components: Main; AfterInstall: install_this_file_1; Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall solidbreak

[Сode]
procedure install_this_file_1();
var res:integer; file, path : string;
begin
file := ExpandConstant('{app}\AA2Decrypt_unpack.bat'); path := ExpandConstant('{app}');
if FileExists(file) then Exec(file, 'параметры',path,SW_SHOW,ewWaitUntilTerminated,res) else MsgBox('Файл' + ' ' + file + #13#10 + 'не найден', mbInformation, MB_OK);
end;

Думаю вам то ясно что он делает. Запускает файла AA2Decrypt_unpack.bat сразу же после его установки.

А можно как то сделать его скрытый запуск? Что б не отображалось окно командной строки. В секции [Run] есть фалг runhidden. Хотелось бы что-то подобное...

Iska
06-11-2017, 05:34
vk_k14m@vk, установите третий чётвёртый параметр функции Exec() равным нулю.

vk_k14m@vk
06-11-2017, 05:44
установите третий параметр функции Exec() равным нулю. »
Покажите конкретно. На примере. Вместо
Exec(file, 'параметры',path,SW_SHOW
подставить
Exec(file, 'параметры',path,0 ?

Или не 0 а SW_HIDE?




© OSzone.net 2001-2012