|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9] |
|
|
Скрипты Inno Setup. Помощь и советы [часть 9]
|
|
Ветеран Сообщения: 1274 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Скрипты Inno Setup. Помощь и советы [часть 6] | Скрипты Inno Setup. Помощь и советы [часть 6].7z Скрипты Inno Setup. Помощь и советы [часть 7] | Скрипты Inno Setup. Помощь и советы [часть 7].7z Скрипты Inno Setup. Помощь и советы [часть 8] | Скрипты Inno Setup. Помощь и советы [часть 8].7z |
|
|
Отправлено: 16:09, 04-04-2018 |
|
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Beavimo, думаю так:
Скрытый текст
#define NeedSHA "ad030d5606a2dcfa75ebc425a70730f23e7f07ab"
[Setup] AppName=My Application AppVersion=1.5 CreateAppDir=no [code] function InitializeSetup: Boolean; var FileName: PAnsiChar; begin FileName:=ExpandConstant('{reg:HKLM\SOFTWARE\Code, PATH_APPLICATION}')+'\Test.exe'; if not FileExists(FileName) then begin MsgBox('Установка Прекращена' #13#13 'Установите сначала Программу!', mbCriticalError, MB_OK); Result:=False; end else begin if (GetSHA1OFFile(FileName) = Lowercase('{#NeedSHA}')) then Result:=MsgBox('Программа уже Установлена' #13#13 'Продолжить Установить?', mbInformation, MB_YESNO) = IDYES else Result:=True; end; end; Если нужно скипнуть готовность
#define NeedSHA "ad030d5606a2dcfa75ebc425a70730f23e7f07ab"
[Setup] AppName=My Application AppVersion=1.5 DefaultDirName={pf}\My Application [code] var StartImstall: Boolean; function InitializeSetup: Boolean; var FileName: PAnsiChar; begin FileName:=ExpandConstant('{reg:HKLM\SOFTWARE\Code, PATH_APPLICATION}')+'\Test.exe'; if not FileExists(FileName) then begin MsgBox('Установка Прекращена' #13#13 'Установите сначала Программу!', mbCriticalError, MB_OK); Result:=False; end else begin if (GetSHA1OFFile(FileName) = Lowercase('{#NeedSHA}')) then Result:=MsgBox('Программа уже Установлена' #13#13 'Продолжить Установить?', mbInformation, MB_YESNO) = IDYES else begin StartImstall:=True; Result:=StartImstall; end; end; end; procedure InitializeWizard; begin WizardForm.Show; //без этой строчки не фунциклирует end; function ShouldSkipPage(CurPageID: Integer): Boolean; begin case CurPageID of wpReady,wpInstalling,wpFinished: Result:=False; // если надо, можно пропустить все страницы else Result:=True; end; end; procedure CurPageChanged(CurPageID: Integer); begin if (CurPageID = wpReady) and StartImstall then WizardForm.NextButton.OnClick(nil); end; |
|
Последний раз редактировалось Nemko, 11-01-2020 в 21:59. Причина: Решил дополнить + орфография Отправлено: 21:09, 11-01-2020 | #441 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Nordek:
|
|
|
Отправлено: 22:20, 11-01-2020 | #442 |
|
Пользователь Сообщения: 76
|
Профиль | Отправить PM | Цитировать Nemko, а как склеить два разных CODE???
Code
function InitializeSetup(): Boolean;
var
FileName: PAnsiChar;
begin
FileName:=ExpandConstant('{reg:HKLM\SOFTWARE\Code,PATH_APPLICATION}') +'\Test.exe';
if not FileExists(FileName) then begin
MsgBox('Установка Прекращена', mbCriticalError, MB_OK);
Result:=False;
end
else begin
if (GetSHA1OFFile(FileName) = Lowercase('ad030d5606a2dcfa75ebc425a70730f23e7f07ab')) then
Result:=MsgBox('Программа уже Установлена' #13#13 'Продолжить Установить?', mbInformation, MB_YESNO) = IDYES
else
Result:=True;
end
end;
+ Code
// Подключаем внешнюю библиотеку: #include "FileVersion.iss" function InitializeSetup(): Boolean;
var FileName: String; CurrentVersion, MinVersion: TFileVersion; begin
// Задаём минимальную версию:
FileVersionSetI(MinVersion, 1,3,0,0);
// Имя файла:
FileName := ExpandConstant('{reg:HKLM\SOFTWARE\Code,PATH_APPLICATION}') +'\Test.exe';
if Not FileExists(FileName) then begin
MsgBox('Установите Программу:', mbCriticalError, MB_OK);
Result := False; Exit;
end;
// Файл существует, считываем версию:
FileVersionSetF(CurrentVersion, FileName);
// Сравниваем и решаем что делать:
if FileVersionCompare(CurrentVersion, MinVersion) > -1 then
Result := True
else begin
MsgBox ('Установка Прекращена!' #13#13 'Версия Установленной Программы: ' +FileVersionToStr(CurrentVersion) +#13#13 'Минимальная Версия для Обновления: ' +FileVersionToStr(MinVersion), mbCriticalError, MB_OK);
Result := False; Exit;
end;
// Задаём максимальную версию:
FileVersionSetI(MinVersion, 1,3,0,0);
// Имя файла:
FileName := ExpandConstant('{reg:HKLM\SOFTWARE\Code,PATH_APPLICATION}') +'\Test.exe';
// Файл существует, считываем версию:
FileVersionSetF(CurrentVersion, FileName);
// Сравниваем и решаем что делать:
if FileVersionCompare(CurrentVersion, MinVersion) < 1 then
Result := True
else begin
MsgBox('Установка Прекращена!' #13#13 'Версия Установленной Программы: ' +FileVersionToStr(CurrentVersion) +#13#13 'Максимальная Версия для Обновления: ' +FileVersionToStr(MinVersion), mbCriticalError, MB_OK);
Result := False; Exit;
end;
end;
сама библиотека тут |
|
Последний раз редактировалось Beavimo, 11-01-2020 в 22:55. Отправлено: 22:45, 11-01-2020 | #443 |
|
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Beavimo, держите, модуль FileVersion.iss нужно класть рядом:
Скрытый текст
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={sd}\My Application
[Modules]
#include "FileVersion.iss"
[*Code]
function InitializeSetup: Boolean;
var
FileName: PAnsiChar;
CurrentVersion, MinVersion: TFileVersion;
begin
FileVersionSetI(MinVersion, 1, 3, 0, 0);
FileName:=ExpandConstant('{reg:HKLM\SOFTWARE\Code,PATH_APPLICATION}')+'\Test.exe';
if not FileExists(FileName) then begin
MsgBox('Установка прекращена.'+#13+'Отсутствует файл программы.', mbCriticalError, MB_OK);
Result:=False;
end else begin
FileVersionSetF(CurrentVersion, FileName);
case FileVersionCompare(CurrentVersion, MinVersion) of
-1: begin
MsgBox ('Установка прекращена!'+#13+'Версия установленной программы: '+FileVersionToStr(CurrentVersion)+#13+'Минимальная версия для обновления: '+FileVersionToStr(MinVersion), mbCriticalError, MB_OK);
Result:=False;
end;
0: begin
if (GetSHA1OFFile(FileName)=Lowercase('ad030d5606a2dcfa75ebc425a70730f23e7f07ab')) then Result:=MsgBox('Программа уже установлена!'+#13+'Продолжить установку?', mbInformation, MB_YESNO) = IDYES
else Result:=True;
end;
1: begin
MsgBox('Установка прекращена!'+#13+'Версия установленной программы: '+FileVersionToStr(CurrentVersion)+#13+'Максимальная версия для обновления: '+FileVersionToStr(MinVersion), mbCriticalError, MB_OK);
Result:=False;
end;
end
end;
end;
|
|
Последний раз редактировалось Nemko, 12-01-2020 в 12:47. Причина: Люблю править ошибки Отправлено: 12:45, 12-01-2020 | #444 |
|
Пользователь Сообщения: 76
|
Профиль | Отправить PM | Цитировать Nemko,
Спасибо братюня.... Как думаешь с чего стоить начать изучать программирование? Если начать с Паскаля потом на С+ или сразу с С+? Просто я самоучка, и метод у меня всегда с конца, я буду сравнивать примеры дабы понять смысл, а уже потом полезу в документацию, потому как значения меня пугают, а так если пойму суть как оно работает тогда зацеп пойдет, так вот собствинно дилема в том что суть языков Паскаль и С+ одна, токо значение разные, или принцыпи работы разные? А чуть не забыл! Дело в том что в своем примере, я мого задавать порог минимальной и максимальной версии, а тут банально устанавливается, только на заданую версию. |
|
Последний раз редактировалось Beavimo, 12-01-2020 в 16:56. Отправлено: 16:28, 12-01-2020 | #445 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Beavimo:
|
|
|
Отправлено: 16:41, 12-01-2020 | #446 |
|
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Beavimo, теперь FileVersion.iss можно выкинуть в урну, он не нужен, плюс прикрутил проверку на соответствие PE-формату (типа если открывать не .exe). Так же диапазон версий настраивается в начале, хеш там же.
Скрытый текст
#define AppHash "ad030d5606a2dcfa75ebc425a70730f23e7f07ab"; хэш
#define AppFile "Test.exe"; имя файла
#define MinVers "1.0.0.0"; минимальная версия
#define MaxVers "1.4.0.0"; максимальная
[Setup]
AppName=My Application
AppVersion=1.5
CreateAppDir=no
[CustomMessages]
Error_01=Отсутствует файл {#AppFile}.
Error_02=Минимальная версия для обновления: {#MinVers},%nТекущая версия:
Error_03=Максимальная версия для обновления: {#MaxVers},%nТекущая версия:
Error_04=Файл {#AppFile} не соответствует PE-формату.
Information_01=Программа уже установлена!%nПродолжить установку?
[*Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
DONT_RESOLVE_DLL_REFERENCES = $1;
LOAD_LIBRARY_AS_DATAFILE = $2;
function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function copy_Int(s: String): Integer;
var
i: Integer;
tmpS: String;
begin
for i:=1 to Length(s) do if StrToInt(s[i])<>-1 then tmpS:=tmpS+s[i];
if StrToInt(tmpS)<>-1 then Result:=StrToInt(tmpS);
end;
function Compare(aFile: PAnsiChar; aHash, aMinVers, aMaxVers: String): Boolean;
var
CurrentVersion: String;
begin
if not FileExists(aFile) then begin
MsgBox(CustomMessage('Error_01'), mbCriticalError, MB_OK);
Result:=False;
end else begin
if LoadLibraryEx(aFile, 0, LOAD_LIBRARY_AS_DATAFILE+DONT_RESOLVE_DLL_REFERENCES)=0 then begin
MsgBox(CustomMessage('Error_04'), mbCriticalError, MB_OK);
Exit;
end;
GetVersionNumbersString(aFile, CurrentVersion);
if (copy_Int(CurrentVersion)<=copy_Int('{#MaxVers}')) and (copy_Int(CurrentVersion)>=copy_Int('{#MinVers}')) then begin
if (GetSHA1OFFile(aFile)=Lowercase('{#AppHash}')) then Result:=MsgBox(CustomMessage('Information_01'), mbInformation, MB_YESNO) = IDYES
else Result:=True;
end else begin
if (copy_Int(CurrentVersion)<copy_Int('{#MinVers}')) then MsgBox(CustomMessage('Error_02')+' '+CurrentVersion+'.', mbCriticalError, MB_OK)
else MsgBox(CustomMessage('Error_03')+' '+CurrentVersion+'.', mbCriticalError, MB_OK);
Result:=False;
end;
end;
end;
function InitializeSetup: Boolean;
begin
Result:=Compare(ExpandConstant('{reg:HKLM\SOFTWARE\Code, PATH_APPLICATION}'+'\{#AppFile}'), '{#AppHash}', '{#MinVers}', '{#MaxVers}');
end;
P.S.: на счет языков программирования, решайте сами, но ИМХО лучше (проще) забить на это дело и пойти проветритьса на улицу. |
|
Последний раз редактировалось Nemko, 12-01-2020 в 19:30. Причина: Я неграмотная дурачина Отправлено: 19:28, 12-01-2020 | #447 |
|
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата Nemko:
|
|
|
Отправлено: 14:36, 13-01-2020 | #448 |
|
Пользователь Сообщения: 76
|
Профиль | Отправить PM | Цитировать Nemko, код кривой полюбому.... если у файла Test.exe атрибут только чтение начинается бред, никакие флаги не помогают.
|
|
Отправлено: 07:53, 14-01-2020 | #449 |
|
Пользователь Сообщения: 76
|
Профиль | Отправить PM | Цитировать Вот так все робит
code
function InitializeSetup(): Boolean;
var FileName: String; CurrentVersion, MinVersion, MaxVersion: TFileVersion; begin
FileVersionSetI(MinVersion, 1,1,0,0);
FileName := ExpandConstant('{reg:HKLM\SOFTWARE\Code,PATH_APPLICATION}') +'\Test.exe';
if not FileExists(FileName) then
begin MsgBox('Установка Прекращена:' #13#13 'Файл ('+ExtractFileName(FileName)+') не найден!', mbCriticalError, MB_OK);
Result := False; Exit;
end;
FileVersionSetF(CurrentVersion, FileName);
if FileVersionCompare(CurrentVersion, MinVersion) > -1 then
Result := True else
begin MsgBox ('Установка Прекращена!' #13#13 'Версия Установленной Программы: ' +FileVersionToStr(CurrentVersion) +#13#13 'Минимальная Версия для Обновления: ' +FileVersionToStr(MinVersion), mbCriticalError, MB_OK);
Result := False; Exit;
end;
FileVersionSetI(MaxVersion, 1,5,0,0);
FileName := ExpandConstant('{reg:HKLM\SOFTWARE\Code,PATH_APPLICATION}') +'\Test.exe';
FileVersionSetF(CurrentVersion, FileName);
if FileVersionCompare(CurrentVersion, MaxVersion) < 1 then
Result := True else
begin MsgBox('Установка Прекращена!' #13#13 'Версия Установленной Программы: ' +FileVersionToStr(CurrentVersion) +#13#13 'Максимальная Версия для Обновления: ' +FileVersionToStr(MaxVersion), mbCriticalError, MB_OK);
Result := False; Exit;
end;
begin if (GetSHA1OFFile(FileName) = Lowercase('AD030D5606A2DCFA75EBC425A70730F23E7F07AB')) then
Result:=MsgBox('Обновление уже установлено:' #13#13 'Все равно установить?', mbInformation, MB_YESNO) = IDYES;
end;
end;
|
|
Последний раз редактировалось Beavimo, 14-01-2020 в 17:14. Отправлено: 11:08, 14-01-2020 | #450 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| Скрипты 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 | |
|