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

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

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

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

Ветеран


Contributor


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


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

Профиль | Отправить 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

 

Аватара для Johny777

Ветеран


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

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


El Sanchez,
помню спрашивал как быстро определить размер папки (те для меня пример ...\Inno Setup 5\Scripts\Dobrov\DirSizeCal.iss работает слишком медленно)

нашёл пример использующий объект FileSystemObject http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
на форуме http://forum.vingrad.ru/forum/topic-84976/unread-1.html

результат - функция (здесь вывод в мегабайтах под мои нужды) :
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[  code]
function GetFolserSize(path:string):Integer;
var
  oFS: Variant;
begin
  oFS := CreateOleObject('Scripting.FileSystemObject');
  Result := oFS.GetFolder(path).Size div (1024*1024);
end;

procedure InitializeWizard();
begin                     
  MsgBox(IntToStr(GetFolserSize('C:\Program Files (x86)')), mbInformation, MB_OK);
end;
в данном случае папку Program Files (x86) у меня (пока что размером почти 2 гига после переустановки винды) посчитала за секунду
более наглядный пример:
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[  code]
function GetFolserSize(path:string):Extended;
var
  oFS: Variant;
begin
  oFS := CreateOleObject('Scripting.FileSystemObject');
  Result := oFS.GetFolder(path).Size;
end;


function StrFormatByteSize64(qdw: Currency; var pszBuf: Char; cchBuf: UINT): PAnsiChar; external 'StrFormatByteSize64A@shlwapi.dll stdcall';

function BytesToSize(Bytes: Extended): String;
var
    pszBuf: array [0..15] of Char;
begin
    try
        Result := StrFormatByteSize64(Abs(Bytes div 1E4), pszBuf[0], sizeof(pszBuf));
    except end;
end;

procedure InitializeWizard();
begin                     
  MsgBox(BytesToSize(GetFolserSize('C:\Program Files (x86)')), mbInformation, MB_OK);
end;

но вот при попытке посчитать C:\Windows вылетает с ошибкой на Result := oFS.GetFolder(path).Size div (1024*1024);
читать дальше »

---------------------------
Runtime Error
---------------------------
Line 14:

Exception: : .
---------------------------
ОК
---------------------------

может папка слишком большого размера и он не может посчитать или я функцию криво записал
с другой стороны папку с видео размером больше 250 гигов посчитала корректно и тоже быстро
в общем хотелось бы узнать в чём причина ошибки ну и как следствие - улучшение/исправление

в качестве производных:
размер файла:
читать дальше »
Код: Выделить весь код
function GetFileSize(FilePath:string):Extended;
var
  oFS: Variant;
begin
  oFS := CreateOleObject('Scripting.FileSystemObject');
  Result := oFS.GetFile(FilePath).Size;
end;


function StrFormatByteSize64(qdw: Currency; var pszBuf: Char; cchBuf: UINT): PAnsiChar; external 'StrFormatByteSize64A@shlwapi.dll stdcall';

function BytesToSize(Bytes: Extended): String;
var
    pszBuf: array [0..15] of Char;
begin
    try
        Result := StrFormatByteSize64(Abs(Bytes div 1E4), pszBuf[0], sizeof(pszBuf));
    except end;
end;

procedure InitializeWizard();
begin                     
  MsgBox(BytesToSize(GetFileSize('C:\Windows\regedit.exe')), mbInformation, MB_OK);
end;


версия файла:
читать дальше »
Код: Выделить весь код
function FileVersion(FilePath:string):string;
var
  oFS: Variant;
begin
  oFS := CreateOleObject('Scripting.FileSystemObject');
  Result := oFS.GetFileVersion(FilePath);
end;


procedure InitializeWizard();
begin                     
  MsgBox((FileVersion('C:\Windows\regedit.exe')), mbInformation, MB_OK);
end;


получение буквы жёсткого диска на которм лежит файл:
читать дальше »
Код: Выделить весь код
function GetFolserSize(FilePath:string):string;
var
  oFS: Variant;
begin
  oFS := CreateOleObject('Scripting.FileSystemObject');
  Result := oFS.GetDriveName(FilePath);
end;


procedure InitializeWizard();
begin                     
  MsgBox((GetFolserSize('C:\Windows\regedit.exe')), mbInformation, MB_OK);
end;


генерирование уникального имени папки для использования её в %Temp%
читать дальше »
Код: Выделить весь код
function CreateFolserUniqueName:string;
var
  oFS: Variant;
