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

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

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

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

Ветеран


Contributor


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


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

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


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

  • RegExporter - Фриварная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.2.0 [23.09.2014] - Скачать;



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

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

Отправлено: 08:52, 02-02-2015

 

Аватара для kotyarko@fb

Старожил


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

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


Цитата Николай_Николаич@vk:
Подскажите, как сделать проверку на наличие папки. »
Например, так:
Код: Выделить весь код
Function NextButtonClick(CurPageID: Integer): Boolean;
begin
 Result := True;
 case CurPageID of
  wpSelectDir:
  begin
   if not DirExists(ExpandConstant('{app}\Prog')) then
   begin
    MsgBox('Выбрана не верная папка', mbError, MB_OK);
    Result := False;
   end;
  end;
 end;
end;
palsn2000, я точно не уверен, не пробовал. Но на прогрессбар разве лейбл станет?

-------
http://forum.worldoftanks.ru/topic/1429925-/
Исходник моего установщика: https://bitbucket.org/Kotyarko_O/kmp


Отправлено: 08:44, 12-05-2015 | #601



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

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


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


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

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


Привет всем.
Как сделать, чтобы деинсталятор удалял заранее указанные папки?
Например: У меня есть папка res_mods, в не папка mods и папка 0.9.7.
Мне нужно чтобы деинсталятор удалил папку mods и очистил папку 0.9.7

Отправлено: 12:34, 12-05-2015 | #602


SHVtYW4=


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

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


Цитата Kashtan007:
Как сделать, чтобы деинсталятор удалял заранее указанные папки? »
Пример:
Код: Выделить весь код
[UninstallDelete]
Name: {userappdata}\res_mods; Type: filesandordirs

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

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

Отправлено: 14:08, 12-05-2015 | #603


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


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

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


Nordek, файл удалять по такому же способу?

Последний раз редактировалось Kashtan007, 12-05-2015 в 19:00.


Отправлено: 18:55, 12-05-2015 | #604


Аватара для Dodakaedr

Ветеран


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

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


Цитата Kashtan007:
файл удалять по такому же способу? »
Инфа из справки. По-моему все доходчиво описано
Цитата:
Это не обязательная секция. В ней указываются дополнительные файлы или папки, которые деинсталлятор должен удалить, кроме тех, которые были установлены/созданы с помощью параметров секций [Files] или [Dirs]. Главным образом эта секция используется для удаления .INI файлов, созданных вашим приложением. Деинсталлятор выполняет эти параметры в конце деинсталляции.

Пример секции [UninstallDelete]:

Код: Выделить весь код
[UninstallDelete]
Type: files; Name: "{win}\MYPROG.INI"
Список поддерживаемых параметров:
Type (Обязательно)
Указывает тип удаляемого объекта. Может быть следующим:

files
Параметр Name указывает имя отдельного файла или маску.

filesandordirs
То же, что files за исключением, что также можно задать имя папки: в этом случае удаляются все ее файлы и подпапки.

dirifempty
При использовании этого типа параметр Name должен задавать папку, но не содержать масок. Папка будет удалена, только если она пустая.

Например:
Код: Выделить весь код
Type: files


Name (Обязательно)
Имя удаляемого файла или папки.

Внимание! Не торопитесь использовать здесь маски для удаления всех файлов папки {app}. Строго рекомендуется не делать этого по двум причинам. Во-первых, пользователи обычно не любят, когда данные, введенные ими в директории приложения, удаляются без предупреждения (они могут удалить их просто потому, что хотят, например, переместить программу в папку на другом диске). Будет лучше оставить файлы, чтобы при желании пользователь потом сам удалил их. Во-вторых, если пользователь по ошибке установит приложение не в ту папку (например, в C:\WINDOWS) и потом удалит его оттуда, это может привести к плачевным последствиям. Так что НЕ ДЕЛАЙТЕ ЭТОГО!

Например:
Код: Выделить весь код
Name: "{win}\MYPROG.INI"

-------
Inno Setup 5 Ultra Unicode

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

Отправлено: 19:29, 12-05-2015 | #605


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


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

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


Цитата kotyarko@fb:
palsn2000, я точно не уверен, не пробовал. Но на прогрессбар разве лейбл станет? »
Я имел ввиду не лэйбл для прогрессбара, А просто произвольный лэйбл, который можно расположить на прогрессбаре (прогрессбар на нижнем слое - лэйбл выще и просто накладывается).
Но в общем речь не об этом, а о том, что мои познания в программировании близки к нулю, и сам я не понимаю как (и вообще можно ли) проценты установки связать с дэйблом, а не сообщением.

У Вас там используется SetupMessage(msgStatusExtractFiles)
Код: Выделить весь код
function ProgressBarProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
    if Msg = PBM_SETPOS then with WizardForm do SetWindowText( StatusLabel.Handle, Format('%s'#32'%s', [SetupMessage(msgStatusExtractFiles), FormatFloat('0.#0 %', (ProgressGauge.Position*100)/ProgressGauge.Max)]) );

    Result := CallWindowProc(OldProgressBarProc, hWnd, Msg, wParam, lParam);
end;
А я спрашиваю можно ли как нибудь вот это (ProgressGauge.Position*100)/ProgressGauge.Max) в процентах или даже без процентов связать с произвольным лэйблом или произвольным текстом, который можно бы было наложить на прогрессбар?

Может я не совсем правильно объясняю, чего хочу, вот для примера картинка:

Отправлено: 19:46, 12-05-2015 | #606


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

Ветеран


Contributor


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

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


palsn2000, например, так:
Скрытый текст

Код: Выделить весь код
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';

var
    PercentLabel: TLabel;

///////////////////////////
procedure InitializeWizard;
begin
    { PercentLabel }
    PercentLabel := TLabel.Create(WizardForm);
    with PercentLabel do
    begin
        Parent := WizardForm.ProgressGauge;
        Align := alClient;
        Alignment := taCenter;
        Layout := tlCenter;
        Transparent := True;
    end;
end;

/////////////////////////////////////////////////////////////////////////////////////////
function ProgressBarProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
    case Msg of
        PBM_SETPOS:
            begin
                Result := CallWindowProc(OldProgressBarProc, hWnd, Msg, wParam, lParam);
                with WizardForm.ProgressGauge do
                    PercentLabel.Caption := Format('%d %%', [MulDiv(Position, 100, Max)]);
            end;
    else
        Result := CallWindowProc(OldProgressBarProc, hWnd, Msg, wParam, lParam);
    end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:45, 12-05-2015 | #607


Аватара для Dodakaedr

Ветеран


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

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


Цитата El Sanchez:
например, так: »
полный рабочий пример можете привести?

-------
Inno Setup 5 Ultra Unicode


Отправлено: 22:41, 12-05-2015 | #608


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


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

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


Цитата kotyarko@fb:
Например, так:
Код:
Function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
case CurPageID of
wpSelectDir:
begin
if not DirExists(ExpandConstant('{app}\Prog')) then
begin
MsgBox('Выбрана не верная папка', mbError, MB_OK);
Result := False;
end;
end;
end;
end; »
Немного не то.

Нужно что то типо этого:

Код: Выделить весь код
if not FileExists(AddBackslash(WizardForm.DirEdit.Text) + 'Prog.exe') then
только проверка не на файл, а папку.

Отправлено: 23:12, 12-05-2015 | #609


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

Ветеран


Contributor


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

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


Цитата Dodakaedr:
полный рабочий пример можете привести? »
Dodakaedr, пример:
Скрытый текст

Код: Выделить весь код
[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
CreateAppDir=no
Uninstallable=no
CreateUninstallRegKey=no

[Files]
Source: compiler:Languages\*; DestDir: {app}

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

[code]
#define A = (Defined UNICODE) ? "W" : "A"
const
    WM_USER = $0400;
    PBM_SETPOS = (WM_USER + 2);
    GWL_WNDPROC = (-4);
    GWL_USERDATA = (-21);

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam: Longint; lParam: Longint): Longint; external 'CallWindowProc{#A}@user32.dll stdcall';
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';

var
    InstPercentLabel: TLabel;

///////////////////////////////
procedure CreateInstallingPage;
begin
    { InstPercentLabel }
    InstPercentLabel := TLabel.Create(WizardForm);
    with InstPercentLabel do
    begin
        Parent := WizardForm.ProgressGauge;
        Align := alClient;
        Alignment := taCenter;
        Layout := tlCenter;
        Transparent := True;
    end;
end;

///////////////////////////////////////////////////////////////////////////////////////
function ProgressGaugeWndProc(hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint;
begin
    case Msg of
        PBM_SETPOS:
            begin
                Result := CallWindowProc(GetWindowLong(hWnd, GWL_USERDATA), hWnd, Msg, wParam, lParam);
                with WizardForm.ProgressGauge do
                    InstPercentLabel.Caption := Format('%d %%', [MulDiv(Position, 100, Max)]);
            end;
    else
        Result := CallWindowProc(GetWindowLong(hWnd, GWL_USERDATA), hWnd, Msg, wParam, lParam);
    end;
end;

///////////////////////////
procedure SubclassControls;
begin
    { ProgressGauge }
    with WizardForm.ProgressGauge do
    begin
        if GetWindowLong(Handle, GWL_USERDATA) = 0 then
            SetWindowLong(Handle, GWL_USERDATA, SetWindowLong(Handle, GWL_WNDPROC, CallbackAddr('ProgressGaugeWndProc')));
    end;
end;

///////////////////////////
procedure InitializeWizard;
begin
    CreateInstallingPage;
    SubclassControls;
end;

/////////////////////////////
procedure UnSubclassControls;
begin
    { ProgressGauge }
    with WizardForm.ProgressGauge do
    begin
        if GetWindowLong(Handle, GWL_USERDATA) > 0 then
            SetWindowLong(Handle, GWL_WNDPROC, GetWindowLong(Handle, GWL_USERDATA));
    end;
end;

////////////////////////////
procedure DeinitializeSetup;
begin
    if ExpandConstant('{wizardhwnd}') = '0' then
        Exit;
    UnSubclassControls;
end;

Цитата Николай_Николаич@vk:
Нужно что то типо этого:
Код:
if not FileExists(AddBackslash(WizardForm.DirEdit.Text) + 'Prog.exe') then
только проверка не на файл, а папку. »
Николай_Николаич@vk,
Скрытый текст

Код: Выделить весь код
function NextButtonClick(CurPageID: Integer): Boolean;
begin
    Result := True;
    case CurPageID of
        wpSelectDir:
            if DirExists(ExpandConstant('{app}\MyProg')) then
                MsgBox('bla-bla-bla', mbInformation, MB_OK);
    end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:05, 13-05-2015 | #610



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 7] El Sanchez Автоматическая установка приложений 2499 02-02-2015 08:59
Скрипты Inno Setup. Помощь и советы [часть 6] El Sanchez Автоматическая установка приложений 2494 10-03-2014 11:51
Скрипты 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




 
Переход