PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 6]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 [66] 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

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)

saurn
19-10-2013, 21:09
помоги с ошибкой в этом скрипте »
Куча лишних скобок была.
[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
как сделать так, чтобы процесс был завершен до удаления приложения?скрипт из шапки он завершает процесс до установки

saurn
19-10-2013, 22:16
как сделать так, чтобы процесс был завершен до удаления приложения?скрипт из шапки он завершает процесс до установки »
В оригинальном скрипте функция TerminateApp(...) вызывается в процедуре InitializeWizard, то есть в момент инициализации мастера установки. В вашем случае логичным будет вызывать ее, функцию, в момент инициализации удаления - в функции InitializeUninstall или в InitializeUninstallProgressForm.

habib2302
19-10-2013, 22:25
скрипт на завершение процесса не работает и как решить проблему со скриптом на удаление др. версий приложения при старте.

Nordek
19-10-2013, 23:11
как сделать так, чтобы процесс был завершен до удаления приложения? »

[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, тоже не работает

Nordek
20-10-2013, 00:33
тоже не работает »Что значит не работает?
А в
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)

vint56
20-10-2013, 11:30
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; ничего невыходит

saurn
21-10-2013, 10:32
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
Ребята помогите!
Что надо прописать, чтобы по умолчанию напротив необходимого элемента стояла галочка (которую при необходимости можно было отключить). например, установка доп. ПО или русификатора?

Nordek
22-10-2013, 06:04
Что надо прописать, чтобы по умолчанию напротив необходимого элемента стояла галочка (которую при необходимости можно было отключить). »

Компоненты
[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.

Mat_y
22-10-2013, 08:45
Господа! такой вопрос...

При повторном запуске программы установки и выборе другого компонента (допустим стоял 1 компонент, а хочу поставить 2-й компонент.... они помечены флагом: Flags: exclusive) появляется такое окошко...
http://s020.radikal.ru/i714/1310/cd/915323ab036f.png
... при этом в установщике настроено поле, которое полностью очищает папку, в которую ставятся компоненты перед установкой...

[InstallDelete]
Type: filesandordirs; Name: {app}\{#AppVerName}


1) Я так понял, что [InstallDelete] срабатывает только при первичной установке компонентов, а потом игнорируется?
2) Как можно сделать, чтобы окошко (упомянутое вше) не выскакивало?

nik1967
22-10-2013, 09:54
Как можно сделать, чтобы окошко (упомянутое вше) не выскакивало? »[Setup]: UsePreviousSetupType
Возможные значения:
yes или no
Значение по умолчанию:
yes

Описание:
При значении директивы yes, в начале установки инсталлятор поищет в реестре, не была ли установлена данная программа на данном компьютере, и если так, будет использовать тип и компоненты предыдущей установки, которые выбрал пользователь в прошлый раз при установке, как по умолчанию.

Если Uninstallable=no, эта директива имеет значение no.

saurn
22-10-2013, 15:38
Можно ли сделать так чтобы числа не отражались вот так: 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