begin
  oFS := CreateOleObject('Scripting.FileSystemObject');
  Result := oFS.GetTempName;
end;


procedure InitializeWizard();
begin
  MsgBox(CreateFolserUniqueName, mbInformation, MB_OK);
end;


альтернатива функции DirExists:
читать дальше »
Код: Выделить весь код
function FolderExists(Folder:string):boolean;
var
  oFS: Variant;
begin
  oFS := CreateOleObject('Scripting.FileSystemObject');
  Result := oFS.FolderExists(Folder);
end;


procedure InitializeWizard();
begin
  if FolderExists('C:\setup') then MsgBox('ok', mbInformation, MB_OK);
end;


проверка наличия жёсткого диска по букве:
читать дальше »
Код: Выделить весь код
function DriveExists(Drive:string):boolean;
var
  oFS: Variant;
begin
  oFS := CreateOleObject('Scripting.FileSystemObject');
  Result := oFS.DriveExists(Drive);
end;


procedure InitializeWizard();
begin
  if DriveExists('C') then MsgBox('ok', mbInformation, MB_OK);
end;

Последний раз редактировалось Johny777, 02-10-2012 в 04:09.

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

Отправлено: 01:11, 02-10-2012 | #1061



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

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


Аватара для SatHan

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


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

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


привет. при установке извлекаются некоторые файлы. из них exe bmp итд. скажите. можно сделать чтоб они работали внутри инсталятора. или хотяб брались из файла x.tmp который извлекается в %temp% а не в чистом виде?

Отправлено: 10:28, 02-10-2012 | #1062


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

Ветеран


Contributor


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

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


Цитата Johny777:
но вот при попытке посчитать C:\Windows вылетает с ошибкой на Result := oFS.GetFolder(path).Size div (1024*1024); »
Johny777, вот же ж двоешник.
1. Проверяй в функции наличие папки. Исключение как раз из-за этого.
2. Размер Integer мал для "толстых" папок, нужно, например, Extended.
Код: Выделить весь код
function GetFolserSize(path: String): Extended;
var
    oFS: Variant;
begin
    try
        if not DirExists(path) then Exit;
        oFS := CreateOleObject('Scripting.FileSystemObject');
        Result := oFS.GetFolder(path).Size/1024/1024;
    except
        Result := 0;
    end;
end;

//два знака после запятой
MsgBox(FormatFloat('#0.00', GetFolserSize('C:\Windows')), mbInformation, MB_OK);
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:33, 02-10-2012 | #1063


Аватара для Mailchik

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


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

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


SatHan,
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
BitmapResource=Test:compiler:WizModernImage-IS.bmp

[Code]
procedure InitializeWizard;
 begin
  WizardForm.WizardBitmapImage.Bitmap.LoadFromResourceName(HInstance, '_IS_Test');
end;

Последний раз редактировалось Mailchik, 02-10-2012 в 15:45. Причина: !

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

Отправлено: 15:44, 02-10-2012 | #1064


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

Ветеран


Contributor


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

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


Цитата Johny777:
также вот процедура перемещения файлов
просьба проверить нигде ли я не накосячил: »
Johny777, первый параметр метода MoveFile может содержать групповые символы:
Код: Выделить весь код
procedure MoveFiles(SourceFolder, Mask, DestFolder: String);
var
    oFS: Variant;
begin
    try
        if not DirExists(SourceFolder) or not DirExists(DestFolder) then Exit;
        oFS := CreateOleObject('Scripting.FileSystemObject');
        oFS.MoveFile(AddBackslash(RemoveBackslash(SourceFolder)) + Mask, DestFolder);
    except
        //ShowExceptionMessage;
    end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:34, 02-10-2012 | #1065


Аватара для Raf-9600

Старожил


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

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


Ктонить может показать пример кода, который бы делал так чтобы при наведении курсора на определённый компонент, возникал Hint (при том для каждого компонента свой)?

Последний раз редактировалось Raf-9600, 04-10-2012 в 15:20.


Отправлено: 14:54, 04-10-2012 | #1066


Аватара для Gnom_aka_Lexander

Ветеран


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

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


