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

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

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

Ветеран


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


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

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


Изменения
Автор: jameszero
Дата: 08-11-2010
Описание: тема закрыта
Лимит страниц.
Тема закрыта.
Продолжение по ссылке Скрипты Inno Setup. Помощь и советы [часть 3]




Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;
    Предыдущая версия: 5.3.0 [07.04.2009] - Скачать (зеркало) | Русификатор (зеркало);

  • Inno Script Generator - ещё один редактор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать;

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы. Официальный сайт - недоступен.
    Последняя версия: 2.0.8 [12.11.2006] - Страница с зеркалами;

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • InnoSetup Script Joiner - Программа для объединения нескольких скриптов InnoSetup в один;

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.3 [11.09.2009] - Скачать;


Ссылка на архив предыдущей темы (также можно скачать из вложения)

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Отправлено: 22:06, 23-08-2009

 

Аватара для A1EXXX

Старожил


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

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


Помогите разобраться: есть простенький скрипт с запросом второго диска для распаковки FreeArc:
читать дальше »

Цитата:
#define MyAppName "Test"
#define MyAppVerName "Test"
#define MyAppExeName "Test.exe"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppName}
DefaultDirName={pf}\{#MyAppName}
DirExistsWarning=no
;DisableReadyPage=true
ShowLanguageDialog=auto
OutputBaseFilename=setup
OutputDir=.
UninstallDisplayIcon={app}\{#MyAppExeName}
DefaultGroupName={#MyAppName}
InternalCompressLevel=none
Compression=none

[UninstallDelete]
Type: filesandordirs; Name: {app}

[Languages]
Name: eng; MessagesFile: compiler:Default.isl
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: C:\Program Files\FreeArc\bin\Arc.exe; DestDir: {tmp}; Flags: dontcopy

[CustomMessages]
ExtrError=Произошла ошибка во время извлечения данных. Установка будет прервана.

[code]
var
SecondProgressBar: TNewProgressBar;

procedure InitializeWizard();
begin
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Top:=ScaleY(81);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.StatusLabel.Width:=ScaleX(262);
WizardForm.ProgressGauge.Top:=ScaleY(100);
WizardForm.ProgressGauge.Left:=ScaleX(155);
WizardForm.ProgressGauge.Width:=ScaleX(262);

SecondProgressBar := TNewProgressBar.Create(WizardForm);
with SecondProgressBar do
begin
Parent := WizardForm.InstallingPage;
Left := ScaleX(0);
Top := ScaleY(100);
Width := ScaleX(150);
Height := ScaleY(21);
Min := 0;
Max := 13; //задается как (кол-во распаковываемых архивов * 3) + 1
end;
end;

procedure PlsInsertNextDisk(num: integer; CheckedFile: string);
var Capt:string;
begin
CheckedFile:=ExpandConstant(CheckedFile);
if not FileExists(CheckedFile) then begin
Capt:='Пожалуйста, вставьте диск %n, содержащий файл %f и нажмите ОК для продолжения установки.';
StringChange(Capt, '%n', inttostr(num));
StringChange(Capt, '%f', ExtractFileName(CheckedFile));
MsgBox(Capt, mbInformation, MB_OK);
PlsInsertNextDisk(num, CheckedFile);
end;
end;

procedure ExtractArc(arcArchName,arcDestDir:string);
var ResCode:integer;
begin
WizardForm.StatusLabel.Caption:=SetupMessage(msgStatusExtractFiles);
Exec(ExpandConstant('{tmp}\arc.exe'), 'x '+AddQuotes(ExpandConstant(arcArchName))+' -y -dp'+AddQuotes(ExpandConstant(arcDestDir)), '', SW_HIDE, ewWaitUntilTerminated, ResCode);
if (ResCode <> 0) then begin
MsgBox(ExpandConstant('{cm:ExtrError}'), mbCriticalError, MB_OK);
SecondProgressBar.Hide;
DelTree(ExpandConstant('{app}'), True, True, True);
Abort;
end else
SecondProgressBar.Position:= SecondProgressBar.Position+3
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then begin
WizardForm.StatusLabel.Caption:=SetupMessage(msgStatusExtractFiles);
ExtractTemporaryFile('arc.exe');
SecondProgressBar.Position:=SecondProgressBar.Position+1;

ExtractArc('{src}\data-1.arc','{app}\');
ExtractArc('{src}\data-2.arc','{app}\');

PlsInsertNextDisk(2, '{src}\data-3.arc'); //если data4.arc не найден в корне диска, просим второй диск
ExtractArc('{src}\data-3.arc','{app}\');
ExtractArc('{src}\data-4.arc','{app}\');
PlsInsertNextDisk(1, '{src}\data-1.arc'); //снова просим первый диск
end;
end;

Если пытаюсь установить в папку по умолчанию (именно этого скрипта) - не распаковывается, ошибка! Если, например, меняю путь на D:\Games\Test - распаковывается!
Теперь самое ужасное: использую этот скрипт для игры - ни в какую папку, ни на какой диск распаковка не идёт!!! Пробовал на одних и тех же архивах! Help!
Serega, как-то пробовал ваш скрипт FreeArc - вообще не распаковывалось... что я не так делаю?
З.Ы. Окно во время распаковки не кликабельное, т.е. свернуть, переместить нельзя, - это можно как-то исправить???

Последний раз редактировалось A1EXXX, 23-11-2009 в 19:19.


Отправлено: 18:35, 23-11-2009 | #471



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

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


Аватара для A1EXXX

Старожил


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

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


Inno Setup ISCmplr 5.3.6 (build 091123) от ResTools
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:52, 23-11-2009 | #472


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


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

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


Цитата Serega:
Пример кода »
у меня в Form Designer нету такой закладки, есть
Редактор кода но он показывает только:
Код: Выделить весь код
var
  Memo1: TMemo;
  ListBox1: TListBox;
  CheckBox1: TCheckBox;
а вот координаты и другие свойства объектов - нету, где их взять?
Версия 1.1.2c

нашел, оказывается в настройках нужно было поставить... Все спасибо!

Отправлено: 19:03, 23-11-2009 | #473


Аватара для A1EXXX

Старожил


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

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



Отправлено: 20:24, 23-11-2009 | #474


Ветеран


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

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


Цитата A1EXXX:
Помогите разобраться: »
Лишний бэкслеш, т.е. надо так - ExtractArc('{src}\data-1.arc','{app}'); и т.д.

Цитата A1EXXX:
как-то пробовал ваш скрипт FreeArc - вообще не распаковывалось... что я не так делаю? »
У меня всё нормально распаковывается...

Цитата A1EXXX:
Окно во время распаковки не кликабельное, т.е. свернуть, переместить нельзя, - это можно как-то исправить??? »
При использовании ewWaitUntilTerminated окно и будет не кликабельным...
Выход из ситуации - это запускать распаковку без ожидания, плюс добавить процедуру в которой проверять в цикле список процессов и если arc.exe есть, то делать ожидание, скажем 200-300 мс.
Процесс можно проверять через ISTask.dll или через функцию IsProgRunning, из этого скрипта (правда работает не на всех версиях Windows):
Пример
Код: Выделить весь код
; В Диспетчере задач, вкладка Процессы, присутствует MyProc.exe.
; Как его остановить программно, аналогично тому, как это делает кнопка Завершить процесс в Диспетчере?
; Данный пример показывает, как проверить работает ли программа и если необходимо, то завершить её.
; Не уверен, что будет работать на всех версиях Windows...

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
VersionInfoCopyright=Serega, serg_0675@mail.ru

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

[Code]
var
  ResultCode: Integer;

function IsProgRunning(ProgName: string): Boolean;
// функция определяет, запущенно ли приложение
var
  Size: Integer;
begin
  Result:= False;
  Exec('cmd', '/c tasklist /fi "IMAGENAME eq ' + ProgName + '" >"' +
    ExpandConstant('{tmp}\RunList"'), '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
  if FileSize(ExpandConstant('{tmp}\RunList'), Size) then
    if Size > 0 then Result:= True;
end;

function CloseProg(ProgName: string; Child: Boolean): Boolean;
// функция завершает работающее приложение со всеми дочерними (Child) процессами
var
  Tree: string;
begin
  Result:= False;
  if Child then Tree:= ' /t' else Tree:= '';
  Exec('cmd', '/c taskkill /f' + Tree + ' /im ' + ProgName, '', SW_HIDE,
    ewWaitUntilTerminated, ResultCode);
  if not IsProgRunning(ProgName) then Result:= True;
end;

function InitializeSetup(): Boolean;
begin
  Result:= False;
  if Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOWMINIMIZED, ewNoWait, ResultCode) then
   if IsProgRunning('notepad.exe') then
    if MsgBox('Обнаружена работающая программа notepad. Закрыть её?',
      mbConfirmation, MB_YESNO) = IDYES then
    if CloseProg('notepad.exe', True) then
      begin
        MsgBox('Программа успешно завершена.', mbInformation, MB_OK)
        Result:= True;
      end
    else MsgBox('К сожалению, программу завершить не удалось.', mbInformation, MB_OK);
end;

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

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

Отправлено: 22:07, 23-11-2009 | #475


Аватара для A1EXXX

Старожил


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

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


Убрал, теперь всё как по маслу
Буду пробовать добавить кликабельность
Serega, как всегда на высоте, респект

Нифига не получается

Последний раз редактировалось A1EXXX, 23-11-2009 в 22:34.


Отправлено: 22:07, 23-11-2009 | #476


Ветеран


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

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


Цитата A1EXXX:
не получается »
а конкретней, что именно не получается?

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Отправлено: 22:48, 23-11-2009 | #477


Аватара для A1EXXX

Старожил


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

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


Serega, не знаю, как применить это в моём случае... Очень нужна помощь гуру


Можно ли в этом коде:
Цитата:
[Dirs]
Name: "{app}"; Attribs: system; AfterInstall: CreateIni();

[Files]
Source: C:\icon.ico; DestDir: {app}

[code]
procedure CreateIni();
begin
SaveStringsToFile(ExpandConstant('{app}\Desktop.ini'), ['[.ShellClassInfo]',
'IconFile=icon.ico',
'IconIndex=0'], False)
end;
добавить файлу Desctop.ini атрибуты system и hidden. Альтернативку нашёл: Source: "C:\Desktop.ini"; DestDir: "{app}"; Attribs: system hidden, но создавать файл каждый раз вручную надоедает

Последний раз редактировалось A1EXXX, 24-11-2009 в 02:29.


Отправлено: 22:55, 23-11-2009 | #478


Аватара для Berline

Старожил


Автор проектов


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

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


Снова я! Наверн боян... наверн примитив...
Сколько бы я не добавлял в секцию [Tasks] элементы, по дефолту всегда галочка стоит... Как ее снять? т.е. чтоб пир инсталле галочка не стояла на той задаче, на котороу ненад...
А итакж добавляю в [Run] программу, чтоб на последней странице была галочка - тож по дефолту она стоит...

-------
Ни что так не стимулирует повысить стабильность системы как приближающийся отпуск...


Отправлено: 12:07, 24-11-2009 | #479


Аватара для A1EXXX

Старожил


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

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


Berline, добавь после каждого Flags: unchecked
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:26, 24-11-2009 | #480



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Inno Setup .:[все вопросы]:. Mchik Автоматическая установка приложений 1329 23-08-2009 20:13
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход