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

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

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

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

Ветеран


Contributor


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


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

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


Изменения
Автор: El Sanchez
Дата: 22-10-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
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.2.0 [23.09.2014] - Скачать;



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

Скрипты Inno Setup. Помощь и советы [часть 6]
Скрипты Inno Setup. Помощь и советы [часть 7]

Отправлено: 08:52, 02-02-2015

 

Аватара для ZVSRus

Старожил


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

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


Iska, Скачал, установил (распаковал), есть там setup.exe, у меня он почти все удалил, как понимаю работает как деинсталлятор. А не проще перевёл что нужно, и упаковал как обычно в инно с деинсталлятором.

P.S. Из описания понял что написана утилитка аж для Win95 и NT. Не все ещё динозавры вымерли!

-------
Inno Setup 5.5.1.ee2 Ultra ANSI Unicode


Последний раз редактировалось ZVSRus, 25-06-2017 в 21:30.


Отправлено: 21:21, 25-06-2017 | #1981



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

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


SHVtYW4=


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

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


Цитата Iska:
Оригинальная инсталляция HTML Help Workshop (htmlhelp.exe) представляет собой самораспаковывающийся плоский CAB-архив. »
Точно также сделать с помощью Iexpress (C:\WINDOWS\system32\iexpress.exe).

Цитата Iska:
спрашивается — а нахрена зачем здесь тогда вообще Inno Setup нужен?! »
Может удобнее (Мне, точно было бы удобнее с помощью Inno. С ISTool или Inno Script Studio - вовсе никаких усилий ненужно прилагать для создания простого инсталляционного пакета, тыкать разнообразные кнопочки и флажки по желанию. В завершении скомпилировать.).

-------
09a468a9b4293cd82adf6d6c60a9da82 | Tm9yZGVr
В связи со сменой железа и переходом на LInux с полным отказом от Windows - посещение на форуме будет редким.


Отправлено: 21:29, 25-06-2017 | #1982


Новый участник


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

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


Nordek, лайк с меня и большущая благодарность!
Цитата 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
По поводу:
Цитата Iska:
0SERGEY0, спрашивается — а зачем здесь тогда вообще Inno Setup нужен?! »
Я просто учусь, можно было и WinRar-ом обойтись: Создать SFX, Распаковать во временную папку, Выполнить после распаковки, Скрыть всё. Но охота что-то по серьезнее подучить, чем rar и zip.

Всем ещё раз СПАСИБО!

Отправлено: 22:54, 25-06-2017 | #1983


SHVtYW4=


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

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


Цитата 0SERGEY0:
всё цвета и картинки меняют )). »
Так ведь понятно: Модно, красиво и неповторимо.
Вместо того чтоб сделать обычный инсталлятор с быстрым и неглючным запуском, корректной работы процесса инсталляции - увешивают свистоперделками, чтоб интриги добавить (чего же на самом деле ожидать после пятиминутной инициализации инсталлятора
).

Цитата 0SERGEY0:
я так понимаю файлы все ровно удаляются »
Так и есть.

Цитата 0SERGEY0:
createallsubdirs »
createallsubdirs - Компилятор "по умолчанию" "пропускает пустые каталоги", имена которых совпадают с заданным именем/шаблоном и которые являются вложенными подкаталогами исходного каталога. Флаг createallsubdirs указывает Мастеру создавать эти каталоги во время установки (точно так же, как если бы Вы создали их в секции [Dirs]). Флаг createallsubdirs должен использоваться совместно с флагом recursesubdirs.

Цитата 0SERGEY0:
recursesubdirs »
recursesubdirs - Указывает компилятору или Мастеру искать исходный "файл/каталог" заданный "именем/шаблоном" также и в подкаталогах исходного каталога.

Цитата 0SERGEY0:
Наверно "createallsubdirs" в моем случае необязателен, так как не используются подпапки »
В Вашем случае флаги createallsubdirs и recursesubdirs ненужны.

Последний раз редактировалось Nordek, 26-06-2017 в 00:45.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:25, 26-06-2017 | #1984


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

Ветеран


Contributor


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

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


Цитата eromunald:
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;

Цитата eromunald:
2. Проверка реестра на определённые ключи. »
RegKeyExists
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:45, 26-06-2017 | #1985


SHVtYW4=


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

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


Цитата Nordek:
Inno Script Studio - вовсе никаких усилий ненужно прилагать для создания »
Приведу пример:
Добавление файлов:
Например нужно добавить файлы и структуру каталогов - для этого нужно в левой колноке щёлкнуть "Файлы", затем выделить нужное содержимое и перенести в правое окно:


После перемещения, появится окошко для подтверждения:


после подтверждения будут включены структура файлов и каталогов:


Скрытый текст
При желании можно поступить иначе, выбрать первый пункт:


В таком случае придётся поправить значение:

Добавление INI
Если нужно добавить параметры INI - для этого нужно в левой колноке щёлкнуть "Файлы INI", затем перетащить файл *.ini в правое окно:


Как видно на снимке экрана, параметры успешно перенесены:


Рекомендую обратить на параметр:

В данном параметре необходимо изменить значение.
Например если оставить как есть: При установке решите выбрать другой каталог, например "C:\MyProgram" а не "C:\Program Files\MyProgram" - значение в файле INI всё равно будет записано как "C:\Program Files\MyProgram".

Чтоб избежать недоразумений, нужно щёлкнуть по параметру двойным щелчком мыши, затем заменить значение "C:\Program Files\MyProgram":


на соответствующее, как в данном случае "{app}\default":

{app} потому, что путь указанный в DefaultDirName (Пример: DefaultDirName={pf}\My Program) передаётся в константу {app}

Итоговый результат:

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

Используемые флаги:
Общие:

createkeyifdoesntexist
Записывать значение в ключ только если имя ключа не существует


uninsdeleteentry
Удалить параметр при удалении программы. Может комбинироваться с флагом uninsdeletesectionifempty.


uninsdeletesection
Когда программа удалится, удалить секцию с параметром, в котором он находится. Не рекомендуется использовать этот флаг для секции, которой пользуется Windows (как, например, некоторые секции в WIN.INI).
Следует использовать этот флаг только в секциях самого вашего приложения.


uninsdeletesectionifempty
Флаг похож на uninsdeletesection, но удаляет секцию, только если в ней не осталось ключей. Может комбинироваться с флагом uninsdeleteentry.
Добавление REG
Если нужно добавить параметры реестра - для этого нужно в левой колонке щёлкнуть "Реестр", затем перетащить файл *.reg в правое окно:


Как видно на снимке экрана, параметры успешно перенесены:


Рекомендую обратить на параметр (случай c *.reg аналогичен с *.ini):

В данном параметре необходимо изменить значение.
Например если оставить как есть: При установке решите выбрать другой каталог, например "C:\MyProgram" а не "C:\Program Files\MyProgram" - значение в реестре всё равно будет записано как "C:\Program Files\MyProgram".

Чтоб избежать недоразумений, нужно щёлкнуть по параметру двойным щелчком мыши, затем заменить значение "C:\Program Files\MyProgram":


на соответствующее, как в данном случае "{app}\default":


Итоговый результат:




Используемые флаги:
Общие:

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 не принял соответствующий вид.
Бриобретение вида для связанного файла определённого расширения может вступить в силу после выхода из ОС или вовсе после перезагруки.
Также можете встретиться с таким неддоразумением как: После деинсталляции вид связаного файла с расширением не возвращается в исходное положение.

В обоих случаях: Для того, чтоб у вас, файл с расширением *.txtutf (который был ранее связан с программой) принял первоначальный вид - необходимо в секцию [Setup] установить директиву ChangesAssociations со значением true:
Код: Выделить весь код
[Setup]
ChangesAssociations=true
в таком случае: как после инсталляции, так после деинсталляции - Мастер будет сообщать проводнику о том, что необходимо обновить ассоциацию файлов.

Если вы заметили что на первый взгляд после корректной деинсталляции ранее связанный файл не принял соответствующий вид (который никогда небыл связан с любой другой программой) - это значит: что деинсталляция, точнее настройка, произведена неверно.
Чтоб вернуть первоначальный вид файлу - необходимо вместо флага 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
Стоит учесть, что: подобным способом пренебрегать не стоит, поскольку файлы возможно ранее были связанны с другой программой или изначально связаны с программой самой ОС - что может нарушить работоспособность.

Если файл принял такой вид:

- В случае инсталляции означает, что: Ассоциация не обновлена проводником. В случае деинсталляции означает, что: Связывание удалено полностью.

Если файл принял такой вид:

- В случае инсталляции означает, что: Связывание установлено корректно. В случае деинсталляции означает, что: Ассоциация не обновлена проводником.

Если файл принял такой вид:

- В случае деинсталляции означает, что: Присутствуют некоторые значения в реестре.

Если файл принял такой вид:

- В случае деинсталляции означает, что: Программа удалена, но в подразделе DefaultIcon, в параметре (по умолчанию) содержится значение представляющее из себя путь, который ведёт к значку.

Если файл принял такой вид:

- В случае деинсталляции означает, что: Программа удалена, но в подразделе .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 - таким образом, в будущем может случится так, что программа использует свои а не используемые вами.

Последний раз редактировалось Nordek, 08-07-2017 в 08:41.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:36, 27-06-2017 | #1986


Новый участник


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

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


Цитата:
1. Проверка на ГЕО (US,CA,GB). »
Спасибо большое El Sanchez, только, насколько я понял, здесь идет проверка только на US.
Я не сильный знаток Inno, не подскажете, как увязать чтобы в одном коде была проверка одновременно на эти гео US CA GB?
Т.е. установка была бы если пользователь устанавливал софт именно из этих стран.

Отправлено: 18:01, 28-06-2017 | #1987


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

Ветеран


Contributor


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

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


Цитата eromunald:
насколько я понял, здесь идет проверка только на US »
eromunald, GetUserGeo возвращает двухбуквенный код страны, строку, вот результат и нужно сравнивать с 'US', 'CA' или 'GB'. Но мой пример неудачен, т.к. возвращает код страны, которую можно выбрать в апплете Язык и региональные стандарты - вкладка Расположение - список Текущее расположение. Это не совсем то, что надо, нужно взять код страны из языка системы.
Цитата eromunald:
Я не сильный знаток 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;
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:50, 28-06-2017 | #1988


Новый участник


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

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


Цитата El Sanchez:
предполагаю, что установка доп. ПО у вас реализована через секцию Run »
У меня установка реализована через секцию [code]. В принципе поэтому и гео хотелось бы реализовать там же. Пробовал сделать как вы предложили через секцию Run, но эффект не был достигнут. Поэтому попробовал порыться в сети и нашел один скрипт по идентификации пользователя через time zone. Дополнительно подключив Table of Geographical Locations в результате получил то от чего, в принципе, уже можно оттолкнуться. Во всяком случае уже хоть что-то. По этому коду если у пользователя настройки системы по US и RU установка идет, в противном случае нет. Думаю идеально будет, если связать запрос с IP пользователя (хотя бы через http://ipinfo.io/country). Возможно это?

Код: Выделить весь код
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;

Отправлено: 21:30, 30-06-2017 | #1989


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

Ветеран


Contributor


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

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


Цитата eromunald:
Думаю идеально будет, если связать запрос с 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;
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:46, 01-07-2017 | #1990



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты 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




 
Переход