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

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

 

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


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

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


Хочу сделать кнопку на странице установки - "пауза" (остановить стандартную распаковку)
Есть похожий скрипт где-нибудь?

Mat_y, Parameters: "/launcher"
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:21, 24-07-2013 | #851



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

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


Старожил


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

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


Mat_y
[Icons]
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon; Parameters: /launcher;
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:35, 24-07-2013 | #852


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


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

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


vint56, и опят примного благодарен.
А есть ли способ заставить установщик найти папку на компьютере и скопировать ее в другое место?

Отправлено: 14:45, 25-07-2013 | #853


Старожил


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

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


mat_y@vk
читать дальше »
[Setup]
AppName=MyProg
AppVerName=MyProg
DefaultDirName={pf}\MyProg
DefaultGroupName=MyProg
OutputDir=.

[code]
type
Pchar = PAnsiChar;

function MoveFile(const srcFile, destFile: PChar): Integer; external 'MoveFileA@kernel32.dll stdcall';

procedure Backup (const Mydir,BackDir: string; MyFiles: array of string);
var
i:integer;
FindFiles: TFindRec;
begin
for i:=0 to GetArrayLength(MyFiles)-1 do
begin
if FindFirst(MyDir+MyFiles[i], FindFiles) then begin
if not DirExists(BackDir) then CreateDir(BackDir);
repeat MoveFile(MyDir+FindFiles.Name, BackDir+FindFiles.Name) until not FindNext(FindFiles);
FindClose(FindFiles);
RemoveDir(MyDir)
end;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
// Backup(ExpandConstant('{app}\Game\Bin\'), ExpandConstant('{app}\Backup\'),['TS3.exe','gameplay.package','*.precomp','*.bmp','*.pk3']);
Backup(ExpandConstant('{app}\Game\Bin\'), ExpandConstant('{app}\Backup\'),['*.pk3']);
// Backup(папка откуда брать файлы, папка куда перемещать файлы, файлы или маски файлов)
end;


procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then begin
Backup(ExpandConstant('{app}\Backup\'), ExpandConstant('{app}\Game\Bin\'),['*']);
end;
end;

Отправлено: 17:30, 25-07-2013 | #854


Аватара для Johny777

Ветеран


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

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


vint56, mat_y@vk, Копирование папки методом "CopyFolder" FileSystemObject-а:
(http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx)

читать дальше »
Код: Выделить весь код
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif
type
    LPCTSTR = String;

function PathIsDirectory(pszPath: LPCTSTR): BOOL; external 'PathIsDirectory{#A}@Shlwapi.dll stdcall';
function PathFileExists(pszPath: LPCTSTR): BOOL; external 'PathFileExists{#A}@Shlwapi.dll stdcall';
function SetFileAttributes(lpFileName: LPCTSTR; dwFileAttributes: DWORD): BOOL; external 'SetFileAttributes{#A}@Kernel32.dll stdcall';
function GetFileAttributes(lpFileName: LPCTSTR): DWORD; external 'GetFileAttributes{#A}@Kernel32.dll stdcall';


function CopyFolder(const Source, Destination: String; const Overwrite: Boolean): Boolean;
var
    ModifiedDestPath: String;
    oFS: Variant;
    adjAttr: BOOL;
begin
    if not PathFileExists(Source) then Exit;
    if not PathFileExists(Destination) then
    begin
        if not ForceDirectories(Destination) then Exit;
    end else if not PathIsDirectory(Destination) then Exit;
    ModifiedDestPath := AddBackslash(RemoveBackslash(Destination))
    if (GetFileAttributes(ModifiedDestPath) and FILE_ATTRIBUTE_READONLY) = FILE_ATTRIBUTE_READONLY then
    begin
        adjAttr := SetFileAttributes(ModifiedDestPath, FILE_ATTRIBUTE_NORMAL);
        if not adjAttr then Exit;
    end;

    ////////////////////////////////////////////////////
    oFS := CreateOleObject('Scripting.FileSystemObject');
    try
        Result := oFS.CopyFolder(Source, ModifiedDestPath, Overwrite);
    except
        ShowExceptionMessage();
    finally
        if adjAttr then SetFileAttributes(ModifiedDestPath, FILE_ATTRIBUTE_READONLY);
    end;
end;



procedure InitializeWizard();
begin
    CopyFolder('C:\test\VALVE\half-life 2\bin', 'C:\Copy', True);
end;


блок:
читать дальше »
Код: Выделить весь код
    if not PathFileExists(Source) then Exit;
    if not PathFileExists(Destination) then
    begin
        if not ForceDirectories(Destination) then Exit;
    end else if not PathIsDirectory(Destination) then Exit;
    ModifiedDestPath := AddBackslash(RemoveBackslash(Destination))
    if (GetFileAttributes(ModifiedDestPath) and FILE_ATTRIBUTE_READONLY) = FILE_ATTRIBUTE_READONLY then
    begin
        adjAttr := SetFileAttributes(ModifiedDestPath, FILE_ATTRIBUTE_NORMAL);
        if not adjAttr then Exit;
    end;

нужен чтоб не было исключений при копировании. Возможные причины появления исключений по ссылке выше, внизу

PS: Рекомендую копировать с перезаписью, чтоб не было исключения в случае если копируемая папка существует

Последний раз редактировалось Johny777, 25-07-2013 в 18:39. Причина: Updated

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

Отправлено: 18:06, 25-07-2013 | #855


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


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

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


vint56, Johny777, а если мне надо, чтобы папка копировалась, когда я выбрал соответствующий элемент при выборе компонентов?
Мне надо, чтобы файлы полностью скопировались из одной папки в другую, а потом часть из них заменилась на файлы из инсталлятора (записалась поверх).

Отправлено: 22:09, 25-07-2013 | #856


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


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

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


Mat_y, используй IsComponentSelected

Отправлено: 10:33, 26-07-2013 | #857


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


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

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


vint56, А ваш код будет работать без

function MoveFile(const srcFile, destFile: PChar): Integer; external 'MoveFileA@kernel32.dll stdcall';

И еще... вроде я код вставил... фаил собрался... новая папка не появилась, зато папка по указанному адресу исчезла

Цитата:
папка откуда брать файлы, папка куда перемещать файлы, файлы или маски файлов
А мне не надо перемещать... мне важно именно скопировать.

Johny777, а как в Ваш код добавить IsComponentSelected?
CopyFolder('C:\test\VALVE\half-life 2\bin', 'C:\Copy', True); можно заменить на CopyFolder('{app}\1\', '{app}\2\, True); ???

Отправлено: 15:59, 26-07-2013 | #858


Ветеран


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

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


Цитата mat_y@vk:
Johny777, а как в Ваш код добавить IsComponentSelected? »
Копирование папки на шаге PostInstall, если выбран соответствующий компонент. Только в качестве примера.
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputBaseFilename=1
OutputDir=...

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

[Components]
Name: copyfolder; Description: Копировать папку;

[Code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif
type
    LPCTSTR = String;

function PathIsDirectory(pszPath: LPCTSTR): BOOL; external 'PathIsDirectory{#A}@Shlwapi.dll stdcall';
function PathFileExists(pszPath: LPCTSTR): BOOL; external 'PathFileExists{#A}@Shlwapi.dll stdcall';
function SetFileAttributes(lpFileName: LPCTSTR; dwFileAttributes: DWORD): BOOL; external 'SetFileAttributes{#A}@Kernel32.dll stdcall';
function GetFileAttributes(lpFileName: LPCTSTR): DWORD; external 'GetFileAttributes{#A}@Kernel32.dll stdcall';


function CopyFolder(const Source, Destination: String; const Overwrite: Boolean): Boolean;
var
    ModifiedDestPath: String;
    oFS: Variant;
    adjAttr: BOOL;
begin
    if not PathFileExists(Source) then Exit;
    if not PathFileExists(Destination) then
    begin
        if not ForceDirectories(Destination) then Exit;
    end else if not PathIsDirectory(Destination) then Exit;
    ModifiedDestPath := AddBackslash(RemoveBackslash(Destination))
    if (GetFileAttributes(ModifiedDestPath) and FILE_ATTRIBUTE_READONLY) = FILE_ATTRIBUTE_READONLY then
    begin
        adjAttr := SetFileAttributes(ModifiedDestPath, FILE_ATTRIBUTE_NORMAL);
        if not adjAttr then Exit;
    end;

    ////////////////////////////////////////////////////
    oFS := CreateOleObject('Scripting.FileSystemObject');
    try
        Result := oFS.CopyFolder(Source, ModifiedDestPath, Overwrite);
    except
        ShowExceptionMessage();
    finally
        if adjAttr then SetFileAttributes(ModifiedDestPath, FILE_ATTRIBUTE_READONLY);
    end;
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
  case CurStep of
      ssPostInstall: if IsComponentSelected('copyfolder') then CopyFolder(ExpandConstant('{app}\1'), ExpandConstant('{app}\2'), True);
  end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:09, 26-07-2013 | #859


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


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

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


Ребят может вы поможете, возникла такая проблема через SrepInside жму файлы, в батнике пишу arc.exe a -ep1 -dses --dirs -s; -lc- -di -i2 -r -msrep:l256+lzma:a1:mfbt4:d200m:fb128:mc1000:lc8 data.arc packeddata\* (как обычно я делал) но теперь выдаёт ошибку ISDone.dll Понимаю что не в тему, но может кто знает подскажите

Отправлено: 19:48, 26-07-2013 | #860



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




 
Переход