Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Inno Setup (создание инсталяционных пакетов)

Модерирует : gyra, Maz

Widok (25-09-2007 17:33): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

Snake_60



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
[s];.:: Snake 60 ::. "Русификатор для LounchIt NOW! Plus 2006".
 
#include "SHFileOperation.iss"
 
[Setup]
;Название программы - инсталлятора, а также заголовок инсталлятора, (пожеланию можно версию указать):
AppName=Русификатор для LaunchIt NOW! Plus 2006
;Версия программы - инсталлятора, (пожеланию можно указать - название + версию):
AppVerName=Русификатор для LaunchIt NOW! Plus 2006
;Авторское право (в свойствах выходного файла компилятора):
AppCopyright=.:: Snake 60 ::.
;Версия программы - инсталлятора (в свойствах выходного файла компилятора):
VersionInfoVersion=1.0
;Информация об компании (в свойствах выходного файла компилятора):
VersionInfoCompany=.:: Snake 60 ::. RUS INC. (C) 2006-2007
;Описание (в свойствах выходного файла компилятора):
VersionInfoDescription=Русификатор для LaunchIt NOW! Plus 2006
;Используется для определения содержимого вкладки "Поддержка" диалога Установка\Удаление программ на Панели управления в Windows 2000/XP.
AppPublisher=Packaged by .:: Snake 60 ::.
;Директория установки для программы - инсталлятора:
DefaultDirName={pf}\LaunchIt NOW! Plus
;Название выходного файла компилятора:
OutputBaseFilename=launchit.now!.plus.2006.russian.translation-setup
;Директория выходного файла компилятора:
OutputDir=Output
;Имя\Место расположения файла с лицензией в формате ".txt" или ".rtf", который отображается после нажатия на кнопку далее.
LicenseFile=tmp_files\License.rtf
;Имя\Место расположения файла с информацией в формате ".txt" или ".rtf", который отображается после лицензионного соглашенья.
InfoBeforeFile=tmp_files\Readme_rus.rtf
;Метод сжатия данных в инсталляторе:
Compression=lzma/ultra
;Созидание непрерывного архива:
SolidCompression=yes
;Определяет новую иконку для программы - инсталлятора.
SetupIconFile=data_for_iss\orange-install.ico
;Определяет картинку в формате ".bmp", которая будет отображаться в левой части окна инсталлятора. Размер картинки "164x314" пикселей.
WizardImageFile=data_for_iss\WizardImage.bmp
;Определяет картинку в формате ".bmp", которая будет отображаться в правом верхнем углу окна мастера. Максимальный размер картинки 55х55 пикселей.
WizardSmallImageFile=data_for_iss\WizardSmallImage.bmp
;Означает создавать ли автоматический деинсталлятор. При значении "yes" он создается. При значении "no" автоматическое удаление будет невозможно, так что пользователь должен будет вручную удалять программу.
Uninstallable=yes
;Изменяет иконку на странице "Установка и удаление программ" в Панели управления
UninstallDisplayIcon={app}\orange-uninstall.ico
;Место расположения деинсталлятора (по умолчанию значение - UninstallFilesDir={app})
UninstallFilesDir={app}\Install_Rus
;Режим создания "лога" для деинсталлятора
UninstallLogMode=overwrite
;При значении "yes" файлы инсталлятора (параметры секции [Setup]) будут зашифрованы с помощью ARCFOUR с 128-битным ключом, сгенерированным из директивы Password секции [Setup]. Поддержка шифрования не включена в Inno Setup напрямую, ее следует скачать и установить отдельно. Информацию об этом можно найти на английском сайте программы в разделе Downloads файл "ISCrypt.dll". Модуль ISCrypt.dll должен находиться в папке с компилятором.
Encryption=yes
;Пароль для нашей шифровки! Не добавляйте Unicode символы! Не все понимаются инсталлятором. Теперь инсталлятор в безопасности;). Имейте в виду, что шифруются только основные файлы.Следует еще запомнить, что в тех случаях, когда вы извлекаете во временную папку внешние файлы, не забудьте установить для них флаг noencryption в секции [Files].
Password=**Snake*60**
;Запрос на подверждение продолжения установки
DisableStartupPrompt=no
;При установки в существующую директории появится сообщение "Продолжить туда установку". Значение no не будет выдавать этого сообщения
DirExistsWarning=no
 
;Нас, возможно, не устраивает шрифт инсталлятора по умолчанию - исправим это:
;-Изменение размера шрифта может повлечь изменение размера самого инсталлятора - будьте осторожны.
[LangOptions]
LanguageName=Russian
LanguageID=$0419
LanguageCodePage=1251
DialogFontName=Tahoma
DialogFontSize=8
WelcomeFontName=Tahoma
WelcomeFontSize=11
TitleFontName=Arial
TitleFontSize=29
CopyrightFontName=Arial
CopyrightFontSize=8
 
;Язык всех диалогов в инсталляторе:
[Languages]
Name: russian; MessagesFile: Russian.isl
 
;Надпись внизу диалогов
[Messages]
;Надпись-статуса во время установки. По умолчанию "Распаковка файлов..."
StatusExtractFiles=Распаковка файлов русификации...
BeveledLabel=- Russian Translation by .:: Snake 60 ::. - [ALL-SofT.NeT.RU - TeaM]
 
;Выбор дополнительный задач\создание ярлыков:
[Tasks]
;Дополнительные задачи - создание резервной копии файлов
Name: src; Description: Создать резервную копию оригинальных файлов
 
[Files]
;Обновленныe файлы
;Флаг BeforeInstall: CreateBackup; обязателен создать резервную копию через procedure CreateBackup;
Source: app_rus_data\lnp.exe; DestDir: {app}; BeforeInstall: CreateBackup; Flags: uninsneveruninstall skipifsourcedoesntexist overwritereadonly ignoreversion
Source: app_rus_data\lnpshellext.dll; DestDir: {app}; BeforeInstall: CreateBackup; Flags: uninsneveruninstall skipifsourcedoesntexist overwritereadonly ignoreversion
Source: app_rus_data\cleanup.exe; DestDir: {app}\Add-Ons; BeforeInstall: CreateBackup; Flags: uninsneveruninstall skipifsourcedoesntexist overwritereadonly ignoreversion
Source: app_rus_data\revpwd.exe; DestDir: {app}\Add-Ons; BeforeInstall: CreateBackup; Flags: uninsneveruninstall skipifsourcedoesntexist overwritereadonly ignoreversion
Source: app_rus_data\shutdown.exe; DestDir: {app}\Add-Ons; BeforeInstall: CreateBackup; Flags: uninsneveruninstall skipifsourcedoesntexist overwritereadonly ignoreversion
Source: data_for_iss\orange-uninstall.ico; DestDir: {app}; BeforeInstall: CreateBackup; Flags: uninsneveruninstall skipifsourcedoesntexist overwritereadonly ignoreversion
 
;TMP - файлы
Source: tmp_files\BASSMOD.dll; DestDir: {tmp}; Flags: dontcopy noencryption
Source: tmp_files\music.xm; DestDir: {tmp}; Flags: dontcopy noencryption
Source: tmp_files\ISTask.dll; DestDir: {tmp}; Flags: dontcopy noencryption
 
;Удаление папок или файлов при деинсталяции
[UninstallDelete]
Type: filesandordirs; Name: {app}\Install_Rus
 
[Run]
;Запуск обновленного файла
Filename: {app}\lnp.exe; Description: Запустить русскую версию LaunchIt NOW! Plus 2006; Flags: nowait postinstall skipifsilent
 
 
[Code]
var
  str: string;
  MyArray: array of Char;
  RestoreDir: TButton;
 
const
  BASS_MUSIC_RAMP = 1; // (только для Fast Tracker .xm)
  BASS_MUSIC_RAMPS = 2; // (только для Fast Tracker .xm)
  BASS_MUSIC_LOOP = 4; // повторение
  BASS_MUSIC_FT2MOD = 16; // играть .MOD как FastTracker 2
  BASS_MUSIC_PT1MOD = 32; // играть .MOD как ProTracker 1
  BASS_MUSIC_SURROUND = 512; // звучание surround
  BASS_MUSIC_SURROUND2 = 1024; // звучание surround (режим 2)
 
function BASSMOD_Init(device: Integer; freq, flags: DWORD): Boolean;
  external 'BASSMOD_Init@files:BASSMOD.dll stdcall delayload';
 
function BASSMOD_MusicLoad(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): Boolean;
  external 'BASSMOD_MusicLoad@files:BASSMOD.dll stdcall delayload';
 
procedure BASSMOD_MusicFree();
  external 'BASSMOD_MusicFree@files:BASSMOD.dll stdcall delayload';
 
function BASSMOD_MusicPlay(): Boolean;
  external 'BASSMOD_MusicPlay@files:BASSMOD.dll stdcall delayload';
 
function BASSMOD_MusicPause(): Boolean;
  external 'BASSMOD_MusicPause@files:BASSMOD.dll stdcall delayload';
 
function BASSMOD_MusicStop(): Boolean;
  external 'BASSMOD_MusicStop@files:BASSMOD.dll stdcall delayload';
 
procedure BASSMOD_Free();
  external 'BASSMOD_Free@files:BASSMOD.dll stdcall delayload';
 
function KillTask(ExeFileName: string): Integer;
  external 'KillTask@files:ISTask.dll stdcall delayload';
 
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
  external 'RunTask@files:ISTask.dll stdcall delayload';
 
procedure ButtonOnClick(Sender: TObject);
begin
  WizardForm.DirEdit.Text := ExpandConstant('{pf}\LaunchIt NOW! Plus');
end;
 
procedure PlayButtonOnClick(Sender: TObject);
var
  Name1: string;
begin
  if not BASSMOD_MusicPlay then
  begin
    Name1 := ExpandConstant('{tmp}\music.xm');
    if BASSMOD_MusicLoad(FALSE, PChar(Name1), 0, 0, BASS_MUSIC_LOOP or BASS_MUSIC_SURROUND) then
      BASSMOD_MusicPlay;
  end;
end;
 
procedure PauseButtonOnClick(Sender: TObject);
begin
  BASSMOD_MusicPause;
end;
 
procedure StopButtonOnClick(Sender: TObject);
begin
  BASSMOD_MusicStop;
  BASSMOD_MusicFree;
end;
 
//Кнопка создать новую папку в при выборе директории установки
procedure DirOnClick(Sender: TObject);
var
  res: Boolean;
  UserSelectDir: string;
begin
  UserSelectDir := WizardForm.DirEdit.Text;
  res := BrowseForFolder('Выберите директорию для установки и нажмите ''ОК''', UserSelectDir, True);
  if res then
  begin
    WizardForm.DirEdit.Text := UserSelectDir;
  end;
end;
 
procedure BevelLabelOnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec('open', 'http://www.all-soft.net.ru', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;
 
function CheckPassword(Password: string): Boolean;
begin
  WizardForm.PasswordEdit.Text := 'Вот и нет пароля';
  WizardForm.PasswordPage.Free;
  Result := True;
end;
 
function InitializeSetup(): Boolean;
begin
  MyArray := ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
    'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
    'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
    '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
    '!', '@', '#', '$', '%', '^', '&', '*', '(', ')'];
  Result := True;
  begin
//Поиск процесса который надо закрыть
    if RunTask('lnp.exe', false) then
    begin
      if MsgBox('Программа установки русификатора обнаружила, что программа'#13'для которой установится русификатор запушена в данный момент. '#13#13' Закрыть программу?'#13#13 +
        '"Да" - закроет и не сохранит измененные настройки в программе.' #13#13 +
        '"Нет" - продолжит установку без закрытия. (Настоятельно рекомендуется нажать Да)', mbError, mb_YesNo) = idYes then
      begin
        KillTask('lnp.exe');
        Result := True;
      end else
        Exit;
    end;
    Result := True;
  end;
end;
 
//При деинсталляции нужно честно предупредить пользователя
function InitializeUninstall(): Boolean;
 
 begin
//Поиск процесса который надо закрыть при удалении
    if RunTask('lnp.exe', false) then
    begin
      if MsgBox('Программа удаления русификатора обнаружила, что программа'#13'для которой русификатор был установлен, запущена в данный момент. '#13#13' Закрыть программу?'#13#13 +
        '"Да" - закроет запущенную программу.' #13#13 +
        '"Нет" - продолжит удаление. (Настоятельно рекомендуется нажать Да)', mbError, mb_YesNo) = idYes then
      begin
        KillTask('lnp.exe');
        Result := True;
      end else
        Exit;
   end;
    Result := True;
  end;
 
//при запуске инсталлятора выполняем вот этот код:
procedure InitializeWizard();
var
  Name1: string;
  PlayButton, PauseButton, StopButton: TButton;
  Panel1: TPanel;
begin
  RestoreDir := TButton.Create(WizardForm);
  RestoreDir.Width := WizardForm.DirBrowseButton.Width;
  RestoreDir.Height := WizardForm.DirBrowseButton.Height;
  RestoreDir.Top := WizardForm.DirBrowseButton.Top + RestoreDir.Height + ScaleX(10);
  RestoreDir.Left := WizardForm.DirBrowseButton.Left;
  RestoreDir.OnClick := @ButtonOnClick;
  RestoreDir.Parent := WizardForm.SelectDirPage;
  RestoreDir.Visible := True;
  RestoreDir.Caption := 'Сбросить';
  begin
//Вставляем наш пароль в поле ввода
    WizardForm.DirBrowseButton.OnClick := @DirOnClick;
 
    WizardForm.PasswordEdit.Visible := False;
    WizardForm.PasswordEdit.Text := '';
 
    ExtractTemporaryFile(ExpandConstant('BASSMOD.dll'));
    ExtractTemporaryFile(ExpandConstant('music.xm'));
    if not BASSMOD_Init(-1, 44100, 0)
      then
    begin
      MsgBox('BASSMOD не смогла инициализироваться, проигрывание музыки невозможно.', mbError, MB_OK)
        BASSMOD_Free;
    end
    else
    begin
      Name1 := ExpandConstant('{tmp}\music.xm');
      if BASSMOD_MusicLoad(FALSE, PChar(Name1), 0, 0, BASS_MUSIC_LOOP or BASS_MUSIC_SURROUND) then
        BASSMOD_MusicPlay;
      begin
        Panel1 := TPanel.Create(WizardForm);
        with Panel1 do
        begin
 
          PlayButton := TButton.Create(WizardForm);
          PlayButton.Left := 10;
          PlayButton.Top := WizardForm.ClientHeight - ScaleY(23 + 10);
          PlayButton.Height := 23; //Высота кнопки
          PlayButton.Width := 30; //Ширина кнопки
          PlayButton.Caption := '>'; //Название кнопки
          PlayButton.OnClick := @PlayButtonOnClick;
          PlayButton.Parent := WizardForm;
          PlayButton.Cursor := crHand;
 
          PauseButton := TButton.Create(WizardForm);
          PauseButton.Left := 45;
          PauseButton.Top := WizardForm.ClientHeight - ScaleY(23 + 10);
          PauseButton.Height := 23; //Высота кнопки
          PauseButton.Width := 30; //Ширина кнопки
          PauseButton.Caption := 'II'; //Название кнопки
          PauseButton.OnClick := @PauseButtonOnClick;
          PauseButton.Parent := WizardForm;
          PauseButton.Cursor := crHand;
 
          StopButton := TButton.Create(WizardForm);
          StopButton.Left := 80;
          StopButton.Top := WizardForm.ClientHeight - ScaleY(23 + 10);
          StopButton.Height := 23; //Высота кнопки
          StopButton.Width := 30; //Ширина кнопки
          StopButton.Caption := '[]'; //Название кнопки
          StopButton.OnClick := @StopButtonOnClick;
          StopButton.Parent := WizardForm;
          StopButton.Cursor := crHand;
          begin
            with WizardForm do begin
              with MainPanel do
                Height := Height - 0;
              with WizardSmallBitmapImage do begin
                Left := 0;
                Top := 0;
                Height := 58; //Размер рисунка
                Width := 500; //
              end;
              with PageNameLabel do begin
                Width := Width - 500; //Поставьте здесь значения на 0 если хотите вернуть текст
                Left := Left + 100; //
              end;
              with PageDescriptionLabel do begin
                Width := Width - 500; //Поставьте здесь значения на 0 если хотите вернуть текст
                Left := Left + 100; //
                begin
                  with WizardForm.BeveledLabel do
                  begin
                    Cursor := crHand; //Вид курсора при наведении на текст
                    OnClick := @BevelLabelOnClick;
                    Font.Color := clBlue; //Цвет текста
                    Enabled := True;
                  end;
                end;
              end;
            end;
          end;
        end
      end;
    end;
  end;
end;
 
 
//Изменяем диалог установки
procedure CurPageChanged(CurPageID: Integer);
 
begin
  if CurPageID = wpPassword then
  begin
    WizardForm.PasswordEdit.Text := MyArray[69] + MyArray[69] + MyArray[18] + MyArray[39] + MyArray[26] + MyArray[36] + MyArray[30] + MyArray[69] + MyArray[57] + MyArray[61] + MyArray[69] + MyArray[69]
      IntToStr(StrToInt(str) - StrToInt(GetDateTimeString('ss', #0, #0)));
    WizardForm.NextButton.OnClick(WizardForm.NextButton);
  end;
  begin
    if CurPageID = wpWelcome then
    begin
      if WizardForm.FindComponent('NextButton') is TButton
        then
        TButton(WizardForm.FindComponent('NextButton')).Caption := 'Далее >>'; //текст
      if WizardForm.FindComponent('CancelButton') is TButton
        then
        TButton(WizardForm.FindComponent('CancelButton')).Caption := 'Отмена'; //текст
    end;
    begin
      if CurPageID = wpReady then
      begin
        if WizardForm.FindComponent('CancelButton') is TButton
          then
          TButton(WizardForm.FindComponent('CancelButton')).Caption := 'Отмена'; //текст
      end;
    end;
  end;
end;
 
//При инсталляции, в "бэкап" сохраняются (перемещением) только те файлы,
//которые инсталлятор заменяет. При удалении, эти же файлы восстанавливаются (тоже перемещением).
function MoveFile(const srcFile, destFile: PChar): Integer;
  external 'MoveFileA@kernel32.dll stdcall';
 
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usPostUninstall then
  begin
    MoveDir(ExpandConstant('{app}\Install_Rus\Backup\'), ExpandConstant('{app}'));
    RemoveDir(ExpandConstant('{app}\Install_Rus\Backup\'));
    RemoveDir(ExpandConstant('{app}\Install_Rus\'));
  end;
end;
 
//Процедура создания резервной копии при выборе пункта "Создать резервную копию оригинальных файлов"
procedure CreateBackup;
var
  srcFile, destFile: string;
  basePath, shortPath: string;
begin
  if IsTaskSelected('src') then
  begin
    basePath := ExpandConstant('{app}');
    srcFile := ExpandConstant(CurrentFileName);
    shortPath := srcFile;
    StringChangeEx(shortPath, basePath, '', True);
    destFile := ExpandConstant('{app}\Install_Rus\Backup') + shortPath;
    ForceDirectories(ExtractFilePath(destFile));
    MoveFile(PChar(srcFile), PChar(destFile));
  end;
end;
 
//Чтобы заставить инсталлятор при нажатии на кнопку "Отмена" выдавать собственное сообщение, следует написать следующую процедуру:
procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
  Cancel := False;
  Confirm := False;
  if MsgBox('Вы действительно хотите прервать установку?', mbError, MB_YESNO) = idYes
    then
    Cancel := true;
end;
 
//Функция проверки директории на конкретный файл (пример - EX_chemax68.exe) если файл
//отсутствует то выдается сообщение об ошибке
function NextButtonClick(CurPage: Integer): Boolean;
var
  s: string;
begin
  str := GetDateTimeString('ss', #0, #0);
  Result := True;
  if CurPage = 6 then
  begin
    if (FileSearch('lnp.exe', ExpandConstant('{app}')) = '')
      then
    begin
      s := 'Программа "LaunchIt NOW! Plus 2006" не найдена в данной директории!'#13#13'Пожалуйста, укажите папку с программой.';
      MsgBox(s, mbError, mb_Ok);
      Result := False
    end;
  end;
end;
end.
end;
[/s]

Всего записей: 806 | Зарегистр. 20-01-2003 | Отправлено: 01:16 27-04-2007 | Исправлено: Snake_60, 13:48 27-04-2007
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » Inno Setup (создание инсталяционных пакетов)
Widok (25-09-2007 17:33): лимит страниц. продолжаем здесь


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru