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

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

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

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

Ветеран


Contributor


Сообщения: 1274
Благодарности: 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

 

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


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

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


Доброго времени суток. Помогите реализовать:
необходимо, чтобы в процессе установки копировалось содержимое компонента 1, затем запускался exe-файл, (если выбраны оба компонента) компируется содержимое компонента 2 и снова запускается тот же exe-файл. Но по умолчанию в инно, в начале скопируются файлы (содержимое) и только потом запустится секция run.
файл 1 - запуск exe - файл 2 - запуск exe
Возможно я не вижу элементарного, подскажите, как это реализовать.

Отправлено: 01:31, 16-07-2013 | #781



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

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


Ветеран


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

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


Цитата ToBeLife:
Но по умолчанию в инно, в начале скопируются файлы (содержимое) и только потом запустится секция run.
файл 1 - запуск exe - файл 2 - запуск exe »
Пример
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=none


[Components]
Name: a; Description: Компонент 1; Types: full
Name: b; Description: Компонент 2; Types: custom


[Files]
;Компонент 1
Source: c:\windows\fonts\*; DestDir: {app}; Components: a; Flags: ignoreversion external;
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Afterinstall: My_Exec(1); Components: a; Flags: ignoreversion;
;Компонент 2
Source: c:\windows\help\*; DestDir: {app}; Components: b; Flags: recursesubdirs overwritereadonly createallsubdirs ignoreversion external;
Source: compiler:Examples\MyProg.exe; DestDir: {app}; DestName: MyProg2.exe; Afterinstall: My_Exec(2); Components: b; Flags: ignoreversion;


[Code]
procedure My_Exec(const Number: Integer);
var
    i: Integer;
begin
    case Number of
        1: Exec(ExpandConstant('{app}\MyProg.exe'), '', ExpandConstant('{app}'), 5, ewWaitUntilTerminated, i);   //Ексишник первого компонента с ожиданием
        2: Exec(ExpandConstant('{app}\MyProg2.exe'), '', ExpandConstant('{app}'), 5, ewWaitUntilTerminated, i);   //Ексишник второго компонента с ожиданием
    end;
end;

Последний раз редактировалось saurn, 16-07-2013 в 03:58.

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

Отправлено: 02:46, 16-07-2013 | #782


Ветеран


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

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


Всем привет Есть ли возможность вывести в кастомный лейбл имена копируемых файлов(не полный путь, а имя конечной папки и текущего копируемого файла), когда для них установлен флаг external? CurrentFileName, ExtractFileDir, ExtractRelativePath в данном случае не работают.

Отправлено: 19:05, 17-07-2013 | #783


Аватара для Johny777

Ветеран


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

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


saurn, Так можно:
читать дальше »

Код: Выделить весь код


[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application\My Application\My Application\My Application\My Application\My Application\My Application\My Application\My Application\My Application\My Application777


[Files]
Source: {fonts}\*; DestDir: {app}; Flags: external;



[Code  ]
#define A = (Defined UNICODE) ? "W" : "A"

const
    GWL_WNDPROC = -4;
    WM_PAINT = $000F;


type
    WPARAM = Integer;
    LPARAM = Integer;
    LRESULT = Integer;
    TFNWndProc = Integer;


function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'CallWindowProc{#A}@user32.dll stdcall';

var
   OldStaticProcAddr: Longint;


function StaticWindowdProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
var
    BuffPath: String;
begin
    if Msg = WM_PAINT then
    begin
        BuffPath := WizardForm.FilenameLabel.Caption;
        WizardForm.Caption := ExtractFilePath(BuffPath) + #32#32 + ExtractFileName(BuffPath);
    end;

    Result:= CallWindowProc(OldStaticProcAddr, hWnd, Msg, wParam, lParam);
end;

procedure InitializeWizard();
begin
    WizardForm.FilenameLabel.Width := WizardForm.FilenameLabel.Width * 7;
    WizardForm.Width := 1400;
    OldStaticProcAddr := SetWindowLong(WizardForm.FilenameLabel.Handle, GWL_WNDPROC, CallbackAddr('StaticWindowdProc'));
end;

procedure DeinitializeSetup();
begin
    SetWindowlong(WizardForm.FilenameLabel.Handle, GWL_WNDPROC, OldStaticProcAddr);
end;



Только вот инно по дефолту укорачивает длинный путь многоточием, чтоб уместить в длину статик текста. Решение - удлинить статик текст.
Для примера отображаю всё в заголовке формы

PS: как вариант копировать через код. Если решение выше не устраивает - говори. Будем делать через код
Максимальный путь в винде равен 260 (+1) символов

Последний раз редактировалось Johny777, 17-07-2013 в 21:40.

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

Отправлено: 21:28, 17-07-2013 | #784


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


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

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


Доброе время суток, подскажите пожалуйста, сделал рекомпрессию прекомпом, в батнике написал Precomp041.exe - slow -c- "название файла", но распаковка потом не идёт, выдаёт ошибку запуска концольного приложения Precomp041, в чём проблема?

Отправлено: 21:44, 17-07-2013 | #785


Ветеран


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

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


Johny777, благодарю. Да я обратился к этой теме скорее для повышения кругозора, чем из необходимости. Inno своими средствами выводит имена файлов, просто я обрезал строку FileNameLabel, чтобы отображалась только последняя папка и имя копируемого файла, и когда начинается копирование внешних файлов строка получается пустой.
-----------------------------------------------------------------
UPD
Твой способ, как раз то, что нужно. Лишь исправил немножко на:
Код: Выделить весь код
BuffPath := WizardForm.FilenameLabel.Caption;
WizardForm.Caption := ExtractRelativePath(ExtractFileDir(BuffPath), BuffPath);
Спасибо
-----------------------------------------------------------------
Fakt_37, оффтоп
Цитата El Sanchez:
Внимание! Данная тема предназначена только для обсуждения написания скриптов ! »

Последний раз редактировалось saurn, 17-07-2013 в 22:01.


Отправлено: 21:45, 17-07-2013 | #786


Аватара для Johny777

Ветеран


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

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


saurn,
Цитата saurn:
только последняя папка »
пардон (не сделал в перд. коде), имя последней папки пути (путь без имени файла на конце) получаешь так:

читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application\Folder\saurn


[code  ]
function GetLastPathFolderName(const UndefPath: String): String;
var
    Len, i: Integer;
    BuffStr: String;
begin
    BuffStr := RemoveBackslash(UndefPath);
    Len := Length(BuffStr);
    for i := Len downto 1 do
    begin
        if BuffStr[i] = '\' then Break;
        Result := Result + BuffStr[i];
    end;
    
    BuffStr := Result;
    Result := '';
    Len := Length(BuffStr);
    for i := Len downto 1 do Result := Result + BuffStr[i];
end;


procedure InitializeWizard();
begin
    MsgBox(GetLastPathFolderName(WizardForm.DirEdit.Text), mbInformation, MB_OK);
end;


или так MsgBox(ExtractFileName(ExtractFileName(WizardForm.DirEdit.Text)), mbInformation, MB_OK);

PS: функция GetLastPathFolderName написана на низком уровне, работает бетонно. В Си была бы длиннее, тк нужно было бы писать вручную RemoveBackslash() и Length()
Скорость работы GetLastPathFolderName на максимальном уровне. Всё остальное зависит от компилятора и я фиг знает как написана ExtractFileName. Поэтому к ExtractFileName нет доверия

Последний раз редактировалось Johny777, 17-07-2013 в 22:29.

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

Отправлено: 22:11, 17-07-2013 | #787


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


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

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


Цитата saurn:
Fakt_37, оффтоп
Цитата El Sanchez:
Внимание! Данная тема предназначена только для обсуждения написания скриптов ! » »
я знаю что ключ "-slow- -c-" нужно написать в скрипт, только не знаю куда, и мой вопрос относится к вашей теме!

Отправлено: 22:12, 17-07-2013 | #788


Аватара для R.i.m.s.k.y.

Ветеран


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

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


Необходимо простому пользователю поставить программу, требующую админские права.
Если запустить от админа - то все переменные пользователя инно определит админские, а не оригинального пользователя
Конкретно нужна папка appdata оригинального пользователя и его же HKCU
RunAsOriginalUser не решает
Как обойти грабли?

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Последний раз редактировалось R.i.m.s.k.y., 17-07-2013 в 22:49.


Отправлено: 22:34, 17-07-2013 | #789


Аватара для Johny777

Ветеран


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

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


R.i.m.s.k.y., поднятие привилегий собственному процессу не поможет? пример понятия привилегий в шапке, в "закрытии процесса".
возможные привилегии:
читать дальше »
Код: Выделить весь код
const
    SE_CREATE_TOKEN_NAME = 'SeCreateTokenPrivilege';
    SE_ASSIGNPRIMARYTOKEN_NAME = 'SeAssignPrimaryTokenPrivilege';
    SE_LOCK_MEMORY_NAME = 'SeLockMemoryPrivilege';
    SE_INCREASE_QUOTA_NAME = 'SeIncreaseQuotaPrivilege';
    SE_UNSOLICITED_INPUT_NAME = 'SeUnsolicitedInputPrivilege';
    SE_MACHINE_ACCOUNT_NAME = 'SeMachineAccountPrivilege';
    SE_TCB_NAME = 'SeTcbPrivilege';
    SE_SECURITY_NAME = 'SeSecurityPrivilege';
    SE_TAKE_OWNERSHIP_NAME = 'SeTakeOwnershipPrivilege';
    SE_LOAD_DRIVER_NAME = 'SeLoadDriverPrivilege';
    SE_SYSTEM_PROFILE_NAME = 'SeSystemProfilePrivilege';
    SE_SYSTEMTIME_NAME = 'SeSystemtimePrivilege';
    SE_PROF_SINGLE_PROCESS_NAME = 'SeProfileSingleProcessPrivilege';
    SE_INC_BASE_PRIORITY_NAME = 'SeIncreaseBasePriorityPrivilege';
    SE_CREATE_PAGEFILE_NAME = 'SeCreatePagefilePrivilege';
    SE_CREATE_PERMANENT_NAME = 'SeCreatePermanentPrivilege';
    SE_BACKUP_NAME = 'SeBackupPrivilege';
    SE_RESTORE_NAME = 'SeRestorePrivilege';
    SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
    SE_DEBUG_NAME = 'SeDebugPrivilege';
    SE_AUDIT_NAME = 'SeAuditPrivilege';
    SE_SYSTEM_ENVIRONMENT_NAME = 'SeSystemEnvironmentPrivilege';
    SE_CHANGE_NOTIFY_NAME = 'SeChangeNotifyPrivilege';
    SE_REMOTE_SHUTDOWN_NAME = 'SeRemoteShutdownPrivilege';
    SE_UNDOCK_NAME = 'SeUndockPrivilege';
    SE_SYNC_AGENT_NAME = 'SeSyncAgentPrivilege';
    SE_ENABLE_DELEGATION_NAME = 'SeEnableDelegationPrivilege';
    SE_MANAGE_VOLUME_NAME = 'SeManageVolumePrivilege';
    SE_IMPERSONATE_NAME = 'SeImpersonatePrivilege';
    SE_CREATE_GLOBAL_NAME = 'SeCreateGlobalPrivilege';

описание каждой привилегии: http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

ай-ди своего процесса получаешь WinApi-функцией GetCurrentProcessId()
Получить иня пользователя запустившего экзешник можно http://www.delphimaster.net/view/4-1107175032 в 5-м сообщении например рабочий пример (протестировал на делфи)

Последний раз редактировалось Johny777, 17-07-2013 в 23:11.

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

Отправлено: 22:56, 17-07-2013 | #790



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




 
Переход