|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 8] |
|
Скрипты Inno Setup. Помощь и советы [часть 8]
|
Ветеран Сообщения: 1264 |
Профиль | Отправить PM | Цитировать
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Скрипты Inno Setup. Помощь и советы (Archive Pack 1):
Скрипты Inno Setup. Помощь и советы [часть 6] Скрипты Inno Setup. Помощь и советы [часть 7] |
|
Отправлено: 08:52, 02-02-2015 |
Старожил Сообщения: 284
|
Профиль | Отправить PM | Цитировать Iska, Скачал, установил (распаковал), есть там setup.exe, у меня он почти все удалил, как понимаю работает как деинсталлятор. А не проще перевёл что нужно, и упаковал как обычно в инно с деинсталлятором.
P.S. Из описания понял что написана утилитка аж для Win95 и NT. Не все ещё динозавры вымерли! |
------- Последний раз редактировалось ZVSRus, 25-06-2017 в 21:30. Отправлено: 21:21, 25-06-2017 | #1981 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
SHVtYW4= Сообщения: 3451
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
|
||
------- Отправлено: 21:29, 25-06-2017 | #1982 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Nordek, лайк с меня и большущая благодарность!
Цитата Nordek:
Всё получилось нормально, теперь один 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:
Всем ещё раз СПАСИБО! |
||
Отправлено: 22:54, 25-06-2017 | #1983 |
SHVtYW4= Сообщения: 3451
|
Профиль | Отправить PM | Цитировать Цитата 0SERGEY0:
Вместо того чтоб сделать обычный инсталлятор с быстрым и неглючным запуском, корректной работы процесса инсталляции - увешивают свистоперделками, чтоб интриги добавить (чего же на самом деле ожидать после пятиминутной инициализации инсталлятора). Цитата 0SERGEY0:
Цитата 0SERGEY0:
Цитата 0SERGEY0:
Цитата 0SERGEY0:
|
|||||
Последний раз редактировалось Nordek, 26-06-2017 в 00:45. Отправлено: 00:25, 26-06-2017 | #1984 |
Ветеран Сообщения: 1264
|
Профиль | Отправить PM | Цитировать Цитата eromunald:
Скрытый текст
[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:
|
||
Отправлено: 09:45, 26-06-2017 | #1985 |
SHVtYW4= Сообщения: 3451
|
Профиль | Отправить PM | Цитировать Цитата Nordek:
Добавление файлов:
Добавление 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 (который был ранее связан с программой) принял первоначальный вид - необходимо в секцию [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 [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 |
|
Последний раз редактировалось Nordek, 08-07-2017 в 08:41. Отправлено: 21:36, 27-06-2017 | #1986 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Цитата:
Я не сильный знаток Inno, не подскажете, как увязать чтобы в одном коде была проверка одновременно на эти гео US CA GB? Т.е. установка была бы если пользователь устанавливал софт именно из этих стран. |
|
Отправлено: 18:01, 28-06-2017 | #1987 |
Ветеран Сообщения: 1264
|
Профиль | Отправить PM | Цитировать Цитата eromunald:
Цитата eromunald:
Скрытый текст
[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
|
Профиль | Отправить PM | Цитировать Цитата El Sanchez:
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 |
Ветеран Сообщения: 1264
|
Профиль | Отправить PM | Цитировать Цитата 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 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты 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 |
|