Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 6]
habib2302
19-10-2013, 19:16
saurn, оригинальный установщик написан на inno setup на версии 5.5.3
помоги с ошибкой в этом скрипте
[CustomMessages]
Russian.Msg2=Удалить настройки программы находящиеся по адресу:
English.Msg2=Delete the program settings are at:
Ukrainian.Msg2=Видалити налаштування програми знаходяться за адресою:
Russian.Msg3=Удаление настроек
English.Msg3=Removal options
Ukrainian.Msg3=Видалення налаштувань
[code ]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
case CurUninstallStep of
usPostUninstall:
if DirExists(AddBackslash(ExpandConstant('{userappdata}')) + 'Atomic Alarm Clock 6') then
begin
if MsgBoxEx(0, (CustomMessage('Msg2') + #13#13 + AddQuotes(AddBackslash(ExpandConstant('{userappdata}')) + 'Atomic Alarm Clock 6')), (CustomMessage('Msg3'), $00000004 or $00000020, 0, 0) = IDYES then
DelTree(AddBackslash(ExpandConstant('{userappdata}')) + 'Atomic Alarm Clock 6', True, True, True);
end;
end;
end;
http://img42.imageshack.us/img42/8843/brt7.png (http://img844.imageshack.us/img844/9944/54ub.png)
помоги с ошибкой в этом скрипте »
Куча лишних скобок была.
[code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
case CurUninstallStep of
usPostUninstall:
if DirExists(AddBackslash(ExpandConstant('{userappdata}')) + 'Atomic Alarm Clock 6') then
begin
if MsgBoxEx(0, CustomMessage('Msg2') + #13#13 + AddQuotes(AddBackslash(ExpandConstant('{userappdata}')) + 'Atomic Alarm Clock 6'), CustomMessage('Msg3'), $00000004 or $00000020, 0, 0) = IDYES then
DelTree(AddBackslash(ExpandConstant('{userappdata}')) + 'Atomic Alarm Clock 6', True, True, True);
end;
end;
end;
habib2302
19-10-2013, 21:58
как сделать так, чтобы процесс был завершен до удаления приложения?скрипт из шапки он завершает процесс до установки
как сделать так, чтобы процесс был завершен до удаления приложения?скрипт из шапки он завершает процесс до установки »
В оригинальном скрипте функция TerminateApp(...) вызывается в процедуре InitializeWizard, то есть в момент инициализации мастера установки. В вашем случае логичным будет вызывать ее, функцию, в момент инициализации удаления - в функции InitializeUninstall или в InitializeUninstallProgressForm.
habib2302
19-10-2013, 22:25
скрипт на завершение процесса не работает и как решить проблему со скриптом на удаление др. версий приложения при старте.
как сделать так, чтобы процесс был завершен до удаления приложения? »
[Files]
Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion
[Code]
// функции используемые при деинсталляции
// RunTask@{app}\ISTask.dll - название функции (в данном случае, если программа работает)
// и путь dll'ки где она расположена...
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function KillTask(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
if RunTask('winamp.exe', False) then
begin
// прячем форму
UninstallProgressForm.Visible:= False;
if MsgBox('Программа winamp.exe используется. Закрыть и продолжить удаление?', mbConfirmation, MB_YESNO) = IDYES then
begin
KillTask('winamp.exe');
UnloadDll(ExpandConstant('{app}\ISTask.dll'));
// показываем форму
UninstallProgressForm.Visible:= True;
end
else
begin
MsgBox('Завершите работу winamp.exe, затем снова запустите программу удаления.', mbInformation, MB_OK);
UnloadDll(ExpandConstant('{app}\ISTask.dll'));
Abort;
end;
end;
end;
habib2302
20-10-2013, 00:04
Nordek, тоже не работает
тоже не работает »Что значит не работает?
А в
if RunTask('winamp.exe', False) then
KillTask('winamp.exe');
вместо winamp.exe свой exe-шник прописывал (т.е завершаемый процесс)?
Учти, срабатывает после того как кликнешь деинсталлировать. Потом соглашаешься нажатием кнопки "Да" и только тогда выскочит диалог о завершении процесса.
habib2302
20-10-2013, 00:49
Nordek, да вписывал
смотри (http://www.youtube.com/watch?v=Rhkrl4Vu7XM)
habib2302 если ты компилируеш проэкт на unicode он работать не будет IsTask работает только в ansi версий
habib2302
20-10-2013, 11:37
vint56, так у меня и стоит ansi
Nightwishh
20-10-2013, 16:09
Здравствуйте. Прошу помощи. Есть функция "размер места на диске для выбранных компонентов"function GetComponentSpace(): Currency;
var
ComponentSpace, LabelSpace: string;
StartLen, EndLen, SpaceLen: integer;
begin
ComponentSpace:= SetupMessage(msgComponentsDiskSpaceMBLabel);
LabelSpace:= WizardForm.ComponentsDiskSpaceLabel.Caption;
StartLen:= Pos('[mb]', ComponentSpace);
SpaceLen:= Length(LabelSpace) - Length(ComponentSpace) + 4;
ComponentSpace:= Copy(LabelSpace, StartLen, SpaceLen);
Result:= StrToFloat(Trim(ComponentSpace));
end; Как мне перенести "Текущий выбор требует не менее ??? Мб на диске" на лейбл. Пробовал так[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Types]
Name: custom; Description: Выборочная; Flags: iscustom
[Components]
Name: a; Description: Моя программа; ExtraDiskSpaceRequired: 15000000; Types: custom
Name: aa; Description: Руководство пользователя; ExtraDiskSpaceRequired: 2655285235; Types: custom
Name: aaa; Description: Русский; ExtraDiskSpaceRequired: 5587282385; Types: custom
[ Code]
var
SpaceComponentsLabel: TLabel;
function GetComponentSpace(): Currency;
var
ComponentSpace, LabelSpace: string;
StartLen, EndLen, SpaceLen: integer;
begin
ComponentSpace:= SetupMessage(msgComponentsDiskSpaceMBLabel);
LabelSpace:= SpaceComponentsLabel.Caption;
StartLen:= Pos('[mb]', ComponentSpace);
SpaceLen:= Length(LabelSpace) - Length(ComponentSpace) + 4;
ComponentSpace:= Copy(LabelSpace, StartLen, SpaceLen);
Result:= StrToFloat(Trim(ComponentSpace));
end;
procedure InitializeWizard();
begin
WizardForm.ComponentsDiskSpaceLabel.Hide;
SpaceComponentsLabel:= TLabel.Create(WizardForm);
with SpaceComponentsLabel do
begin
Parent := WizardForm.SelectComponentsPage;
AutoSize := False;
Left := ScaleX(0);
Top := ScaleY(216);
Width := ScaleX(417);
Height := ScaleY(14);
end;
end; ничего невыходит
Nightwishh, немного измененный пример от Johny777
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[Components]
Name: a; Description: Моя программа; ExtraDiskSpaceRequired: 15000000; Types: full custom;
Name: aa; Description: Руководство пользователя; ExtraDiskSpaceRequired: 2655285235; Types: custom
Name: aaa; Description: Русский; ExtraDiskSpaceRequired: 5587282385; Types: custom
[Code]
var
OldCompListOnClickCheckProc: TNotifyEvent;
SpaceComponentsLabel: TLabel;
function GetFloatFormText(const UndefText: String): String;
var
i: Integer;
begin
for i := 1 to Length(UndefText) do
case UndefText[i] of
'0','1','2','3','4','5','6','7','8','9': Result := Result + UndefText[i];
',': Result := Result + '.';
end;
end;
procedure ComponentsListOnClickCheck(Sender: TObject);
begin
OldCompListOnClickCheckProc(TNewCheckListBox(Sender));
SpaceComponentsLabel.Caption := 'Дополнительно требуется не менее' + #32 + GetFloatFormText(WizardForm.ComponentsDiskSpaceLabel.Caption) + #32 + 'Мб';
end;
procedure InitializeWizard();
begin
WizardForm.ComponentsDiskSpaceLabel.Hide;
OldCompListOnClickCheckProc := WizardForm.ComponentsList.OnClickCheck;
WizardForm.ComponentsList.OnClickCheck := @ComponentsListOnClickCheck;
SpaceComponentsLabel:= TLabel.Create(nil);
with SpaceComponentsLabel do
begin
Parent := WizardForm.SelectComponentsPage;
SetBounds(ScaleX(WizardForm.ComponentsDiskSpaceLabel.Left), ScaleY(WizardForm.ComponentsDiskSpaceLabel.Top), ScaleX(WizardForm.ComponentsDiskSpaceLabel.Width), ScaleY(WizardForm.ComponentsDiskSpaceLabel.Height));
AutoSize := False;
Font.Style := [fsBold];
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
wpSelectComponents: ComponentsListOnClickCheck(WizardForm.ComponentsList);
end;
end;
Оригинальный пост (http://forum.oszone.net/post-2121994-26.html)
-------------------------------------------------------------------------------------
и как решить проблему со скриптом на удаление др. версий приложения при старте. »
Надо бы глянуть, что пишет приложение в реестр, в HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Nightwishh
21-10-2013, 22:57
saurn, Спасибо Вам за скрипт и за оригинал спасибо Johny777, но образовался вопрос. Можно ли сделать так чтобы числа не отражались вот так: 7876.5 Мб, а чтобы запись была в таком формате: 7 876.5 Мб, а то читать сложновато? :) Спасибо за внимание.
Dinvin4ester
21-10-2013, 23:33
Ребята помогите!
Что надо прописать, чтобы по умолчанию напротив необходимого элемента стояла галочка (которую при необходимости можно было отключить). например, установка доп. ПО или русификатора?
Что надо прописать, чтобы по умолчанию напротив необходимого элемента стояла галочка (которую при необходимости можно было отключить). »
Компоненты
[Components]
Name: a; Description: AAA; Types: full
Name: a; Description: AAA
Здесь обрати внимание на ; Types: full, если нужно чтоб выбиралось то вставь ; Types: full.
full - это полная установка.
custom - это выборочная установка
compact - это компактная установка.
Задачи
[Tasks]
Name: a; Description: A
Name: a; Description: A; Flags: unchecked
Обрати внимание на Flags: unchecked если нужно чтоб выбиралось, то убери Flags: unchecked.
Господа! такой вопрос...
При повторном запуске программы установки и выборе другого компонента (допустим стоял 1 компонент, а хочу поставить 2-й компонент.... они помечены флагом: Flags: exclusive) появляется такое окошко...
http://s020.radikal.ru/i714/1310/cd/915323ab036f.png
... при этом в установщике настроено поле, которое полностью очищает папку, в которую ставятся компоненты перед установкой...
[InstallDelete]
Type: filesandordirs; Name: {app}\{#AppVerName}
1) Я так понял, что [InstallDelete] срабатывает только при первичной установке компонентов, а потом игнорируется?
2) Как можно сделать, чтобы окошко (упомянутое вше) не выскакивало?
Как можно сделать, чтобы окошко (упомянутое вше) не выскакивало? »[Setup]: UsePreviousSetupType
Возможные значения:
yes или no
Значение по умолчанию:
yes
Описание:
При значении директивы yes, в начале установки инсталлятор поищет в реестре, не была ли установлена данная программа на данном компьютере, и если так, будет использовать тип и компоненты предыдущей установки, которые выбрал пользователь в прошлый раз при установке, как по умолчанию.
Если Uninstallable=no, эта директива имеет значение no.
Можно ли сделать так чтобы числа не отражались вот так: 7876.5 Мб, а чтобы запись была в таком формате: 7 876.5 Мб, а то читать сложновато? »
Чето я в прошлый раз заморочился, можно было сделать гораздо проще :)
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[Languages]
Name: Russian; MessagesFile: compiler:Languages\Russian.isl
[Components]
Name: a; Description: Моя программа; ExtraDiskSpaceRequired: 15000000; Types: full custom;
Name: aa; Description: Руководство пользователя; ExtraDiskSpaceRequired: 2655285235; Types: custom
Name: aaa; Description: Русский; ExtraDiskSpaceRequired: 5587282385; Types: custom
[Code]
var
OldCompListOnClickCheckProc: TNotifyEvent;
SpaceComponentsLabel: TLabel;
procedure ComponentsListOnClickCheck(Sender: TObject);
begin
OldCompListOnClickCheckProc(TNewCheckListBox(Sender));
SpaceComponentsLabel.Caption := WizardForm.ComponentsDiskSpaceLabel.Caption;
end;
procedure InitializeWizard();
begin
WizardForm.ComponentsDiskSpaceLabel.Hide;
OldCompListOnClickCheckProc := WizardForm.ComponentsList.OnClickCheck;
WizardForm.ComponentsList.OnClickCheck := @ComponentsListOnClickCheck;
SpaceComponentsLabel:= TLabel.Create(nil);
with SpaceComponentsLabel do
begin
Parent := WizardForm.SelectComponentsPage;
SetBounds(ScaleX(WizardForm.ComponentsDiskSpaceLabel.Left), ScaleY(WizardForm.ComponentsDiskSpaceLabel.Top), ScaleX(WizardForm.ComponentsDiskSpaceLabel.Width), ScaleY(WizardForm.ComponentsDiskSpaceLabel.Height));
AutoSize := False;
Font.Style := [fsBold];
Font.Color := $0000FF;
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
wpSelectComponents: ComponentsListOnClickCheck(WizardForm.ComponentsList);
end;
end;
Farser21
22-10-2013, 17:09
Всем доброго времени суток. Возник такой вопрос. Насчет скрипта который отвечает за удаление. Что у меня не так?
Получается после установки содержимого через установщик в отдельную папку все норм удаляет только то что установилось. А вот когда устанавливаешь в папку с другими файлами то удаляет не только что установилось а все содержимое той папки.
Скрипт
#include "botva2.iss"
#include "BASS_Module.iss"
[Setup]
SourceDir=.
OutputDir=Setup
AppName=Сборка модов
AppVerName=Сборка модов
AppVersion=0.8.9
DefaultDirName={pf}\World_of_Tanks
DefaultGroupName=Сборка модов
AllowNoIcons=yes
OutputBaseFilename=setup
WizardImageFile=C:\Users\Farser\Desktop\1.bmp
WizardSmallImageFile=C:\Users\Farser\Desktop\2.bmp
SetupIconFile=C:\Users\Farser\Desktop\back.ico
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
Compression=lzma/normal
DiskSpanning=yes
DiskSliceSize=2100000000
SlicesPerDisk=1
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Components]
Name: g0; Description: Разное; Flags: dontinheritcheck
Name: g0\c55; Description: шкурки; Flags: dontinheritcheck
[Files]
Source: "C:\Users\Stan\Desktop\Шкурки\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c55
Source: BASS_Files\*; DestDir: {tmp}; Flags: dontcopy
Source: music.mp3; DestDir: {tmp}; Flags: dontcopy
[Icons]
Name: "{group}\{cm:UninstallProgram,World of Tanks}"; Filename: "{uninstallexe}"
[UninstallDelete]
Type: filesandordirs; Name: "{app}"
[code]
const
Color = clblack;
procedure Formcolor();
begin
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.ReadyMemo.ScrollBars:= ssNone
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.WelcomeLabel1.Font.Color:=clWhite;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Font.Color:=clWhite;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clWhite;
end;
procedure InitializeWizard();
begin
Formcolor();
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('CallbackCtrl.dll');
ExtractTemporaryFile('botva2.dll');
ExtractTemporaryFile('MusicButton.png');
ExtractTemporaryFile('Music.mp3');
BASS_Init('{tmp}\Music.mp3') //Запускаем музыку
//Можно добавить в инсталл несколько песен
//BASS_Init(ExpandConstant('{tmp}\*')) //Поиск по маске
BASS_CreateOnOffButton(WizardForm, '{tmp}\MusicButton.png', 20, 320, 36, 36, 4) //Создаем кнопку вкл/выкл
end;
procedure DeinitializeSetup();
begin
BASS_DeInit; //Освобождаем процесс
gdipShutdown
end;
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC