Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]
Dodakaedr
25-05-2014, 20:55
Поделитесь кто-нибудь библиотекой ISTaskU.dll.
Kashtan007
27-05-2014, 13:25
Всем привет.
Как в установщике ставятся приоритеты на установку.
Ну вот допустим у меня компоненты в такой структуре
Программа
-1
-2
-3
Патч для программы
-1
-2
Сначала же будет ставить программу, а потом устанавливать на неё патч?
Либо же нужно ставить какой-то приоритет? Чтобы патч устанавливался после программы.
Kashtan007, файлы устанавливаются в том порядке, в котором указаны в секции Files, сверху вниз.
Kashtan007, из справки - "All entries are processed by the installer in the order they appear in a section", т е все элементы обрабатываются установщиком в том порядке, в каком они указаны. По идее, чтобы патч ставился после программы, вам надо указать файлы, элементы секции Run и прочее в правильном порядке.
Поделитесь кто-нибудь библиотекой ISTaskU.dll. »
Dodakaedr, Юникодной нет есть обычная если пригодиться.
Dodakaedr
27-05-2014, 17:25
Юникодной нет есть обычная если пригодиться. »
Спасибо, но обычная у меня есть....
Mailchik
27-05-2014, 17:26
Dodakaedr, http://forum.oszone.net/post-2291020-1870.html
Dodakaedr
27-05-2014, 17:44
Mailchik, Знаю, уже давали, но файл удален...
Mailchik, [Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
Source: "ISTaskU.dll"; Flags: dontcopy;
[ Code]
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTaskU.dll stdcall';
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTaskU.dll stdcall';
function InitializeSetup(): Boolean;
begin
If RunTask('aimp3.exe', false) then begin
if MsgBox('Закрыть AIMP?', mbError, mb_YesNo) = idYes then begin
KillTask('aimp3.exe');
Result := True;
end else
Exit;
end;
Result := True;
end;
При использовании этого кода вместе с procedure DeinitializeSetup();
begin
gdipShutdown;
islogo_three(WizardForm.Handle);
end; появляется ошибка "Could not call proc." при нажатии на "Нет". Подскажите как решить эту проблему.
появляется ошибка "Could not call proc." при нажатии на "Нет". Подскажите как решить эту проблему. »
[Code]
var
Init: Boolean;
procedure InitializeWizard();
begin
...
Init := True;
...
end;
procedure DeinitializeSetup();
begin
if Init <> False then
begin
gdipShutdown;
islogo_three(WizardForm.Handle);
end;
end;
Dodakaedr
27-05-2014, 18:33
saurn, Спс! Сработало. Скажите, пожалуйста, правильно ли я указываю код на удаление файла при деинсталяции? Потому что он не удаляется ни через код ни через [UninstallDelete]:procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
begin
if FileExists('msimg32.dll') then DeleteFile('msimg32.dll');
end;
end;
Dodakaedr, это же системный файл. По вопросу: надо указывать абсолютный путь к файлу.
habib2302
27-05-2014, 19:13
всем привет. дайте пожалуйста скрипт на распаковку запароленных arc архивов. (не весь isdone т.е без всяких оформлений инстайла, без лишних файлов и т.д)
Dodakaedr
27-05-2014, 19:33
это же системный файл. По вопросу: надо указывать абсолютный путь к файлу. »
Абсолютный??? Тоисть так тоже не пойдет?procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
begin
if FileExists(ExpandConstant('{app}\msimg32.dll')) then DeleteFile(ExpandConstant('{app}\msimg32.dll'));
if FileExists(ExpandConstant('{app}\IsTaskU.dll')) then DeleteFile(ExpandConstant('{app}\IsTaskU.dll'));
end;
end;
Как удалять такие файлы?
saneksanek
27-05-2014, 22:08
Dodakaedr,
[Files]
Source: Dll\msimg32.dll;DestDir: {app}; Flags: ignoreversion; Attribs: hidden system;
Source: Dll\IsTaskU.dll;DestDir: {app}; Flags: ignoreversion; Attribs: hidden system;
sergey3695
27-05-2014, 22:10
Dodakaedr, блин гугл еще робит (сам проверил :) ). (насчет что такое абсолютный путь).
По сути дела: msimg32.dll - системная библиотека, не удалять! IsTaskU.dll - как у тебя, удалять!
habib2302, справку дать?
function ISArcExtract
function ISArcExtract (CurComponent: Cardinal; PctOfTotal: double; InputFile, OutputPath, ExtractedPath: string; DeleteInFile: boolean; Password, CfgFile, WorkPath: string; ExtractPCF:boolean):boolean;
распаковывает arc архив(ы), заданный(ые) папкой и именем файла в InputFile, в каталог, указанный в OutputPath.
ExtractedPath - используется для распаковки части архива. Указывается имя папки, которая будет извлечена. Если данная фитча не требуется, то оставляйте данный параметр пустой строкой. Значение '*' распаковывает весь архив с последующим извлечением всех подкаталогов из корневых папок архива (мож кому понадобится);
CfgFile - путь и имя конфигурационного файла (arc.ini). Требуется для распаковки .arc архивов, созданных с использованием внешних компрессоров;
WorkPath - рабочий путь для распаковки временных файлов freearc'ом. Если при распаковке архива freearc создает большие темп-файлы (обычно это происходит если используются внешние компрессоры), то рекомендуется устанавливать рабочую папку в {app}, а то у пользователя может не быть места на системном диске, куда по умолчанию freearc пытается поместить темп-файл;
Password - пароль для распаковки архива(ов);
ExtractPCF - может иметь значение true или false. При распаковке FreeArc архива определяет будут ли распаковываться .pcf файлы "на лету". При активации данного режима при извлечении из .arc архива для каждого распакованного файла с расширением .pcf будет запускаться precomp, извлекающий данные из этого файла в ту же папку, и после удаляющий исходный. По идее данный режим должен увеличить скорость распаковки FreeArc архивов, содержащий много небольших pcf файлов, потому как сразу после извлечения одного из них, пока он еще будет находиться в кэше винды, можно быстренько его обработать precomp'ом, с минимальным обращением к винчестеру. Но на практике у меня получалось иначе, по крайней мере на XP (возможно на Win7 такой способ и выиграет стандартный 7z(без сжатия)+precomp+freearc).
В скрипте для параметра ExtractPCF применены константы notPCFonFLY и PCFonFLY - это на самом деле просто соответственно false и true. Применение таких констант позволит избежать путаницы с другим подобным параметром в функции распаковки arc-архивов - удалением входного архива (DeleteInFile).
Например:
if not ISArcExtract (0, 100, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}\data'), '', false, 'Password', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'), notPCFonFLY) then break;
распаковывает все архивы с расширением .arc из папки {src} (сканировать подкаталоги или нет задается в функции инициализации поиска FileSearchInit) в папку {app}\data\ без удаления исходного файла, с ручным распределением процентов (без тестового прогона, распределение происходит по размерам исходных архивов), паролем «Password», файлом конфигурации {tmp}\arc.ini и рабочей папкой в {app}, без извлечения .pcf файлов "на лету".
saneksanek, это как файлы скрыть. Установка атрибута.
habib2302
27-05-2014, 22:19
sergey3695, а скрипт?
Dodakaedr
27-05-2014, 22:33
По сути дела: msimg32.dll - системная библиотека, не удалять! IsTaskU.dll - как у тебя, удалять! »
Мне надо оба файла удалить, чтобы не оставались следы программы. msimg32.dll - это для патча, IsTaskU.dll - вы сами знаете для чего. Если я правильно понял то надо так:
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
begin
if FileExists(ExpandConstant('{pf}\My Prog\msimg32.dll')) then DeleteFile(ExpandConstant('{pf}\My Prog\msimg32.dll'));
if FileExists(ExpandConstant('{pf}\My Prog\IsTaskU.dll')) then DeleteFile(ExpandConstant('{pf}\My Prog\IsTaskU.dll'));
end;
end;
Или как? Дайте пример. Желательно чтобы через константу {app}, чтобы пользователь смог сам указывать куда устанавливать программу.
saneksanek
27-05-2014, 22:52
Dodakaedr, Вы пробовали что я дал? добавьте флаг и секция унистал не нужна будет
Dodakaedr
27-05-2014, 23:00
saneksanek, Это не то. Мне нужно их удалить, а вы предлагаете их сделать скрытыми и системными...
sergey3695
27-05-2014, 23:13
habib2302, мда, например это не пример.
Password - пароль для распаковки архива(ов);
function ISArcExtract (CurComponent: Cardinal; PctOfTotal: double; InputFile, OutputPath, ExtractedPath: string; DeleteInFile: boolean; Password, CfgFile, WorkPath: string; ExtractPCF:boolean):boolean;
Например:
if not ISArcExtract (0, 100, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}\data'), '', false, 'Password', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'), notPCFonFLY) then break; если так с выделением непонятно. я не знаю тогда.
Dodakaedr, хочешь сказать что так не удалит
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then // Или usPostUninstall без разницы тут
begin
if FileExists(ExpandConstant('{app}\msimg32.dll')) then DeleteFile(ExpandConstant('{app}\msimg32.dll'));
if FileExists(ExpandConstant('{app}\IsTaskU.dll')) then DeleteFile(ExpandConstant('{app}\IsTaskU.dll'));
end;
end;если {app} путь включая папку установки и там лежат файлы. твой же скрипт. поверял то хоть?
также можно флаг Flags: uninsremovereadonly
uninsremovereadonly При удалении файла убираются все атрибуты "только для чтения" перед попыткой удаления
Это из справки.
ignoreversion Не сверять версии; перемещать существующие файлы не обращая внимание на номера версий.
Этот флаг применим только к файлам вашего приложения, но не к общедоступным файлам.
Вы проверяете код или так спрашиваете?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC