|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 7] |
|
Скрипты Inno Setup. Помощь и советы [часть 7]
|
Ветеран Сообщения: 1270 |
Профиль | Отправить PM | Цитировать
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Скрипты Inno Setup. Помощь и советы (Archive Pack 1):
Скрипты Inno Setup. Помощь и советы [часть 6] |
|
Отправлено: 11:48, 10-03-2014 |
Пользователь Сообщения: 110
|
Профиль | Отправить PM | Цитировать Всем привет, как сделать так, чтобы установка продолжалась в том случае если в папку куда устанавливаешь есть файл WorldOfTanks.exe. Т.е. Если в папке куда устанавливаешь нет файла WorldOfTanks.exe, то выскакивает окно, что сюда установить компоненты нельзя.
Заранее спасибо! |
Отправлено: 12:16, 10-03-2014 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 78
|
Профиль | Отправить PM | Цитировать Farser21,
|
Отправлено: 13:31, 10-03-2014 | #3 |
Пользователь Сообщения: 110
|
Профиль | Отправить PM | Цитировать Mailchik, спасибо работает. Но есть одна проблема. Когда я выбираю папку без файла WorldOfTanks.exe, выскакивает окно, я нажимаю ок. Потом оно сразу перекидывает меня уже на следующую страницу выбора компонентов. Можно сделать, чтобы при нажатие ок на окошке, оставалось на данной странице?
Возможно я неправильно совместил? Как правильно соединить это? |
Последний раз редактировалось Farser21, 10-03-2014 в 14:16. Отправлено: 14:05, 10-03-2014 | #4 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать есть такая функция сравнения версий
function CompareVersion(VerMStoCompare, VerLStoCompare: Cardinal; const FileName2: string): Integer; { Данная функция сравнивает версии файлов указанных в FileName1 и FileName2. Возвращаемые значения: -2: если не смогли прочитать версию любого из файлов; -1: FileName1 > FileName2; 0: FileName1 = FileName2; 1: FileName1 < FileName2; FileName1 = передаваемые числа версий для сравнения с файлом FileName2, условия теже: -1: файл "старый" 0: версии равны 1: файл новее} var VerMS1, VerLS1, VerMS2, VerLS2: Cardinal; fMS1, fLS1, fMS2, fLS2: Extended; begin Result := -2; VerMS1 := VerMStoCompare; VerLS1 := VerLStoCompare; if GetVersionNumbers(FileName2, VerMS2, VerLS2) //and GetVersionNumbers(FileName2, VerMS2, VerLS2) then begin fMS1 := StrToFloat(IntToStr(VerMS1 shr 16) + '.' + IntToStr(VerMS1 and $FFFF)); fLS1 := StrToFloat(IntToStr(VerLS1 shr 16) + '.' + IntToStr(VerLS1 and $FFFF)); fMS2 := StrToFloat(IntToStr(VerMS2 shr 16) + '.' + IntToStr(VerMS2 and $FFFF)); fLS2 := StrToFloat(IntToStr(VerLS2 shr 16) + '.' + IntToStr(VerLS2 and $FFFF)); case fMS1 = fMS2 of True: case fLS1 = fLS2 of True : Result := 0; False: case fLS1 > fLS2 of True : Result := -1; False: Result := 1; end; end; False: case fMS1 > fMS2 of True : Result := -1; False: Result := 1; end; end; end; // MsgBox(FileName2 + #13#10 + // 'VerMS1 = ' + IntToStr(VerMS1) + ' VerLS1 = ' + IntToStr(VerLS1) + #13#10 + // 'VerMS2 = ' + IntToStr(VerMS2) + ' VerLS2 = ' + IntToStr(VerLS2) + #13#10 + // IntToSTR(Result), mbInformation, MB_OK); end; Подскажите, пожалуйста, как исправить ______________________ Farser21, прятать надо не под спойлер, а под тег code function NextButtonClick(CurPageID: Integer): Boolean; begin Result := True; case CurPageID of wpSelectDir: if not FileExists(ExpandConstant('{app}\WorldOfTanks.exe')) then begin MsgBox('Сюда установить компоненты нельзя!', mbError, MB_OK); Result := False; end; //if if FileExists(ExpandConstant('{app}')+'\WorldOfTanks.exe') then begin if FileVersion(ExpandConstant('{app}')+'\WorldOfTanks.exe') < '0.9.0' then begin MsgBoxEx(WizardForm.Handle, 'Моды не будут работать на данной версии игры! Моды предназначены для версии патча 0.9.0 ', 'Моды не подходят у данному патчу World of Tanks', MB_OK or MB_ICONWARNING, 0, 0); Result:= false; end;end;//if end;//case end; |
|
------- Последний раз редактировалось R.i.m.s.k.y., 10-03-2014 в 14:54. Отправлено: 14:45, 10-03-2014 | #5 |
Пользователь Сообщения: 110
|
Профиль | Отправить PM | Цитировать R.i.m.s.k.y., спасибо. Все работает.
|
Отправлено: 15:04, 10-03-2014 | #6 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать Господа состоятельные кроты, помогите разобраться:
А) пользователь user запускает windows, приходит одмин и запускает установщик от себя - admin Кто CurrentUser и OriginalUser в терминах Inno? (runasoriginaluser & runascurentuser) Б) unins.exe понимает переменные вида {src}? т.е. если программа установлена в C:\program files\prog и там же лежит деинсталлятор, созданный инно в процессе установки unins000.exe, можно проверить наличие файла C:\program files\prog\file.txt по ExpandConstant('{src}\prog\file.txt') в процессе удаления программы? |
------- Последний раз редактировалось R.i.m.s.k.y., 10-03-2014 в 15:46. Отправлено: 15:34, 10-03-2014 | #7 |
SHVtYW4= Сообщения: 3451
|
Профиль | Отправить PM | Цитировать Архив содержит:
ITDownloader + Rus ITCallback ITTray |
------- Отправлено: 16:00, 10-03-2014 | #8 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Добрый день всем.
Можно ли разделить секцию [Tasks] на 2 странички? У меня там сейчас 2 независимые группы exclusive опций. После добавления новых вариантов в одну из групп они перестали помещаться на одну страничку без скроллбара. Видел в архиве этой темы пример кода по созданию своей странички с чекбоксом и сохранению его состояния в переменной кода. Но остается непонятным как активировать выбранный вариант в группе опций. Может есть какой-нибудь другой способ разделить группы по страничкам? Farser21, R.i.m.s.k.y., для сравнения версий я написал себе вот такой велосипед: type TVersionInfo = record Major, Minor, Release, Build: WORD; end; function GetFileVersion(const FileName: string): TVersionInfo; var VerMS, VerLS: Cardinal; begin if GetVersionNumbers(FileName, VerMS, VerLS) then begin Result.Major := VerMS shr 16; Result.Minor := VerMS and $FFFF; Result.Release := VerLS shr 16; Result.Build := VerLS and $FFFF; end else begin Result.Major := 0; Result.Minor := 0; Result.Release := 0; Result.Build := 0; end; end; function GetInt(var Str: String): Integer; var DotPos: Integer; begin Result := 0; DotPos := Pos('.', Str); if DotPos > 0 then begin Result := StrToIntDef(Copy(Str, 1, DotPos - 1), 0); Str := Copy(Str, DotPos + 1, Length(Str) - DotPos); end else begin Result := StrToIntDef(Str, 0); Str := ''; end; end; function StrToFileVer(const FileVerStr: String): TVersionInfo; var LocalStr: String; begin LocalStr := FileVerStr; Result.Major := GetInt(LocalStr); Result.Minor := GetInt(LocalStr); Result.Release := GetInt(LocalStr); Result.Build := GetInt(LocalStr); end; function CompareVer(Ver1, Ver2: TVersionInfo): Integer; // Ver1 > Ver2 ====> result > 0 // Ver1 = Ver2 ====> result = 0 // Ver1 < Ver2 ====> result < 0 begin Result := Integer(Ver1.Major) - Integer(Ver2.Major); if Result = 0 then begin Result := Integer(Ver1.Minor) - Integer(Ver2.Minor); if Result = 0 then begin Result := Integer(Ver1.Release) - Integer(Ver2.Release); if Result = 0 then begin Result := Integer(Ver1.Build) - Integer(Ver2.Build); end; end; end; end; function InitializeSetup(): Boolean; var BSVer, UpdateVer, MinAppVer: TVersionInfo; begin // Проверка на совместимость установленной версии с этим апдейтом BSVer := GetFileVersion('MyPath\MyApp.exe'); UpdateVer := StrToFileVer(ExpandConstant('{#MyAppVersion}')); MinAppVer := StrToFileVer(ExpandConstant('{#MinAppVersionForUpdate}')); Result := CompareVer(MinAppVer, BSVer) <= 0; if not Result then begin MsgBox(Format(ExpandConstant('{cm:MyAppIsTooOld}'), [BSVer.Major, BSVer.Minor, BSVer.Release, BSVer.Build, MinAppVer.Major, MinAppVer.Minor, MinAppVer.Release, MinAppVer.Build]), mbError, MB_OK); Exit; end; Result := CompareVer(UpdateVer, BSVer) >= 0; if not Result then begin MsgBox(Format(ExpandConstant('{cm:MyAppIsNewer}'), [BSVer.Major, BSVer.Minor, BSVer.Release, BSVer.Build]), mbError, MB_OK); Exit; end; // =============================================================== end; |
Отправлено: 18:06, 10-03-2014 | #9 |
Ветеран Сообщения: 1270
|
Профиль | Отправить PM | Цитировать Цитата R.i.m.s.k.y.:
Цитата:
Цитата R.i.m.s.k.y.:
Цитата R.i.m.s.k.y.:
Цитата R.i.m.s.k.y.:
|
|||||
Отправлено: 19:32, 10-03-2014 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты 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 | |
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] | Serega | Автоматическая установка приложений | 2651 | 08-11-2010 18:34 |
|