Raf-9600, как-то так, только мне не очень нравится, как это работает, может старшие товарище подскажут, как сделать лучше.
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Components]
Name: std; Description: Стандартная; Flags: exclusive disablenouninstallwarning; Types: custom compact full
Name: std\a; Description: Анси; Flags: exclusive disablenouninstallwarning; Types: custom compact full
Name: std\u; Description: Юникод; Flags: exclusive disablenouninstallwarning; Types: custom compact full

Name: ext; Description: Китаяса; Flags: exclusive disablenouninstallwarning; Types: custom compact full
Name: ext\a; Description: Анси; Flags: exclusive disablenouninstallwarning; Types: custom compact full
Name: ext\u; Description: Юникод; Flags: exclusive disablenouninstallwarning; Types: custom compact full

[*code]
procedure HintStr(Sender: TObject; X: Integer; Y: Integer; Index: Integer; Area: TItemArea);
begin
  with WizardForm do
    with ComponentsList do
  case Index of
    0 : Hint := 'Стандартная';
    1 : Hint := 'Стандартная Анси';
    2 : Hint := 'Стандартная Юникод';
    3 : Hint := 'Китаяса';
    4 : Hint := 'Китаяса Анси';
    5 : Hint := 'Китаяса Юникод';
  else
    Hint := 'Наведите на компонент для отображения подсказки';
  end;
end;

procedure InitializeWizard();
begin
  with WizardForm do
  begin
    with ComponentsList do
    begin
      ShowHint := True;
      Hint := '';
      OnItemMouseMove := @HintStr;
    end;
  end;
end;
Скорей всего на стандартной версии не будет работать.

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.

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

Отправлено: 20:05, 04-10-2012 | #1067


Аватара для Raf-9600

Старожил


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

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


Цитата Gnom_aka_Lexander:
как-то так, только мне не очень нравится, как это работает, может старшие товарище подскажут, как сделать лучше. »
После того как первая подсказка исчезает, больше ни одна не появляется

Отправлено: 13:53, 05-10-2012 | #1068


Аватара для Shegorat

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


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

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


Цитата Raf-9600:
После того как первая подсказка исчезает, больше ни одна не появляется »
Как вариант можно сделать так
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Components]
Name: std; Description: Стандартная; Flags: exclusive disablenouninstallwarning; Types: custom compact full
Name: std\a; Description: Анси; Flags: exclusive disablenouninstallwarning; Types: custom compact full
Name: std\u; Description: Юникод; Flags: exclusive disablenouninstallwarning; Types: custom compact full

Name: ext; Description: Китаяса; Flags: exclusive disablenouninstallwarning; Types: custom compact full
Name: ext\a; Description: Анси; Flags: exclusive disablenouninstallwarning; Types: custom compact full
Name: ext\u; Description: Юникод; Flags: exclusive disablenouninstallwarning; Types: custom compact full

[code]
var
  LastIndex: Integer;
  
procedure HintStr(Sender: TObject; X: Integer; Y: Integer; Index: Integer; Area: TItemArea);
begin
  if Index<>LastIndex then begin
    LastIndex:= Index;
    WizardForm.ComponentsList.ShowHint:= False;
    WizardForm.ComponentsList.Hint:= '';
    Exit;
  end;
  
  with WizardForm.ComponentsList do
  case Index of
    0 : Hint := 'Стандартная';
    1 : Hint := 'Стандартная Анси';
    2 : Hint := 'Стандартная Юникод';
    3 : Hint := 'Китаяса';
    4 : Hint := 'Китаяса Анси';
    5 : Hint := 'Китаяса Юникод';
  else
    Hint := 'Наведите на компонент для отображения подсказки';
  end;
  WizardForm.ComponentsList.ShowHint:= True;
end;

procedure InitializeWizard();
begin
  with WizardForm do
  begin
    with ComponentsList do
    begin
      ShowHint := True;
      Hint := '';
      OnItemMouseMove := @HintStr;
    end;
  end;
end;

-------
Как много дел считались невозможными, пока они не были осуществлены.

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

Отправлено: 14:33, 05-10-2012 | #1069


Аватара для Raf-9600

Старожил


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

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


Цитата Shegorat:
Как вариант можно сделать так »
Самое оно! Благодарю.
Я бы ещё хотел узнать, можно ли сделать так, чтобы текст определённого Hint'а менялся в зависимости от выбранных компонентов?
Т.е. чтобы допустим если выбран компонент "ext\u" то у "ext\a" подсказка менялась на другую?

Отправлено: 16:10, 05-10-2012 | #1070



Компьютерный форум 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




 
Переход