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

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

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

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

Ветеран


Contributor


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


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

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


Изменения
Автор: El Sanchez
Дата: 16-02-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] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2
Скрипты Inno Setup. Помощь и советы [часть 3]
Скрипты Inno Setup. Помощь и советы [часть 4]

Отправлено: 03:49, 21-05-2012

 

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

Ветеран


Contributor


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

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


Цитата Serega:
Это именно утечка, вот только не понятно почему... »
Serega, это память, отводимая для функции обратного вызова. Если вызвать CallbackAddr один раз, результат поместить в глобальную переменную и работать потом только с ней, то память скакнет только раз.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:23, 12-10-2012 | #1121



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

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


Аватара для SatHan

Пользователь


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

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


Цитата Serega:
Это именно утечка, вот только не понятно почему... »
тоже самое происходит при закрытии/завершении инсталятора. о чём пытался донести из этого поста. хотя инсталятор простой. сделанный по дефолту мастера инно. ничем не напичкан не каких кодов. инсталятор завершил а из памяти ещё 2-3 секунды выгружается.

Отправлено: 21:00, 12-10-2012 | #1122


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


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

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


Цитата SatHan:
Спасибо.
много чего уж перепробовал, но оставил этот, так как код короче всех. потому шансов на ошибки мизерный. »
Цитата R.i.m.s.k.y.:
+1024
C использованием IsTask можно нарваться на параноидальный антивирь который блокирует вызов сторонних неизвестных неподписанных библиотек и dll (IsTask в их числе, ога), как следствие получить в инсталлере "Ошибка вызова xxx.dll" и краш инсталлера.
Самый рабочий вариант в моем посте. Не помню кто его мне накидал, или Serega или El Sanchez »
Просто может ему надо не только найти, но и "убить процесс"!?
Позволил себе немного доработать этот код, некаких .dll, а работает также как IsTask.
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[*Code]
const
    TH32CS_SNAPPROCESS = $2;
    INVALID_HANDLE_VALUE = -1;

type
    TPROCESSENTRY32 = record
        dwSize, cntUsage, th32ProcessID: DWORD;
        th32DefaultHeapID: Longint;
        th32ModuleID, cntThreads, th32ParentProcessID: DWORD;
        pcPriClassBase: Longint;
        dwFlags: DWORD;
        szExeFile: array [0..259] of char;
    end;
var
ResultCode: Integer;

function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle; external 'CreateToolhelp32Snapshot@kernel32.dll stdcall';
function Process32First(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32First@kernel32.dll stdcall';
function Process32Next(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32Next@kernel32.dll stdcall';
function CloseHandle(hObject: THandle): Boolean; external 'CloseHandle@kernel32.dll stdcall';


function IsProcessRunning(FileName: String): Boolean;
var
    hProcessSnap: THandle;
    pe32: TPROCESSENTRY32;
    szExeFile: String;
    
begin
  hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if hProcessSnap = INVALID_HANDLE_VALUE then Exit;
  pe32.dwSize := sizeof(pe32);
  if not Process32First(hProcessSnap, pe32) then Exit;
  while not Result and Process32Next(hProcessSnap, pe32) do
  begin
    szExeFile := '';
    while not (pe32.szExeFile[Length(szExeFile)] = #0) do szExeFile := szExeFile + pe32.szExeFile[Length(szExeFile)];
    Result := LowerCase(FileName) = LowerCase(szExeFile);
  end;
  CloseHandle(hProcessSnap);
end;


function InitializeSetup(): Boolean;
begin
  Result:= True;
  if IsProcessRunning('notepad.exe') then begin
  if MsgBox('Блокнот запущен.'#13#10'Для продолжения установки нужно закрыть блокнот'#13#10'Закрыть блокнот сейчас?', mbError, MB_YESNO) = IDYES then
  begin
  Exec('cmd', '/C taskkill /f /im notepad.exe /t > nul', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
  end else begin
  MsgBox ('Закройте блокнот и запустите установку заново', mbCriticalError,  MB_OK);
  Result:= False;
end;
end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:54, 13-10-2012 | #1123


Аватара для SatHan

Пользователь


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

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


Respin, Привет.
чего уж скрывать, поделюсь своей мыслью по этому поводу. главное расскажу зачем мне это нужно.
эта фишка как раз расчитана на антивирусы и фаерволы. если инсталятор находит любой запущенный процесс. то в данном случае выдаёт сообщение что есть запущенная программа защиты и закрывается сам инсталятор не прибегая к попытке закрыть антивирусную программу. поскольку это не возможно так как у многой защиты есть самозащита.
я мог бы применить хак на vbs который для меня пару лет назад писали но это будет не верным решением. так как эта штука убивает напрочь любую защиту (даже самозащита не помогает). что не один антивирус, фаервол и пр. пр. после этого не запустятся. что в итоге мой инсталятор будет являться как вредоносное ПО. по этому хотел поступить как можно проще.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:15, 13-10-2012 | #1124


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


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

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


Знающие люди! Если вы когда-нибудь сталкивались или делали такую задачу, помогите, пожалуйста.
Как в кустомном Edit ограничить число символов? То есть чтобы минимум нужно ввести 4 и максимум 12 и после этого сконвертировать текст в UTF 8 (соответственно в файл INI).
читать дальше »
Когда это знаешь - всё просто, а когда ни разу с этим не сталкивался - это кажется недостижимым.

SatHan, Привет.
Я думал тебе надо какую-то другую программу закрыть, без использования сторонних .dll-ок.
А ты значит собираешься "антивири" вырубать Твоими инсталляторами я пользоваться не буду

Последний раз редактировалось Respin, 13-10-2012 в 19:49.


Отправлено: 19:42, 13-10-2012 | #1125


Аватара для SatHan

Пользователь


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

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


Цитата Respin:
А ты значит собираешься "антивири" вырубать»
как раз таки не хочу чтоб инсталятор вырубал защиту. наоборот. нужно чтоб при нахождении защиты инсталятор выдал сообщение что "не может продолжить установку из-за запущенного антивируса, фаервола" и закрывался а защита осталась не тронута.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:49, 13-10-2012 | #1126


Аватара для Mailchik

Пользователь


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

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


Цитата Respin:
Как в кустомном Edit ограничить число символов? То есть чтобы минимум нужно ввести 4 и максимум 12 и после этого сконвертировать текст в UTF 8 (соответственно в файл INI).
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]
var
 TestEdit : TCustomEdit;
 TestCheckBox : TCheckBox;
//----- Конвертирование в UTF-8-----Начало\\
const
    CP_ACP = 0;
    CP_UTF8 = 65001;

function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: PAnsiChar; cbMultiByte: Integer; lpWideCharStr: PAnsiChar; cchWideChar: Integer): Longint;
external 'MultiByteToWideChar@kernel32.dll stdcall';
function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: PAnsiChar; cchWideChar: Integer; lpMultiByteStr: PAnsiChar; cbMultiByte, lpDefaultChar, lpUsedDefaultChar: Integer): Longint;
external 'WideCharToMultiByte@kernel32.dll stdcall';

function StringToWideString(const aStr: String; codePage: Word): String;
var
    len: Integer;
begin
    len := MultiByteToWideChar(codePage, 0, aStr, -1, '', 0);
    if len > 0 then
    begin
        SetLength(Result, (len*2)-2);
        MultiByteToWideChar(codePage, 0, aStr, -1, Result, Length(Result));
    end;
end;

function WideStringToString(const wStr: String; codePage: Word): String;
var
    len: Integer;
begin
    len := WideCharToMultiByte(codePage, 0, wStr, -1, '', 0, 0, 0);
    if len > 0 then
    begin
        SetLength(Result, len-1);
        WideCharToMultiByte(codePage, 0, wStr, -1, Result, Length(Result), 0, 0);
    end;
end;

function SetNickname(Nickname: String; IsConvert: Boolean): String;
begin
    Result := Nickname;
    if IsConvert then Result := WideStringToString(StringToWideString(Result, CP_ACP), CP_UTF8);
end;
//----- Конвертирование в UTF-8-----Конец\\

procedure InitializeWizard;
 begin
  with WizardForm do begin
   OuterNotebook.Hide;
  end;

  TestEdit := TCustomEdit.Create(WizardForm);
  with TestEdit do begin
   Parent := WizardForm;
   Left := ScaleX(150);
   Top := ScaleY(200);
   Width := ScaleX(150);
  end;

  TestCheckBox := TCheckBox.Create(WizardForm);
  with TestCheckBox do begin
   Parent := WizardForm;
   Width := ScaleX(150);
   Left := ScaleX(150);
   Top := ScaleY(230);
   Checked := True;
   Caption := 'Конвертировать в UTF-8';
  end;
end;

function NextButtonClick(CurPageID : Integer) : Boolean;
 begin
  Result := True;
  if (CurPageId = wpWelcome) then if
  (Length(TestEdit.Text) < 4) or (Length(TestEdit.Text) > 12) then begin //Если длина меньше 4 и больше 12 символов
  MsgBox('минимум нужно ввести 4 и максимум 12', mbInformation, MB_OK);  //то переход не выполнится
  Result := False end else begin
  SetIniString('Settings', 'PlayerName', SetNickname(TestEdit.Text, TestCheckBox.Checked), ExpandConstant('{src}\test.ini')); //конвертирование в utf-8
  end;
end;
Пример конвертирования в utf-8 заимствован у El Sanchez'а.

Последний раз редактировалось Mailchik, 13-10-2012 в 23:32.

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

Отправлено: 23:27, 13-10-2012 | #1127


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


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

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


Здравствуйте! У меня инсталл с 3-мя компонентами и один из этих компонентов с флагом "фиксирован( fixed)", так как сделать так, что-бы если этот компонент уже установлен при первой инсталляции, то все последующие инсталляции он не устанавливался, а пропускался, так как это отнимает время! P.S. использую архивы фри арк и скрипт исДоне! Спасибо!

Отправлено: 02:51, 14-10-2012 | #1128


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


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

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


Mailchik, Благодарю.

Цитата SARATOVSKY:
то все последующие инсталляции он не устанавливался, а пропускался »
Не совсем понятно, какие последующие инсталляции... Если пользователь удалит программу, то его же вновь придётся установить.
Как вариант: К нему нужно прописать ключ реестра (и потом не удалять этот ключ)...
читать дальше »
Код: Выделить весь код
[Components]
Name: "Component"; Description: "Мой компонент"; Flags: fixed; Check: MyComponent;

[Registry]
Root: HKLM; Subkey: "Software\MyProgram\MyComponent";

function MyComponent: Boolean;
begin
  if RegKeyExists(HKLM, 'Software\MyProgram\MyComponent;')
  then
    Result:= False;
end;

Если ключ имеется, то компонент не будет видно вообще.
P.S. На FreeArc-ке и ISDone не проверял (будет ли он архив распаковывать или нет).

Последний раз редактировалось Respin, 14-10-2012 в 22:24.

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

Отправлено: 10:19, 14-10-2012 | #1129


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


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

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


Respin, Спасибо!

Отправлено: 15:41, 14-10-2012 | #1130



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты 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
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход