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

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

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

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

Ветеран


Contributor


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


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

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


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Отправлено: 19:06, 28-03-2013

 

SHVtYW4=


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

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


Цитата Optitron:
как сделать так, чтобы у каждого компонента путь установки по дефолту был разный. »
Код: Выделить весь код
[Components]
Name: a; Description: Папка 1
Name: b; Description: Папка 2
Name: c; Description: C:\Windows\Папка
Name: d; Description: C:\Program Files\Папка
Name: e; Description: C:\Папка

[Files]
Source: Папка\*; DestDir: {app}\Папка1; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a
Source: Папка\*; DestDir: {app}\Папка2; Flags: ignoreversion recursesubdirs createallsubdirs; Components: b
Source: Папка\*; DestDir: {win}\Папка; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c
Source: Папка\*; DestDir: {pf}\Папка; Flags: ignoreversion recursesubdirs createallsubdirs; Components: d
Source: Папка\*; DestDir: {sd}\Папка; Flags: ignoreversion recursesubdirs createallsubdirs; Components: e

-------
09a468a9b4293cd82adf6d6c60a9da82 | Tm9yZGVr
В связи со сменой железа и переходом на LInux с полным отказом от Windows - посещение на форуме будет редким.

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

Отправлено: 16:04, 03-12-2013 | #1591



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

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


Аватара для Johny777

Ветеран


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

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


Raf-9600,
Цитата Raf-9600:
Спасибо, но это не совсем то, в чём затык произошёл. Кроме этого функционала, нужно ещё чтобы после того как воспроизведение само завершиться (без клика пользователя по кнопке Стоп), кнопка Стоп становилась неактивной. »
вот пример. Перенёс отсюда http://programmersforum.ru/showthread.php?p=426736
попутно читал справку, чего и тебе советую, тк возможностей много, например регулировка громкости, отображение прогресса, перемотка, итд
http://www.un4seen.com/doc/#bass/BAS...reateFile.html

короче вот код конкретно по твоему вопросу:
читать дальше »
Код: Выделить весь код
[Files]
Source: bass.dll; Flags: dontcopy


[Code    ]
type
    HSYNC = DWORD;
    SYNCPROC = Longint;
    Pointer = Longint;
    HSTREAM = DWORD;
    
const
    BASS_SYNC_END       = 2;
    BASS_UNICODE        = $80000000;
    
function BASS_ChannelRemoveSync(handle: DWORD; sync: HSYNC): BOOL; external 'BASS_ChannelRemoveSync@files:bass.dll stdcall';
function BASS_ChannelSetSync(handle: DWORD; type_: DWORD; param1, param2: DWORD; proc: SYNCPROC; user: Pointer): HSYNC; external 'BASS_ChannelSetSync@files:bass.dll stdcall';
function BASS_Init(device: LongInt; freq, flags: DWORD; win: HWND; clsid: Pointer): BOOL; external 'BASS_Init@files:bass.dll stdcall';
function BASS_StreamCreateFile(mem: BOOL; f: String; offset1: DWORD; offset2: DWORD; length1: DWORD; length2: DWORD; flags: DWORD): HSTREAM;
  external 'BASS_StreamCreateFile@files:bass.dll stdcall';
function BASS_StreamFree(handle: HSTREAM): BOOL; external 'BASS_StreamFree@files:bass.dll stdcall';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): BOOL; external 'BASS_ChannelPlay@files:bass.dll stdcall';
function BASS_Free(): BOOL; external 'BASS_Free@files:bass.dll stdcall';

var
    Channel: HSTREAM;
    PlaySync: DWORD;
    BassInitialized: BOOL;
    
    StopBtn, PlayBtn: TButton;

// Процедура которая будет вызвана по окончанию проигривания файла
procedure ChannelEndSync(handle: HSYNC; Stream, data: DWORD; user: Pointer); 
begin
    // Вот здесь обрабатывайте окончание!
    // Когда Channel доиграет до конца, то будет вызвана эта процедура
    // Например освободим этот поток который проигрался
    // Сперва удалим обработку
    BASS_ChannelRemoveSync(Stream, Handle);
    // Освободим поток
    BASS_StreamFree(Stream);

    // Очистим переменные
    Channel := 0;
    PlaySync := 0;

    // Покажем пользователю что файл проигран до конца...
    //MsgBox('Файл проигран!', mbInformation, MB_OK);
    StopBtn.Enabled := False;
end;

// Просто процедура которая открывает файл и проигривает его
procedure BASS_PlayFile(const FilePath: String);
begin
    if Channel = 0 then
    begin
        // Открываем файл...
        Channel := BASS_StreamCreateFile(False, FilePath, 0, 0, 0, 0,
        #ifdef UNICODE
            BASS_UNICODE
        #else
            0
        #endif
        );

        // Начинаем его воспроизведение
        BASS_ChannelPlay(Channel, False);

        // А вот здесь используем флаг BASS_SYNC_END и указываем на нашу процедуру
        // ChannelEndSync котора будет запущена по окончанию проигривания файла
        PlaySync := BASS_ChannelSetSync(Channel, BASS_SYNC_END, 0, 0, CallbackAddr('ChannelEndSync'), 0);
    end else
    begin
        // Если файл уже играет, то отключаем его
        BASS_ChannelRemoveSync(Channel, PlaySync);
        BASS_StreamFree(Channel);

        // Открываем файл...
        Channel := BASS_StreamCreateFile(False, FilePath, 0, 0, 0, 0,
        #ifdef UNICODE
            BASS_UNICODE
        #else
            0
        #endif
        );

        // Начинаем его воспроизведение
        BASS_ChannelPlay(Channel, False);

        // А вот здесь используем флаг BASS_SYNC_END и указываем на нашу процедуру
        // ChannelEndSync котора будет запущена по окончанию проигривания файла
        PlaySync := BASS_ChannelSetSync(Channel, BASS_SYNC_END, 0, 0, CallbackAddr('ChannelEndSync'), 0);
    end;
end;

function InitBass(const _hwnd: HWND): BOOL;
begin
    Result := BassInitialized;
    if not Result then
    begin
        Result := BASS_Init(-1, 44100, 0, _hwnd, 0);
        BassInitialized := Result;
    end;
end;

procedure StopAndFree();
begin
    if PlaySync <> 0 then
    begin
        BASS_ChannelRemoveSync(Channel, PlaySync);
        PlaySync := 0;
    end;
    
    // Освободим поток
    if Channel <> 0 then
    begin
        BASS_StreamFree(Channel);
        Channel := 0;
    end;
end;

function DeInitBass(): BOOL;
begin
    Result := not BassInitialized;
    if not Result then
    begin
        Result := Bass_Free();
        BassInitialized := not Result;
    end;
end;

///////////////////////////////////  demo  /////////////////////////////////



procedure BtnClick(Sender: TObject);
var
    uFilePath: String;
begin
    case TButton(Sender) of
        PlayBtn:
        begin
            uFilePath := '';
            if GetOpenFileName('Choose audio file', uFilePath, ExpandConstant('{userdesktop}'), 'mp3 files (*.mp3)|*.mp3|All files (*.*)|*.*', 'mp3') then
              if uFilePath <> '' then
                BASS_PlayFile(uFilePath);

            StopBtn.Enabled := True;
        end;
        
        StopBtn:
        begin
            StopAndFree();
            StopBtn.Enabled := False;
        end;
    end;
end;


procedure InitializeWizard();
begin
    BassInitialized := False;
    InitBass(0);
    
    //////////////////////////////////
    WizardForm.OuterNotebook.Hide;
    PlayBtn := TButton.Create(WizardForm);
    with PlayBtn do
    begin
        Parent := WizardForm;
        SetBounds(100, 100, 65, 25);
        Caption := 'Play';
        OnClick := @BtnClick;
    end;
    StopBtn := TButton.Create(WizardForm)
    with StopBtn do
    begin
        Parent := WizardForm;
        SetBounds(200, 100, 65, 25);
        Caption := 'Stop';
        OnClick := @BtnClick;
    end;
end;


procedure DeinitializeSetup();
begin
   DeInitBass();
end;
[/color]

Последний раз редактировалось Johny777, 04-12-2013 в 01:35.

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

Отправлено: 16:38, 03-12-2013 | #1592


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


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

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


Всем здравствуйте!
Подскажите плиз, как можно на момент запуска деинсталлятора узнать текущую директорию, где находится этот самый деинсталлятор. GetCurrentDir почему-то возвращает не директорию расположения, а систем32

Отправлено: 16:54, 03-12-2013 | #1593


Аватара для Mailchik

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


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

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


Shkutu,
читать дальше »
Код: Выделить весь код
#define AppId "My Application"

[Setup]
AppID={#AppId}
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]
var
  UninsPath: string;

function InitializeUninstall(): boolean;
begin
  if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#AppId}_is1',
      'UninstallString', UninsPath) then begin
        UninsPath := ExtractFilePath(RemoveQuotes(UninsPath));
    MsgBox(UninsPath, mbInformation, MB_OK);
  end;
  Result := True;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:22, 03-12-2013 | #1594


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

Старожил


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

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


Johny777, Спасибо! Никаких особых проблем не возникло. Единственная мелочь: в твоём коде проверка в процедуре BASS_PlayFile такая if Channel <> 0 then, а должно быть if Channel = 0 then.

Собственно вот как эта часть выглядит у меня:
читать дальше »
Код: Выделить весь код
// Просто процедура которая открывает файл и проигривает его
function BASS_PlayFile(const Sounds: array of String): boolean;
var
    TempSoundName, uSoundPath: String;
    i: integer;

begin
    i := GetArrayLength(Sounds);
    TempSoundName := Sounds[Random(i)];

    // Не воспроизводим один файл два раза под ряд если их хотябы два.
    if i >= 1 then
        if TempSoundName = uSoundName then
            BASS_PlayFile(Sounds)
        else
            uSoundName := TempSoundName;

    if not FileExists(AddBackslash(RemoveBackslash(ExpandConstant('{tmp}'))) + 'BASS.dll') then ExtractTemporaryFile('BASS.dll');
    uSoundPath := ExpandConstant(AddBackslash(RemoveBackslash(ExpandConstant('{tmp}'))) + uSoundName);
    if not FileExists(uSoundPath) then ExtractTemporaryFile(uSoundName);

    if Channel = 0 then
    begin
        // Открываем файл...
        Channel := BASS_StreamCreateFile(False, uSoundPath, 0, 0, 0, 0,
        #ifdef UNICODE
            BASS_UNICODE
        #else
            0
        #endif
        );

        // Начинаем его воспроизведение
        Result := BASS_ChannelPlay(Channel, False);

        // А вот здесь используем флаг BASS_SYNC_END и указываем на нашу процедуру
        // ChannelEndSync котора будет запущена по окончанию проигривания файла
        PlaySync := BASS_ChannelSetSync(Channel, BASS_SYNC_END, 0, 0, CallbackAddr('ChannelEndSync'), 0);
    end else
    begin
        // Если файл уже играет, то отключаем его
        BASS_ChannelRemoveSync(Channel, PlaySync);
        BASS_StreamFree(Channel);

        // Открываем файл...
        Channel := BASS_StreamCreateFile(False, uSoundPath, 0, 0, 0, 0,
        #ifdef UNICODE
            BASS_UNICODE
        #else
            0
        #endif
        );

        // Начинаем его воспроизведение
        Result := BASS_ChannelPlay(Channel, False);

        // А вот здесь используем флаг BASS_SYNC_END и указываем на нашу процедуру
        // ChannelEndSync котора будет запущена по окончанию проигривания файла
        PlaySync := BASS_ChannelSetSync(Channel, BASS_SYNC_END, 0, 0, CallbackAddr('ChannelEndSync'), 0);
    end;
end;

Последний раз редактировалось Raf-9600, 04-12-2013 в 01:46.

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

Отправлено: 19:53, 03-12-2013 | #1595


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

Ветеран


Contributor


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

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


Цитата Shkutu:
как можно на момент запуска деинсталлятора узнать текущую директорию, где находится этот самый деинсталлятор »
Shkutu,
Код: Выделить весь код
function InitializeUninstall(): Boolean;
begin
    Result := True;
    MsgBox(ExtractFileDir(ExpandConstant('{uninstallexe}')), mbInformation, MB_OK);
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:59, 03-12-2013 | #1596


Аватара для ispolin

Ветеран


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


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

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


Спрашивал на руборде
Есть набор программ устанавливаемых через инно, среди компонентов допустим есть прога 1.exe
возможно ли
если пользователь выбрал установку этой программы, выходило сообщение
"Внимание! Прежде чем установить эту программу, необходимо установить бла бла бла... Выполнить необходимые условия?" и кнопки в этом сообщении
Да (я позже выполню) - тогда чекбокс автоматом с этой проги снимается и продолжается установка других компонентов (если они выбраны)
Нет (уже установлено) - тогда чекбокс автоматом с этой проги НЕ снимается и продолжается установка выбраной 1.exe и других компонентов (если они выбраны)

дали скрипт

Код: Выделить весь код
[components] 
Name: fuck; Description: lol; 
Name: fuck2; Description: lol2; 
 
[_code] 
procedure CurPageChanged(CurPageID: Integer); 
var i: integer; 
begin 
if Curpageid=wpWelcome then 
  if MsgBox('fuck',mbInformation,mb_YesNo)=idyes then 
    for i:=0 to WizardForm.ComponentsList.ItemCount-1 do 
      begin 
        MsgBox(WizardForm.ComponentsList.ItemCaption[i],mbinformation,mb_ok); 
        if WizardForm.ComponentsList.ItemCaption[i]='lol' then WizardForm.ComponentsList.Checked[i]:=False else WizardForm.ComponentsList.Checked[i]:=True; 
      end; 
end;
при компоновке вываливается ошибка



как исправить или может какой другой есть скрипт?

-------


Отправлено: 23:11, 03-12-2013 | #1597


Аватара для Johny777

Ветеран


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

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


Raf-9600,

Цитата Raf-9600:
Единственная мелочь: в твоём коде проверка в процедуре BASS_PlayFile такая if Channel <> 0 then, а должно быть if Channel = 0 then. »
Не такая уж и мелочь. Благодарю! Я её проглядел.
Цитата Raf-9600:
Собственно вот как эта часть выглядит у меня. Не воспроизводим один файл два раза под ряд если их хотябы два. »
Ну давай теперь разбирать, что ты там написал
if i >= 1 then
означает "если длина массива больше-равно 1".
Не вижу смысла. Если длина массива 1, то рандом не нужен
Если больше одного, рандом уместен
те мы уже пишем
if i = 1 then uSoundName := Sounds[0]
else
if i > 1 then ипользуем рандом, но
ты хочешь чтоб файлы не проигрывались два раза подряд и рекурсивно вызываешь BASS_PlayFile() пока значения TempSoundName и uSoundName будут разными.
Да функция GetArrayLength() и Random() работают быстро, но мы не знаем сколько раз пройдёт рекурсия пока рандом не выдаст другое значение. Те тут крайне нестабильная секция кода с точки зрения скорости. Другими словами очень желательно другое решение. В данном случае модификация рандома. Вот кокретно для решения этой задачи наваял код:
алгоритм простой - чистая математика
функция function RandRange(const LeftInt, RightInt: Integer): Integer;
где LeftInt - левая граница
RightInt - правая
условие RightInt > LeftInt хотя бы на 1
например мы хотим получить случайные числа от 2 до 7 включительно.
функция
function NotRandRand(const LeftInt, RightInt: Integer; var LastResultInt: Integer): Integer;
где всё тоже самое кроме LastResultInt, в которую пишется значение последнего результата.
условие: переменная, которую отправляем в var LastResultInt: Integer должна быть глобальной (это съест всего лишь 4 байта памяти процесса), иначе ничего работать не будет!
как она работает думаю понятно по коду. Единственное скажу, что если последнее выпавшее число не равно левой границе и павой, то значит речь идёт о 2-х половинах
и тут мы доверим рандому case Random(2) of
например у нас числа 1...7. Вапало 5. --> в след. раз в Random(2) выпал 0 (рандом возвращает входное значение -1), то мы выполним RandRange(1, 5-1)
если выпала 1, то RandRange(5+1, 7)
короче говоря никаких повторов 222, 33, итд. Минимум через 1
вот код:
читать дальше »
Код: Выделить весь код
function RandRange(const LeftInt, RightInt: Integer): Integer;
begin
    Result := Random( (RightInt + 1)-LeftInt ) + LeftInt;
end;

function NotRandRand(const LeftInt, RightInt: Integer; var LastResultInt: Integer): Integer;
begin
    Result := RandRange(LeftInt, RightInt);
    if Result = LastResultInt then
    begin
        if LastResultInt = LeftInt then
          Result := RandRange(LeftInt+1, RightInt)
          
        else
        
        if LastResultInt = RightInt then
          Result := RandRange(LeftInt, RightInt-1)
          
        else
        
        case Random(2) of
            0: Result := RandRange(LeftInt, LastResultInt-1);
            1: Result := RandRange(LastResultInt+1, RightInt);
        end;
    end;
    LastResultInt := Result;
end;



procedure Test();
var
    sArray: array [0..3] of String;
    S: String;
    i, e, L, R, LastInt: Integer;
begin
    for i := 0 to 3 do
    begin
        sArray[i] := IntToStr(i+1) + ')' + #32;
        case i of
            0:
            begin
                L := 1;
                R := 9;
            end;
            1:
            begin
                L := 7;
                R := 8;
            end;
            2:
            begin
                L := 2;
                R := 16;
            end;
            3:
            begin
                L := 0;
                R := 1;
            end;
        end;
        
        for e := 0 to 7 do
          sArray[i] := sArray[i] + #32#32#32 + IntToStr(NotRandRand(L, R, LastInt));
          
        LastInt := 0;
    end;
    
    S := sArray[0];
    for i := 1 to 3 do
      S := S + #13#10 + sArray[i];

    MsgBox(S, mbInformation, MB_OK);
end;


procedure InitializeWizard();
begin
    Test();
end;
процедура Test(); отладочная. Вот мой результат

обрати внимание на 2 и 4-ю строку. Как и следовало ожидать при RightInt - LeftInt = 1 значения чередуются
вот твой участок кода (обновлённый):
читать дальше »
Код: Выделить весь код
var
    LastInt: Integer;

function BASS_PlayFile(const Sounds: array of String): boolean;
var
    TempSoundName, uSoundPath: String;
    Len: integer;
begin
    Len := GetArrayLength(Sounds);
    
    // Не воспроизводим один файл два раза под ряд если их хотябы два.
    if Len = 1 then
      uSoundName := Sounds[0];
    else
    if Len > 1 then
      uSoundName := Sounds[  NotRandRand(0, Len-1, LastInt)  ];
        

Хочу заметить. У меня лежит код (пока времени нет довести до ума ) настоящего рандома из микрофона ноутбука. Те шум окружающей среды. И там бывают подряд повторяющиеся значения. Те повтор для рандома это нормально, в противном случае это не рандом, а какой-то счётчик!

строка
if not FileExists(AddBackslash(RemoveBackslash(ExpandConstant('{tmp}'))) + 'BASS.dll') then ExtractTemporaryFile('BASS.dll');
не нужна (заметь у меня в коде её нет), тк BASS.dll итак извлекается для последующей её динамичной загрузки

=========================================================================================

ispolin, у меня компилятор на Свойство ItemCount не ругается. Использую расширенную версию(не самую новую - 5.4.3). В шапке есть ссылка на расширенную.

Последний раз редактировалось Johny777, 04-12-2013 в 04:59.

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

Отправлено: 04:32, 04-12-2013 | #1598


SHVtYW4=


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

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


Цитата Johny777:
В шапке есть ссылка на расширенную. »
Но нет ссылок на соответствующую версию Inno для расширенной.

El Sanchez, Добавь пожалуйста ссылки на соответствующую версию хотя бы под спойлер "Расширенная версия Inno Setup от Restools".

Пример:
Расширенная версия Inno Setup от Restools

Рекомендуемая версия:
isetup-5.5.1.exe - ANSI версия
ispack-5.5.1-unicode.exe - Unicode версия

Сайт: http://restools.hanzify.org/
Скачать:
Рекомендуется к применению из-за огромного количества компонентов, функций и процедур, удобного интерфейса, наличия отладчика и Form Designer. Собран на основе исходников Inno Setup 5.5.1.

Инструкция по установке

Инструкция по установке:
  1. Установите ispack-X.X.X.exe или ispack-X.X.X-unicode.exe (X.X.X - номер актуальной версии);
  2. Скачайте Inno Setup Compiler, распакуйте;
  3. Из одноимённой папки, в соответствии с установленной версией (Ansi или Unicode), скопируйте два файла (Compil32.exe, Templates.dat) в каталог Inno Setup (по умолчанию: C:\Program Files\Inno Setup 5\). Появится сообщение с подтверждением о замене файла, нажимаем 'Да'.
    Примечание: если у вас Unicode версия, то дополнительно примените твик реестра (файл CourierNew.reg) из папки UnicodeFontLink и перезагрузите компьютер.
  4. Скачайте Inno ISCmplr Setup, распакуйте;
  5. Из одноимённой папки, в соответствии с установленной версией (InnoSetup_ANSI или InnoSetup_Unicode), из подпапки FullVCL скопируйте все файлы в каталог Inno Setup (по умолчанию: C:\Program Files\Inno Setup 5\). Появится сообщение с подтверждением о замене файла, нажимаем 'Да'.

Последний раз редактировалось Nordek, 04-12-2013 в 12:53.

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

Отправлено: 12:31, 04-12-2013 | #1599


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


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

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


El Sanchez, спасиб

Отправлено: 13:01, 04-12-2013 | #1600



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты 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
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59




 
Переход