Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]
Iska, Скачал, установил (распаковал), есть там setup.exe, у меня он почти все удалил, как понимаю работает как деинсталлятор. А не проще перевёл что нужно, и упаковал как обычно в инно с деинсталлятором.
P.S. Из описания понял что написана утилитка аж для Win95 и NT. Не все ещё динозавры вымерли!
Оригинальная инсталляция HTML Help Workshop (htmlhelp.exe) представляет собой самораспаковывающийся плоский CAB-архив. »Точно также сделать с помощью Iexpress (C:\WINDOWS\system32\iexpress.exe).
спрашивается — а нахрена зачем здесь тогда вообще Inno Setup нужен?! »
Может удобнее (Мне, точно было бы удобнее с помощью Inno. С ISTool или Inno Script Studio - вовсе никаких усилий ненужно прилагать для создания простого инсталляционного пакета, тыкать разнообразные кнопочки и флажки по желанию. В завершении скомпилировать.).
0SERGEY0
25-06-2017, 22:54
Nordek, лайк с меня и большущая благодарность!
Удалось разжевать? Или надо как-то по-феншую? »
Не, по фэншую не надо, вроде и так всё по полочкам и понятно :). Спасибо огромное за помощь, что мимо не прошли, для меня "Uninstallable = false" двух дней стоило, весь ютуб пересмотрел, всё выглядывал может кто-нибудь сделает что-то подобное, ни фига, всё цвета и картинки меняют :))).
Всё получилось нормально, теперь один Uninstall создается(родной и дырявы). Правда про флаги "createallsubdirs (который должен быть в паре с recursesubdirs)" - не даёт пропускать пустые подпапки. Флаг "deleteafterinstall" удаляет временные файлы по завершению процесса (если я конечное правильно понял). Только, с флагами и бес флагов сценарий работает одинаково. Наверно "createallsubdirs" в моем случае необязателен, так как не используются подпапки(они в процессе создаются). А по поводу "deleteafterinstall" - я так понимаю файлы все ровно удаляются и без него из-за того, что используется временная папка "темп"(наверное). Но флаги всё же оставил, на всякий, пусть будут :).
Про "Parameters" толком не понял, в справке написано "Дополнительные параметры командной строки, которые могут содержать константы.". Какие константы, что они означаю, с чем их едят, буду учить :).
В общем итоге вышел такой результат:
[Setup]
AppName=HTML Help Workshop
AppVersion=4.74.8702.0
CreateAppDir=no
OutputDir=.
SetupIconFile=Icon.ico
OutputBaseFilename=HTML Help Workshop
Compression=lzma2
SolidCompression=yes
Uninstallable=false
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Files]
Source: {app}\*; DestDir: "{tmp}"; Flags: recursesubdirs createallsubdirs deleteafterinstall
[Run]
Filename: {tmp}\setup.exe; Parameters: /S
По поводу:
0SERGEY0, спрашивается — а зачем здесь тогда вообще Inno Setup нужен?! »
Я просто учусь, можно было и WinRar-ом обойтись: Создать SFX, Распаковать во временную папку, Выполнить после распаковки, Скрыть всё. Но охота что-то по серьезнее подучить, чем rar и zip.
Всем ещё раз СПАСИБО!
всё цвета и картинки меняют :) )). »Так ведь понятно: Модно, красиво и неповторимо.
Вместо того чтоб сделать обычный инсталлятор с быстрым и неглючным запуском, корректной работы процесса инсталляции - увешивают свистоперделками, чтоб интриги добавить (чего же на самом деле ожидать после пятиминутной инициализации инсталлятора).
я так понимаю файлы все ровно удаляются »Так и есть.
createallsubdirs »
createallsubdirs - Компилятор "по умолчанию" "пропускает пустые каталоги", имена которых совпадают с заданным именем/шаблоном и которые являются вложенными подкаталогами исходного каталога. Флаг createallsubdirs указывает Мастеру создавать эти каталоги во время установки (точно так же, как если бы Вы создали их в секции [Dirs]). Флаг createallsubdirs должен использоваться совместно с флагом recursesubdirs.
recursesubdirs »
recursesubdirs - Указывает компилятору или Мастеру искать исходный "файл/каталог" заданный "именем/шаблоном" также и в подкаталогах исходного каталога.
Наверно "createallsubdirs" в моем случае необязателен, так как не используются подпапки » В Вашем случае флаги createallsubdirs и recursesubdirs ненужны.
El Sanchez
26-06-2017, 09:45
1. Проверка на ГЕО (US,CA,GB). »
[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
GEOCLASS_NATION = 16;
GEO_ISO2 = $0004;
function GetUserGeoID(GeoClass: DWORD): DWORD; external 'GetUserGeoID@kernel32.dll stdcall';
function GetGeoInfo(Location, GeoType: DWORD; lpGeoData: string; cchData: Integer; LangId: DWORD): Integer; external 'GetGeoInfo{#A}@kernel32.dll stdcall';
////////////////////////////
function GetUserGeo: string;
var
GeoID: DWORD;
begin
GeoID := GetUserGeoID(GEOCLASS_NATION);
SetLength(Result, GetGeoInfo(GeoId, GEO_ISO2, '', 0, 0));
SetLength(Result, GetGeoInfo(GeoId, GEO_ISO2, Result, Length(Result), 0) - 1);
end;
function InitializeSetup: Boolean;
begin
MsgBox(GetUserGeo, mbInformation, MB_OK);
end;
2. Проверка реестра на определённые ключи. »
RegKeyExists (http://www.jrsoftware.org/ishelp/index.php?topic=isxfunc_regkeyexists)
Inno Script Studio - вовсе никаких усилий ненужно прилагать для создания »Приведу пример:
Например нужно добавить файлы и структуру каталогов - для этого нужно в левой колноке щёлкнуть "Файлы", затем выделить нужное содержимое и перенести в правое окно:
http://i3.imageban.ru/thumbs/2017.06.27/c4b73cc23b0064638e00e94b226642a4.png (http://i3.imageban.ru/out/2017/06/27/c4b73cc23b0064638e00e94b226642a4.png)
После перемещения, появится окошко для подтверждения:
http://i5.imageban.ru/thumbs/2017.06.27/f88f1c151ef11df89eece9bcc397f2b0.png (http://i5.imageban.ru/out/2017/06/27/f88f1c151ef11df89eece9bcc397f2b0.png)
после подтверждения будут включены структура файлов и каталогов:
http://i3.imageban.ru/thumbs/2017.06.27/4b9b844f9d1b595c7a3dddae16f074bb.png (http://i3.imageban.ru/out/2017/06/27/4b9b844f9d1b595c7a3dddae16f074bb.png) http://i5.imageban.ru/thumbs/2017.06.27/f35173b443fa65098d29aa9e9b48de66.png (http://i5.imageban.ru/out/2017/06/27/f35173b443fa65098d29aa9e9b48de66.png)
При желании можно поступить иначе, выбрать первый пункт:
http://i4.imageban.ru/thumbs/2017.06.27/eaa65f5157a1742a2b207423ca28326a.png (http://i4.imageban.ru/out/2017/06/27/eaa65f5157a1742a2b207423ca28326a.png) http://i4.imageban.ru/thumbs/2017.06.27/31da0cd731f6b1aac630d3254cb89f2a.png (http://i4.imageban.ru/out/2017/06/27/31da0cd731f6b1aac630d3254cb89f2a.png) http://i2.imageban.ru/thumbs/2017.06.27/c0c38d4ee4d254a9eebd0307a8a537ca.png (http://i2.imageban.ru/out/2017/06/27/c0c38d4ee4d254a9eebd0307a8a537ca.png)
В таком случае придётся поправить значение:
http://i4.imageban.ru/thumbs/2017.06.27/d798cf31f90cbfd029a2029d62e4a8e9.png (http://i4.imageban.ru/out/2017/06/27/d798cf31f90cbfd029a2029d62e4a8e9.png) http://i4.imageban.ru/thumbs/2017.06.27/f7be5bc532abdcc285af5fab9c2d3afb.png (http://i4.imageban.ru/out/2017/06/27/f7be5bc532abdcc285af5fab9c2d3afb.png)
Если нужно добавить параметры INI - для этого нужно в левой колноке щёлкнуть "Файлы INI", затем перетащить файл *.ini в правое окно:
http://i6.imageban.ru/thumbs/2017.06.27/c39f1a0d62ad37b910f06dbed62df11e.png (http://i6.imageban.ru/out/2017/06/27/c39f1a0d62ad37b910f06dbed62df11e.png)
Как видно на снимке экрана, параметры успешно перенесены:
http://i5.imageban.ru/thumbs/2017.06.27/388006e373e68bc27720dea01ac42fad.png (http://i5.imageban.ru/out/2017/06/27/388006e373e68bc27720dea01ac42fad.png)
Рекомендую обратить на параметр:
http://i1.imageban.ru/thumbs/2017.06.27/56f9f0d9ca91409855c1f91203037ace.png (http://i1.imageban.ru/out/2017/06/27/56f9f0d9ca91409855c1f91203037ace.png)
В данном параметре необходимо изменить значение.
Например если оставить как есть: При установке решите выбрать другой каталог, например "C:\MyProgram" а не "C:\Program Files\MyProgram" - значение в файле INI всё равно будет записано как "C:\Program Files\MyProgram".
Чтоб избежать недоразумений, нужно щёлкнуть по параметру двойным щелчком мыши, затем заменить значение "C:\Program Files\MyProgram":
http://i1.imageban.ru/thumbs/2017.06.27/480b62075d9b8c0fb6f95a8fae027ec9.png (http://i1.imageban.ru/out/2017/06/27/480b62075d9b8c0fb6f95a8fae027ec9.png)
на соответствующее, как в данном случае "{app}\default":
http://i2.imageban.ru/thumbs/2017.06.27/07275d651926eb1fe5b267a5ec638cab.png (http://i2.imageban.ru/out/2017/06/27/07275d651926eb1fe5b267a5ec638cab.png) http://i1.imageban.ru/thumbs/2017.06.27/f1e0f7b1cae380bfdef3fb95fce14cff.png (http://i1.imageban.ru/out/2017/06/27/f1e0f7b1cae380bfdef3fb95fce14cff.png)
{app} потому, что путь указанный в DefaultDirName (Пример: DefaultDirName={pf}\My Program) передаётся в константу {app}
Итоговый результат:
http://i4.imageban.ru/thumbs/2017.06.27/27c6ff08545ca7c544da0fc93c95d132.png (http://i4.imageban.ru/out/2017/06/27/27c6ff08545ca7c544da0fc93c95d132.png)
теперь при инсталляции в любой каталог, путь в значении будет записываться верно.
Общие:
createkeyifdoesntexist
Записывать значение в ключ только если имя ключа не существует
uninsdeleteentry
Удалить параметр при удалении программы. Может комбинироваться с флагом uninsdeletesectionifempty.
uninsdeletesection
Когда программа удалится, удалить секцию с параметром, в котором он находится. Не рекомендуется использовать этот флаг для секции, которой пользуется Windows (как, например, некоторые секции в WIN.INI).
Следует использовать этот флаг только в секциях самого вашего приложения.
uninsdeletesectionifempty
Флаг похож на uninsdeletesection, но удаляет секцию, только если в ней не осталось ключей. Может комбинироваться с флагом uninsdeleteentry.Если нужно добавить параметры реестра - для этого нужно в левой колонке щёлкнуть "Реестр", затем перетащить файл *.reg в правое окно:
http://i5.imageban.ru/thumbs/2017.06.27/22c5aae7351d9f095fd1abdea8a76de4.png (http://i5.imageban.ru/out/2017/06/27/22c5aae7351d9f095fd1abdea8a76de4.png)
Как видно на снимке экрана, параметры успешно перенесены:
http://i3.imageban.ru/thumbs/2017.06.27/985dc97c3090b1792f3b57f1014b896e.png (http://i3.imageban.ru/out/2017/06/27/985dc97c3090b1792f3b57f1014b896e.png)
Рекомендую обратить на параметр (случай c *.reg аналогичен с *.ini):
http://i5.imageban.ru/thumbs/2017.06.27/41e3bfc39cc4e87e101b413827da6472.png (http://i5.imageban.ru/out/2017/06/27/41e3bfc39cc4e87e101b413827da6472.png)
В данном параметре необходимо изменить значение.
Например если оставить как есть: При установке решите выбрать другой каталог, например "C:\MyProgram" а не "C:\Program Files\MyProgram" - значение в реестре всё равно будет записано как "C:\Program Files\MyProgram".
Чтоб избежать недоразумений, нужно щёлкнуть по параметру двойным щелчком мыши, затем заменить значение "C:\Program Files\MyProgram":
http://i4.imageban.ru/thumbs/2017.06.27/1aaaccf5e97ecffb9383a72e416deacb.png (http://i4.imageban.ru/out/2017/06/27/1aaaccf5e97ecffb9383a72e416deacb.png)
на соответствующее, как в данном случае "{app}\default":
http://i1.imageban.ru/thumbs/2017.06.27/7d1a94db6e854cf2044b81587ac9e557.png (http://i1.imageban.ru/out/2017/06/27/7d1a94db6e854cf2044b81587ac9e557.png) http://i2.imageban.ru/thumbs/2017.06.27/6833dcdea8a59ba42f4d4fe99e877077.png (http://i2.imageban.ru/out/2017/06/27/6833dcdea8a59ba42f4d4fe99e877077.png)
Итоговый результат:
http://i5.imageban.ru/thumbs/2017.06.27/567cd9b7964d537b7b8160ce7315dc98.png (http://i5.imageban.ru/out/2017/06/27/567cd9b7964d537b7b8160ce7315dc98.png)
Общие:
createvalueifdoesntexist
Когда установлен этот флаг, инсталлятор создаст параметр, но только в том случае, когда параметр с таким именем не существует.
Этот флаг не действует, если тип данных none или задан флаг deletevalue.
dontcreatekey
Когда установлен этот флаг, инсталлятор не будет пытаться создать ключ или любой параметр, если ключ уже не существует в системе пользователя.
Инсталлятор не выдаст сообщений об ошибке, если ключ не существует.
Обычно этот флаг используется в комбинации с флагом uninsdeletekey для удаления ключей во время установки, но не создания их в течение установки.
noerror
Не отображать сообщение об ошибке, если инсталлятор не сможет по какой-либо причине создать ключ или параметр.
preservestringtype
Этот флаг применим только если ValueType имеет значение string или expandsz.
Когда установлен этот флаг и параметр еще не существует или существующий параметр не string (REG_SZ или REG_EXPAND_SZ), параметр будет создан и ему присвоено значение, указанное в ValueType.
Если параметр существовал и имел тип string, он будет заменён параметром с тем же типом, что и существовавший ранее.
(Де)инстал:
deletekey
Когда установлен этот флаг, инсталлятор сначала попытается удалить ключ, если он существует, со всеми его параметрами и разделами.
Если ValueType: none;, после этого он создаст новый ключ и параметр.
Для предотвращения негативных последствий, этот флаг игнорируется при установке, если Subkey пустой или состоит только из бэкслешей.
deletevalue
Когда установлен этот флаг, инсталлятор сначала попытается удалить параметр, если он существует.
Если параметр ValueType не равен none, после этого он создаст ключ, если он не существует, и новый параметр.
uninsclearvalue
Когда программа удаляется, устанавливать значение параметра в пустую строку (REG_SZ).
Этот флаг не может быть комбинирован с флагом uninsdeletekey.
uninsdeletekey
Когда программа удаляется, удалить ключ, включая все его параметры и разделы. Не рекомендуется использовать этот флаг для ключа, которым пользуется Windows. Следует использовать этот флаг только в ключах самого вашего приложения.
Для предотвращения негативных последствий, этот флаг игнорируется при установке, если Subkey пустой или состоит только из бэкслешей.
uninsdeletekeyifempty
Когда программа удаляется, удалять ключ, если в нем не осталось параметров и разделов.
Этот флаг не комбинируется с флагом uninsdeletevalue
Для предотвращения негативных последствий, этот флаг игнорируется при установке, если Subkey пустой или состоит только из бэкслешей.
uninsdeletevalue
Удалять параметр при удалении программы.
Этот флаг может комбинироваться с флагом uninsdeletekeyifempty.
Как связать ту или иную программу - примеры есть в справке.
Приведу пример:
[Registry]
Root: HKLM; Subkey: Software\Classes\.txtutf; ValueType: string; ValueName: ; ValueData: Text.UTF; Flags: uninsdeletevalue
Root: HKLM; Subkey: Software\Classes\Text.UTF\DefaultIcon; ValueType: string; ValueName: ; ValueData: {app}\MyProg.exe,1; Flags: uninsdeletevalue
Root: HKLM; Subkey: Software\Classes\Text.UTF\shell\open\command; ValueType: string; ValueName: ; ValueData: "{app}\MyProg.exe ""%1"""; Flags: uninsdeletevalue
при таком условии расширение *.txtutf будет связано с программой.
Вы создали инсталлятор, произвели инсталляцию, но после инсталляции вы встретились с таким недоразумением как: Вид файла с расширением *.txtutf не принял (http://i3.imageban.ru/out/2017/07/08/0bcaf545ab3673a6f4e5048824fd552f.png) соответствующий вид (http://i3.imageban.ru/out/2017/07/08/c2657d507732e6c871166137737423e8.png).
Бриобретение вида для связанного файла определённого расширения может вступить в силу после выхода из ОС или вовсе после перезагруки.
Также можете встретиться с таким неддоразумением как: После деинсталляции вид связаного файла с расширением не возвращается в исходное положение (http://i3.imageban.ru/out/2017/07/08/0bcaf545ab3673a6f4e5048824fd552f.png).
В обоих случаях: Для того, чтоб у вас, файл с расширением *.txtutf (который был ранее связан с программой) принял первоначальный вид (http://i3.imageban.ru/out/2017/07/08/0bcaf545ab3673a6f4e5048824fd552f.png) - необходимо в секцию [Setup] установить директиву ChangesAssociations со значением true:
[Setup]
ChangesAssociations=true
в таком случае: как после инсталляции, так после деинсталляции - Мастер будет сообщать проводнику о том, что необходимо обновить ассоциацию файлов.
Если вы заметили что на первый взгляд после корректной деинсталляции ранее связанный файл не принял соответствующий вид (http://i3.imageban.ru/out/2017/07/08/0bcaf545ab3673a6f4e5048824fd552f.png) (который никогда небыл связан с любой другой программой) - это значит: что деинсталляция, точнее настройка, произведена неверно.
Чтоб вернуть первоначальный вид (http://i3.imageban.ru/out/2017/07/08/0bcaf545ab3673a6f4e5048824fd552f.png) файлу - необходимо вместо флага uninsdeletevalue, установить флаг uninsdeletekey
[Registry]
Root: HKLM; Subkey: Software\Classes\.txtutf; ValueType: string; ValueName: ; ValueData: Text.UTF; Flags: uninsdeletekey
Root: HKLM; SubKey: Software\Classes\Text.UTF; Flags: uninsdeletekey
Root: HKLM; Subkey: Software\Classes\Text.UTF\DefaultIcon; ValueType: string; ValueName: ; ValueData: {app}\MyProg.exe,1; Flags: uninsdeletevalue
Root: HKLM; Subkey: Software\Classes\Text.UTF\shell\open\command; ValueType: string; ValueName: ; ValueData: "{app}\MyProg.exe ""%1"""; Flags: uninsdeletevalue
Стоит учесть, что: подобным способом пренебрегать не стоит, поскольку файлы возможно ранее были связанны с другой программой или изначально связаны с программой самой ОС - что может нарушить работоспособность.
Если файл принял такой вид:
http://i3.imageban.ru/thumbs/2017.07.08/0bcaf545ab3673a6f4e5048824fd552f.png (http://i3.imageban.ru/out/2017/07/08/0bcaf545ab3673a6f4e5048824fd552f.png)
- В случае инсталляции означает, что: Ассоциация не обновлена проводником. В случае деинсталляции означает, что: Связывание удалено полностью.
Если файл принял такой вид:
http://i3.imageban.ru/thumbs/2017.07.08/c2657d507732e6c871166137737423e8.png (http://i3.imageban.ru/out/2017/07/08/c2657d507732e6c871166137737423e8.png)
- В случае инсталляции означает, что: Связывание установлено корректно. В случае деинсталляции означает, что: Ассоциация не обновлена проводником.
Если файл принял такой вид:
http://i2.imageban.ru/thumbs/2017.07.08/788e083dbed6e920ba2d2344d89f1608.png (http://i2.imageban.ru/out/2017/07/08/788e083dbed6e920ba2d2344d89f1608.png)
- В случае деинсталляции означает, что: Присутствуют некоторые значения в реестре.
Если файл принял такой вид:
http://i4.imageban.ru/thumbs/2017.07.08/8f412d58942297dfc6539d114d5d0622.png (http://i4.imageban.ru/out/2017/07/08/8f412d58942297dfc6539d114d5d0622.png)
- В случае деинсталляции означает, что: Программа удалена, но в подразделе DefaultIcon, в параметре (по умолчанию) содержится значение представляющее из себя путь, который ведёт к значку.
Если файл принял такой вид:
http://i2.imageban.ru/thumbs/2017.07.08/b70f7a01ad6e88e3825f38a221b1c176.png (http://i2.imageban.ru/out/2017/07/08/b70f7a01ad6e88e3825f38a221b1c176.png)
- В случае деинсталляции означает, что: Программа удалена, но в подразделе .txtutf, в параметре (по умолчанию) содержится значение Text.UTF
и т.д
Также стоит учесть то, что файл с которым производится связывание - программа способна произвести связывание при первом запуске.
Также стоит учесть, что для связывания, в некоторых случаях будет достаточно использовать ключи командной строки (если таковые имеются), например:
[Run]
Filename: {app}\Compil32.exe; Parameters: /ASSOC
[UninstallRun]
Filename: {app}\Compil32.exe; Parameters: /UNASSOC
Если же имеется желание или по какой-то причине нужно связать файл с программой используя реестр Windows, то лучше использовать те же ключи что задействуются самой программой, например:
[Registry]
Root: HKLM; SubKey: SOFTWARE\Classes\.iss; ValueType: string; ValueData: InnoSetupScriptFile; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\.iss; ValueType: string; ValueName: Content Type; ValueData: text/plain; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\InnoSetupScriptFile; ValueType: string; ValueData: Inno Setup Script; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\InnoSetupScriptFile\DefaultIcon; ValueType: string; ValueData: {app}\Compil32.exe,1; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\InnoSetupScriptFile\shell; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\InnoSetupScriptFile\shell\Compile; ValueType: string; ValueData: Compi≤ Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\InnoSetupScriptFile\shell\Compile\command; ValueType: string; ValueData: """{app}\Compil32.exe"" /cc ""%1"""; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\InnoSetupScriptFile\shell\open; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\InnoSetupScriptFile\shell\open\command; ValueType: string; ValueData: """{app}\Compil32.exe"" ""%1"""; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\InnoSetupScriptFile\shell\OpenWithInnoSetup; ValueType: string; ValueData: Open with &Inno Setup; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\InnoSetupScriptFile\shell\OpenWithInnoSetup\command; ValueType: string; ValueData: """{app}\Compil32.exe"" ""%1"""; Flags: uninsdeletevalue uninsdeletekeyifempty
это позволит в дальнейшем избежать некоторые недоразумения.
Например вы назначили вручную:
Root: HKLM; SubKey: Software\Classes\.iss; ValueType: string; ValueData: ext_auto_file; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: Software\Classes\iss_auto_file; ValueType: string; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: Software\Classes\iss_auto_file\shell; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: Software\Classes\iss_auto_file\shell\edit; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: Software\Classes\iss_auto_file\shell\edit\command; ValueType: string; ValueData: """{app}\Compil32.exe"" ""%1"""; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: Software\Classes\iss_auto_file\shell\open; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: Software\Classes\iss_auto_file\shell\open\command; ValueType: string; ValueData: """{app}\Compil32.exe"" ""%1"""; Flags: uninsdeletevalue uninsdeletekeyifempty
затем использовали в Inno - таким образом, в будущем может случится так, что программа использует свои а не используемые вами.
eromunald
28-06-2017, 18:01
1. Проверка на ГЕО (US,CA,GB). »
Спасибо большое El Sanchez, только, насколько я понял, здесь идет проверка только на US.
Я не сильный знаток Inno, не подскажете, как увязать чтобы в одном коде была проверка одновременно на эти гео US CA GB?
Т.е. установка была бы если пользователь устанавливал софт именно из этих стран.
El Sanchez
28-06-2017, 21:50
насколько я понял, здесь идет проверка только на US »
eromunald, GetUserGeo возвращает двухбуквенный код страны, строку, вот результат и нужно сравнивать с 'US', 'CA' или 'GB'. Но мой пример неудачен, т.к. возвращает код страны, которую можно выбрать в апплете Язык и региональные стандарты - вкладка Расположение - список Текущее расположение. Это не совсем то, что надо, нужно взять код страны из языка системы.
Я не сильный знаток Inno, не подскажете, как увязать чтобы в одном коде была проверка одновременно на эти гео US CA GB?
Т.е. установка была бы если пользователь устанавливал софт именно из этих стран. »
eromunald, предполагаю, что установка доп. ПО у вас реализована через секцию Run, тогда в качестве примера, запуск консоли в зависимости от страны:
[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
OutputDir=.
Uninstallable=no
CreateUninstallRegKey=no
[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl
[Run]
Filename: "{cmd}"; Parameters: "/c echo.US&&pause"; Check: IsCountry('US')
Filename: "{cmd}"; Parameters: "/c echo.CA&&pause"; Check: IsCountry('CA')
Filename: "{cmd}"; Parameters: "/c echo.GB&&pause"; Check: IsCountry('GB')
Filename: "{cmd}"; Parameters: "/c echo.RU&&pause"; Check: IsCountry('RU')
[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
LOCALE_SYSTEM_DEFAULT = $0800;
LOCALE_SISO3166CTRYNAME = $005A;
function GetLocaleInfo(Locale, LCType: DWORD; lpLCData: string; cchData: Integer): Integer; external 'GetLocaleInfo{#A}@kernel32.dll stdcall';
///////////////////////////////////////////////////
function IsCountry(const Country: string): Boolean;
var
S: string;
begin
SetLength(S, GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SISO3166CTRYNAME, '', 0));
GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SISO3166CTRYNAME, S, Length(S));
Result := (CompareText(Trim(S), Country) = 0);
end;
eromunald
30-06-2017, 21:30
предполагаю, что установка доп. ПО у вас реализована через секцию Run »
У меня установка реализована через секцию . В принципе поэтому и гео хотелось бы реализовать там же. Пробовал сделать как вы предложили через секцию Run, но эффект не был достигнут. Поэтому попробовал порыться в сети и нашел один скрипт по идентификации пользователя через time zone. Дополнительно подключив Table of Geographical Locations в результате получил то от чего, в принципе, уже можно оттолкнуться. Во всяком случае уже хоть что-то. По этому коду если у пользователя настройки системы по US и RU установка идет, в противном случае нет. Думаю идеально будет, если связать запрос с IP пользователя (хотя бы через http://ipinfo.io/country). Возможно это?
[CODE]
Code]
const
GEOCLASS_NATION = 16;
GEOID_UNITED_STATES = $F4;
GEOID_RUSSIA = $CB;
type
GEOID = Longint;
GEOCLASS = DWORD;
function GetUserGeoID(GeoClass: GEOCLASS): GEOID;
external 'GetUserGeoID@kernel32.dll stdcall';
function IsGeoLocationUSA: Boolean;
begin
Result := GetUserGeoID(GEOCLASS_NATION) = GEOID_UNITED_STATES;
end;
function IsGeoLocationRU: Boolean;
begin
Result := GetUserGeoID(GEOCLASS_NATION) = GEOID_RUSSIA;
end;
function InitializeSetup: Boolean;
begin
if IsGeoLocationUSA then
Result := True
else
Result := False;
if IsGeoLocationRU then
Result := True
else
Result := False;
end;
El Sanchez
01-07-2017, 16:46
Думаю идеально будет, если связать запрос с IP пользователя (хотя бы через http://ipinfo.io/country). Возможно это? »
eromunald, да легко
[Code]
const
SXH_PROXY_SET_PROXY = 2;
HTTP_STATUS_OK = 200;
function GetGeoLocation: string;
var
XMLHTTP: Variant;
ProxyEnable: Cardinal;
ProxyServer, ProxyOverride: string;
begin
Result := '';
try
XMLHTTP := CreateOleObject('MSXML2.ServerXMLHTTP.6.0');
if RegQueryDWordValue(HKCU, 'Software\Microsoft\Windows\CurrentVersion\Internet Settings', 'ProxyEnable', ProxyEnable) and (ProxyEnable = 1) then
begin
if RegQueryStringValue(HKCU, 'Software\Microsoft\Windows\CurrentVersion\Internet Settings', 'ProxyServer', ProxyServer) and
RegQueryStringValue(HKCU, 'Software\Microsoft\Windows\CurrentVersion\Internet Settings', 'ProxyOverride', ProxyOverride) then
XMLHTTP.setProxy(SXH_PROXY_SET_PROXY, ProxyServer, ProxyOverride);
end;
XMLHTTP.open('GET', 'https://ipapi.co/country/', False);
XMLHTTP.send;
if XMLHTTP.status = HTTP_STATUS_OK then
Result := XMLHTTP.responseText;
except
MsgBox(GetExceptionMessage, mbCriticalError, MB_OK);
finally
end;
end;
procedure InitializeWizard;
begin
MsgBox(GetGeoLocation, mbInformation, MB_OK);
end;
eromunald
03-07-2017, 23:28
да легко »
Спасибо большое, протестируем.
eromunald
03-07-2017, 23:57
Прошу помощи, появилась еше одна проблема, может кто сталкивался с подобной.
На кастомной странице инсталлятора есть текстовая информация в ACaption, ASubCaption, ALabel1Caption, ALabel2Caption.
CheckBox для установки ПО. А есть AIconFileName который выводит иконку этого ПО. Раньше проблем не было т.к. использовались
иконки ПО 32х32. Сейчас же необходимо вывести bmp файл вместо иконки, и вот здесь появилась проблема. Указывая размеры bmp-шки
Width := 121;Height := 190; резервируется место для размеров изображения, но само изображение выводится 32х32.
В течение дня танцы с бубном ничего не дали. Есть подозрение что вся проблема из-за идентификатора hIcon который не дает возможности вывести изображение в реальном разрешении. Может быть есть возможность не использовать hIcon и заменить его на простое решение.
function CreateCustomOptionPage(AAfterId: Integer; ACaption, ASubCaption, AIconFileName, ALabel1Caption, ALabel2Caption,
ACheckCaption: String; var CheckBox: TCheckBox): TWizardPage;
var
Page: TWizardPage;
Rect: TRect;
hIcon: LongInt;
Label1: TNewStaticText; Label2: TNewStaticText;
begin
Page := CreateCustomPage(AAfterID, ACaption, ASubCaption);
try
AIconFileName := ExpandConstant('{tmp}\FixitLogo2.bmp');
//ExpandConstant('{tmp}\' + AIconFileName);
if not FileExists(AIconFileName) then
ExtractTemporaryFile(ExtractFileName(AIconFileName));
hIcon := ExtractIcon(GetModuleHandle(0), ExpandConstant('{tmp}\FixitLogo2.bmp'), 0);
//AIconFileName, 0);
try
with TBitmapImage.Create(Page) do begin
with Bitmap do begin
Width := 121;
Height := 190;
Rect.Right:= 32;
Rect.Bottom:= 32;
Rect.Left:= 0;
Rect.Top:= 0;
Canvas.Brush.Color := WizardForm.Color;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, hIcon, 0, 0, 121, 190, DI_NORMAL);
end;
Parent := Page.Surface;
end;
finally
DestroyIcon(hIcon);
end;
except
end;
eromunald,
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
Source: "FixitLogo2.bmp"; DestDir: "{tmp}"; Flags: dontcopy
[Code]
var
Page : TWizardPage;
Bitmap : TBitmapImage;
NewCheckBox1 : TNewCheckBox;
procedure InitializeWizard();
begin
Page := CreateCustomPage(wpWelcome, 'FixIt', 'Additional Software Options');
Bitmap := TBitmapImage.Create(WizardForm);
with Bitmap do
begin
Parent := Page.Surface;
SetBounds(ScaleX(0),ScaleY(0),ScaleX(120),ScaleY(120));
ExtractTemporaryFile('FixitLogo2.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\FixitLogo2.bmp'));
end;
NewCheckBox1 := TNewCheckBox.Create(WizardForm);
with NewCheckBox1 do
begin
Parent := Page.Surface;
SetBounds(ScaleX(0),ScaleY(130),ScaleX(215),ScaleY(17));
Caption := 'Здесь название вашего NewCheckBox1';
end;
end;
eromunald
04-07-2017, 20:09
Самое простое решение »
Спасибо большое, это то что надо!
OldGamer
15-07-2017, 17:56
Здравствуйте!
Подскажите, пожалуйста, как реализовать следующее:
1) При первом запуске программа создаёт папку с файлами по пути: "C:\Users\Имя пользователя\AppData\Local\папка на удаление".
Нужно, чтобы при деинсталляции программы эта папка была удалена.
2) Нужно, чтобы была страница с выбором из 2-х разных файлов/папок программы, так как во вложении, желательно без картинок.
OldGamer
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; Check: PortableCheck; Flags: ignoreversion
Source: "compiler:Examples\MyProg-x64.exe"; DestDir: "{app}"; Check: InstallerCheck; Flags: ignoreversion
[UninstallDelete]
Type: filesandordirs; Name: "{localappdata}\папка на удаление";
[Code_]
var
ComponentPage : TWizardPage;
Installer : TNewRadioButton;
Portable : TNewRadioButton;
function InstallerCheck: Boolean;
begin
Result := Installer.Checked;
end;
function PortableCheck: Boolean;
begin
Result := Portable.Checked;
end;
procedure InitializeWizard();
begin
ComponentPage := CreateCustomPage(wpWelcome, 'Выбор типа установки', 'Выберите тип установки');
{ Installer }
Installer := TNewRadioButton.Create(WizardForm);
with Installer do
begin
Parent := ComponentPage.Surface;
SetBounds(ScaleX(0),ScaleY(15),ScaleX(100),ScaleY(17));
Caption := 'Установка';
Checked := True;
end;
{ Portable }
Portable := TNewRadioButton.Create(WizardForm);
with Portable do
begin
Parent := ComponentPage.Surface;
SetBounds(ScaleX(0),ScaleY(45),ScaleX(100),ScaleY(17));
Caption := 'Распаковка';
end;
end;
OldGamer
16-07-2017, 13:56
ZVSRus,
Огромное-преогромное Спасибо! Этот скрипт работает! Очень благодарен :good: :yahoo: :good:
Остался "последний штрих" - нужно, чтобы вокруг этих RadioButton был GroupBox с надписью "Версия:".
нужно, чтобы вокруг этих RadioButton был GroupBox с надписью "Версия:". »
[Code]
var
ComponentPage : TWizardPage;
Installer : TNewRadioButton;
Portable : TNewRadioButton;
GroupBox: TNewGroupBox;
function InstallerCheck: Boolean;
begin
Result := Installer.Checked;
end;
function PortableCheck: Boolean;
begin
Result := Portable.Checked;
end;
procedure InitializeWizard();
begin
ComponentPage := CreateCustomPage(wpWelcome, 'Выбор типа установки', 'Выберите тип установки');
{ GroupBox }
GroupBox := TNewGroupBox.Create(WizardForm);
with GroupBox do
begin
Parent := ComponentPage.Surface;
SetBounds(ScaleX(0),ScaleY(0),ScaleX(417),ScaleY(220));
Caption := 'Версия:';
end;
{ Installer }
Installer := TNewRadioButton.Create(WizardForm);
with Installer do
begin
Parent := GroupBox;
SetBounds(ScaleX(20),ScaleY(35),ScaleX(100),ScaleY(17));
Caption := 'Установка';
Checked := True;
end;
{ Portable }
Portable := TNewRadioButton.Create(WizardForm);
with Portable do
begin
Parent := GroupBox;
SetBounds(ScaleX(20),ScaleY(65),ScaleX(100),ScaleY(17));
Caption := 'Распаковка';
end;
end;
OldGamer,
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; Check: PortableCheck; Flags: ignoreversion
Source: "compiler:Examples\MyProg-x64.exe"; DestDir: "{app}"; Check: InstallerCheck; Flags: ignoreversion
[UninstallDelete]
Type: filesandordirs; Name: "{app}";
Type: filesandordirs; Name: "{localappdata}\папка на удаление";
Type: filesandordirs; Name: "{userappdata}\папка на удаление";
[Code]
var
ComponentPage : TWizardPage;
InstallGroupBox : TNewGroupBox;
Installer : TNewRadioButton;
Portable : TNewRadioButton;
function InstallerCheck: Boolean;
begin
Result := Installer.Checked;
end;
function PortableCheck: Boolean;
begin
Result := Portable.Checked;
end;
procedure InitializeWizard();
begin
ComponentPage := CreateCustomPage(wpWelcome, 'Выбор типа установки', 'Выберите тип установки');
{ InstallGroupBox }
InstallGroupBox := TNewGroupBox.Create(WizardForm);
with InstallGroupBox do
begin
Parent := ComponentPage.Surface;
SetBounds(ScaleX(0),ScaleY(0),ScaleX(210),ScaleY(60));
Caption := 'Выбор типа установки:';
end;
{ Installer }
Installer := TNewRadioButton.Create(WizardForm);
with Installer do
begin
Parent := InstallGroupBox;
SetBounds(ScaleX(5),ScaleY(14),ScaleX(195),ScaleY(17));
Caption := 'Установка обычной версии';
Checked := True;
end;
{ Portable }
Portable := TNewRadioButton.Create(WizardForm);
with Portable do
begin
Parent := InstallGroupBox;
SetBounds(ScaleX(5),ScaleY(36),ScaleX(195),ScaleY(17));
Caption := 'Распаковка портативной версии';
end;
end;
LagunaFAN
17-07-2017, 23:26
Доброго времени суток!
Недавно столкнулся с тем (собственно, мне сообщили об этом, ибо у самого FullHD), что при разрешении 3840x2160 в инсталляторе съезжают кнопки Next и Cancel, а также некоторые кастомные элементы (картинки, текст etc.)...
http://i.imgur.com/3RPd9t1.png
Проблема с картинками, я так понимаю, всего лишь из-за того, что картинки маленького разрешения (или нет?). Но что с кнопками Next и Cancel и текстом (мейби сам скин виноват?)? Это можно пофиксить? Прошу помощи! :sorry:
Инсталлятор у меня без наворотов, разве что установлен скин и произведены некоторые другие легкие модификации.
Если нужно, то вот ссылка на скрипт - https://cloud.mail.ru/public/9Acu/Lt6HGA7hz
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.