Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
Лимит страниц.
Тема закрыта.
Продолжение по ссылке Скрипты Inno Setup. Помощь и советы [часть 3] (http://forum.oszone.net/thread-190621.html)
[hr]
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы (http://forum.oszone.net/showthread.php?p=1201499#post1201499).
Русская справка (http://sabbathblacklab.narod.ru/rus2/is5hlp.rar) в формате .hlp, к версии 5.1.8, автор перевода BagIra (http://forum.ru-board.com/profile.cgi?action=show&member=BagIra) | cкачать в .chm формате (http://rl-team.ru/1210634);
Inno Setup Extensions Knowledge Base (http://www.vincenzo.net/isxkb/index.php?title=Special:Allpages) - онлайн справочник, содержит ответы на многие вопросы | старая chm-версия (http://www.vincenzo.net/isxkb/images/5/57/Isxkbchm.zip);
Inno Setup Scripting 5.1 (http://rapidshare.com/files/35134896/iss_setup.exe.html) - руководство по расширенным возможностям Inno Setup от Kindly (http://forum.ru-board.com/profile.cgi?action=show&member=Kindly);
Коллекция скриптов (http://victor-dobrov.narod.ru/InnoSetupScripts.7z) | Сборник вопросов (http://victor-dobrov.narod.ru/InnoSetupFAQ_ru-board.chm);
Бегущая строка (http://www.forum.oszone.ru/post-1071300-518.html) - бегущая строка на WizardForm, (ссылка на сообщение);
Эффект печатной машинки (http://www.forum.oszone.ru/post-1082174-553.html) - текст на WizardForm появляется по одной букве, (ссылка на сообщение);
Ultimate Test (http://www.forum.oszone.ru/post-1212059-48.html) - проверка системных требований для инсталлятора с чёрным фоном, (ссылка на сообщение);
Запрет установки в корень системного диска (http://www.forum.oszone.ru/post-1210003-46.html), (ссылка на сообщение);
Автовыбор диска установки (http://www.forum.oszone.ru/post-1217528-96.html) - определяет логические диски на компьютере и предлагает установить на первый логический диск не являющийся системным, (ссылка на сообщение);
Распаковка архивов FreeArc (http://www.forum.oszone.ru/post-1300871-729.html) - новая версия скриптов для распаковки архивов FreeArc, (ссылка на сообщение);
Стандартные папкам Windows (http://www.forum.oszone.ru/showpost.php?p=1218002&postcount=102) - пример скрипта, позволяющий получить путь к стандартным папкам Windows, (ссылка на сообщение);
Наложение изображений на стандартные кнопки (http://forum.oszone.net/post-1241045-224.html) - пример, показывающий как использовать свои изоброжения на кнопках, (ссылка на сообщение);
Картинка на страницах инсталлятора (http://www.forum.oszone.ru/post-1242285-250.html) - пример скрипта, показывающий как растянуть стандартную картинку на всю страницу, (ссылка на сообщение);
Выделение всех компонентов (http://forum.oszone.net/post-1276947-444.html) - пример показывает как выделенить или снять отметки со всех компонентов одной кнопкой, (ссылка на сообщение);
ExecAndWait.iss (http://forum.oszone.net/post-1325616-881.html) - скрипт, который позволяет запускать другие программы с ожиданием их завершения и при этом инсталлятор остаётся "живым", т.е. отвечает на действия пользователя, (ссылка на сообщение);
Need for Speed™ Undercover.iss v 2.2 (http://www.forum.oszone.ru/post-1409866-1784.html) - пример скрипта для игры Need for Speed+FreeArc, одним словом название говорит само за себя, (ссылка на сообщение);
ISTool (http://www.istool.org/) - неплохой редактор скриптов Inno Setup.
Последняя версия: 5.3.0.1 [29.09.2009] - Скачать (http://downloads.sourceforge.net/project/istool/istool-5.3.0.1.exe?use_mirror=sunet) | зеркало (http://sourceforge.net/settings/mirror_choices?projectname=istool&filename=istool-5.3.0.1.exe);
Предыдущая версия: 5.3.0 [07.04.2009] - Скачать (http://dfn.dl.sourceforge.net/sourceforge/istool/istool-5.3.0.exe) (зеркало (http://freefr.dl.sourceforge.net/sourceforge/istool/istool-5.3.0.exe)) | Русификатор (http://stashbox.org/86697/istool-ru.rar) (зеркало (http://ifolder.ru/3511034));
Inno Script Generator (http://www.hisoft2000.de/En/index.htm) - ещё один редактор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
Последняя версия: 1.0.3.1 [23.03.2008] - Скачать (http://www.hisoft2000.de/ISG/Inno_Script_Generator_Setup.exe);
Inno Setup Form Designer (http://isfd.kaju74.de/) - редактор страниц Inno Setup, можно создавать свои страницы. Официальный сайт - недоступен.
Последняя версия: 2.0.8 [12.11.2006] - Страница с зеркалами (http://www.xdowns.com/soft/download.asp?softid=18567);
Inno Setup GameScript Generator (http://forum.csmania.ru/viewtopic.php?f=38&t=4688) - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;
ISSkin (http://isskin.codejock.com/) - Программа для создания и добавления в инсталлятор скинов. Инструкция (http://isskin.codejock.com/gettingstarted.asp).
Последняя версия: 3.0.0.0 [19.01.2010] - Скачать (http://isskin.codejock.com/downloads/ISSkinExample.zip);
InnoSetup Script Joiner (http://issjoiner.codeplex.com/) - Программа для объединения нескольких скриптов InnoSetup в один;
Converter (http://forum.oszone.net/post-1216149-86.html) - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
Последняя версия: 0.1.3 [11.09.2009] - Скачать (http://forum.oszone.net/attachment.php?attachmentid=31803&d=1252609775);
Ссылка на архив предыдущей темы (http://forum.oszone.net/thread-60604.html) (также можно скачать из вложения)
вопрос немножко не по теме, но покачто некуда задавать.
У меня есть битый установщик inno setup. можно ли заставить его автоматически записать в лог имена и адреса не извлеченных файлов?
И может можно не сильно напрягаясь извлеч битые файлы. И пофик, что они извликуться битыми.
У меня есть битый установщик inno setup »
Подробнее...
Можете скинуть инсталлятор, если только он не большой, у меня интернет платный.
Инсталятор большой. Но если Вам нужен толко Setup.exe, тогда могу. он маленький :)
Но если Вам нужен толко Setup.exe, тогда могу. »
Не поможет, тогда объясните подробнее, как понять битый инсталлятор. Т.е. вы запускаете инсталлятор, а он не запускается или выскакивает сообщение?
Попробую.
Инсталятор состоит из файла setup.exe, setup-1.bin и вот setup-1.bin как раз битый (ошибка в данныйх CRC) Я скопировал с диска с помощю одной программы. Без понятия, что она сделала с битыми секторами. Я запускаю инсталятор, указываю все необходимые параметры и начинается установка. И когда доходит до битых секторов, на первом файле выдало сообщение:
Произошла ошибка при попытке копирования файла.
Исходный файл поврежден
Прервать Повторить Пропустить
На всех остольных поврежденных файлах
Произошла ошибка при попытке чтения исходного файла.
Исходный файл поврежден
Прервать Повторить Пропустить
Так десяток файлов. Потом кончаются битые сектора, и устаовка идет дальше.
volk1234
24-08-2009, 00:46
EN130 и Все
дальнейшее обсуждение установщика в новой теме. Ссылка в шапке.
Все привет надо бы вот этот скрипт доделать [setup]
AppName=Hitman
AppVerName=Hitman
DefaultDirName={pf}\Hitman
OutputDir=.
WizardImageFile=WizardImageFile.bmp
WizardSmallImageFile=WizardSmallImageFile.bmp
DisableReadyPage=true
UninstallFilesDir={app}\Uninstall
[Languages]
Name: "ENG"; MessagesFile: "compiler:Default.isl"
Name: "RUS"; MessagesFile: "compiler:Languages\Russian.isl"
[Files]
Source: 3.bmp; DestDir: {tmp}; Flags: dontcopy
Source: 1.bmp; Flags: dontcopy;
[Run]
Filename: {src}\DirectX\dxsetup.exe; Parameters: /silent; StatusMsg: ExpandConstant('{cm:UP}'); Check: DirectX
[CustomMessages]
ENG.PAGE_CAPTION=Setup has finished installing Vin Diesel Wheelman on your computer.
RUS.PAGE_CAPTION=Программа Vin Diesel Wheelman установлена на Ваш компютер.
ENG.STR=Click Finish to exit Setup.
RUS.STR=Нажмите «Завершить», чтобы выйти из программы установки.
ENG.BUT=Install
RUS.BUT=Установить
ENG.SPACE=Available place on disk:
RUS.SPACE=Доступно места на диске:
ENG.SPACE1=Place is Required on disk:
RUS.SPACE1=Требуется места на диске:
ENG.DRT=Will Update DirectX
RUS.DRT=Обновить DirectX
ENG.UP=Goes the renovation DirectX...
RUS.UP=Идет обновление DirectX...
ENG.GB=GB
RUS.GB=Гб
[_CODE_]
var
Upload: TCheckBox;
bottom_img:TBitmapImage;
lblCheckBox, lblSelectDir, lblSelectDirBrowse: TLabel;
PageNameLabel, PageDescriptionLabel: TLabel;
WLabel1, WLabel2,
FLabel1, FLabel2, FLabel3: TLabel;
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel,FreeSpaceLabel: TLabel;
BmpFile: TBitmapImage;
function DirectX: Boolean;
begin
Result:=Upload.Checked;
end;
procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ FloatToStr(round(FreeMB/1024*100)/100) + ExpandConstant(' {cm:GB}') else
FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ IntToStr(FreeMB)+ ' MB';
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True;
end;
procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := ExpandConstant('{cm:SPACE1} ')+ FloatToStr(round(NeedSize/1024*100)/100) + ExpandConstant(' {cm:GB}') else
NeedSpaceLabel.Caption := ExpandConstant('{cm:SPACE1} ')+ IntToStr(NeedSize)+ ' MB';
end;
// задал процедуру, чтоб отмечался чебокс еси кликнуть по надписи lblCheckBox
procedure lblCheckBoxOnClick(Sender: TObject);
begin
if Upload.Checked = False then
Upload.Checked:= True else
Upload.Checked:= False;
end;
procedure InitializeWizard();
begin
WizardForm.FileNameLabel.Visible:= False;
ExtractTemporaryFile('1.bmp');
ExtractTemporaryFile('3.bmp');
NeedSize:= 7000;
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.Width:= ScaleX(497);
BmpFile.Height:= ScaleY(252);
BmpFile.Parent:= WizardForm.SelectDirPage;
bottom_img:= TBitmapImage.Create(WizardForm);
bottom_img.Bitmap.LoadFromFile(ExpandConstant('{tmp}\3.bmp'));
{первые 2 параметра - координаты левогого верхнего угла по горизонтали и вертикали, дальше ширина и высота,
до которой растянуть}
bottom_img.SetBounds(0, 315, 497, 48);
bottom_img.Parent:= WizardForm;
bottom_img.Stretch:= True;
with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
DiskSpaceLabel.Hide;
SelectDirBitmapImage.Hide;
SelectDirBrowseLabel.Hide;
SelectDirLabel.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
DirBrowseButton.Left:= DirBrowseButton.Left + ScaleX(40);
DirBrowseButton.Top:= DirBrowseButton.Top + ScaleY(12);
DirEdit.Left:= DirEdit.Left + ScaleX(40);
DirEdit.Top:= DirEdit.Top + ScaleY(12);
WizardBitmapImage.Width:= 497;
WizardBitmapImage.Height:= 314;
WizardBitmapImage2.Width:= 497;
WizardBitmapImage2.Height:= 314;
with MainPanel do
begin
with WizardSmallBitmapImage do
begin
Left:= Mainpanel.Left;
Top:= Mainpanel.Top;
Width:= Mainpanel.Width;
Height:= MainPanel.Height;
end;
end;
end;
WLabel1:= TLabel.Create(WizardForm);
with WLabel1 do
begin
Left:= ScaleX(176);
Top:= ScaleY(16);
Width:= ScaleX(301);
Height:= ScaleY(54);
AutoSize:= False;
WordWrap:= True;
Font.Size:= 12;
Font.Style:= [fsBold];
Font.Color:= clwhite;
ShowAccelChar:= False;
Caption:= WizardForm.WelcomeLabel1.Caption;
Transparent:= True;
Parent:= WizardForm.WelcomePage;
end;
WLabel2:=TLabel.Create(WizardForm);
with WLabel2 do
begin
Top:= ScaleY(76);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(234);
AutoSize:= False;
WordWrap:= True;
Font.Color:= clWhite;
ShowAccelChar:= False;
Caption:= WizardForm.WelcomeLabel2.Caption;
Transparent:= True;
Parent:= WizardForm.WelcomePage;
end;
FLabel1:= TLabel.Create(WizardForm);
with FLabel1 do
begin
Left:= ScaleX(176);
Top:= ScaleY(16);
Width:= ScaleX(301);
Height:= ScaleY(54);
AutoSize:= False;
WordWrap:= True;
Font.Size:= 12;
Font.Style:= [fsBold];
Font.Color:= clWhite;
ShowAccelChar:= False;
Caption:= WizardForm.FinishedHeadingLabel.Caption;
Transparent:= True;
Parent:= WizardForm.FinishedPage;
end;
FLabel2:=TLabel.Create(WizardForm);
with FLabel2 do
begin
Top:= ScaleY(76);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(53);
AutoSize:= False;
WordWrap:= True;
Font.Color:= clWhite;
ShowAccelChar:= False;
Caption:= ExpandConstant('{cm:PAGE_CAPTION}');
Transparent:= True;
Parent:= WizardForm.FinishedPage;
end;
FLabel3 :=TLabel.Create(WizardForm);
with FLabel3 do
begin
Top := ScaleY(110);
Left := ScaleX(176);
Width := ScaleX(301);
Height := ScaleY(53);
AutoSize := False;
WordWrap := True;
Font.Color:= clblack;
ShowAccelChar := False;
Caption := ExpandConstant('{cm:STR}');
Transparent := True;
Parent := WizardForm.FinishedPage;
end;
// уменьшил размер CheckBox'а, по другому никак
Upload:= TCheckBox.Create(WizardForm);
with Upload do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 0;
Checked:= False;
end;
// создаём надпись для CheckBox'а
lblCheckBox:= TLabel.Create(WizardForm);
with lblCheckBox do
begin
Caption:= ExpandConstant('{cm:DRT}');
Left:= WizardForm.DirEdit.Left + 20;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @lblCheckBoxOnClick;
end;
// создаём lblSelectDir
lblSelectDir:= TLabel.Create(WizardForm);
with lblSelectDir do
begin
Caption:= WizardForm.SelectDirLabel.Caption;
Left:= ScaleX(40);
Top:= WizardForm.SelectDirLabel.Top + ScaleY(12);
Width:= WizardForm.SelectDirLabel.Width;
Height:= WizardForm.SelectDirLabel.Height;
Transparent := True;
Parent:= WizardForm.SelectDirPage;
end;
// создаём lblSelectDirBrowse
lblSelectDirBrowse:= TLabel.Create(WizardForm);
with lblSelectDirBrowse do
begin
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
Left:= ScaleX(40);
Top:= WizardForm.SelectDirBrowseLabel.Top + ScaleY(12);
Width:= WizardForm.SelectDirBrowseLabel.Width;
Height:= WizardForm.SelectDirBrowseLabel.Height;
WordWrap:= True;
Transparent:= True;
Parent:= WizardForm.SelectDirPage;
end;
NeedSpaceLabel:= TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= ScaleY(202);
Width:= ScaleX(209);
Height:= ScaleY(13);
Transparent:= True;
end;
FreeSpaceLabel:= TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= ScaleY(220);
Width:= ScaleX(209);
Height:= ScaleY(13);
Transparent:= True;
end;
WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;
PageNameLabel:= TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left:= ScaleX(10);
Top:= ScaleY(10);
Width:= ScaleX(300);
Height:= ScaleY(14);
AutoSize:= False;
WordWrap:= True;
Font.Color:= clblack;
Font.Style:= [fsBold];
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
PageDescriptionLabel:= TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left:= ScaleX(15);
Top:= ScaleY(25);
Width:= ScaleX(475);
Height:= ScaleY(30);
AutoSize:= False;
WordWrap:= True;
Font.Color:= clblack;
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;
if CurPageID = wpSelectDir then
begin
WizardForm.NextButton.Caption:= ExpandConstant('{cm:BUT}');
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False;
with WizardForm do
begin
InnerNotebook.Left := ScaleX(0);
InnerNotebook.Top := ScaleY(60);
InnerNotebook.Width := ScaleX(497);
InnerNotebook.Height := ScaleY(252)
end;
end;
if CurPageID = wpInstalling then
begin
with WizardForm do
begin
BmpFile.Parent:= WizardForm.InstallingPage;
ProgressGauge.Left:= 20;
ProgressGauge.Top:= 160;
ProgressGauge.Width:= 215;
ProgressGauge.Height:= 20;
end;
end;
end; вот не достататки http://pic.ipicture.ru/uploads/090822/thumbs/AobyfK0O5t.jpg (http://ipicture.ru/Gallery/Viewfull/22608001.html) http://pic.ipicture.ru/uploads/090822/thumbs/v3SqfYWRUV.jpg (http://ipicture.ru/Gallery/Viewfull/22608014.html) а патом все соединить с этим скриптом #define MainExe "{app}\Smersh.exe"
#define GDFBinary "{app}\Smersh.exe"
[Setup]
AppName=Смерть шпионам.Момент истины
AppVerName=Смерть шпионам.Момент истины
DefaultDirName={pf}\Смерть шпионам.Момент истины
OutputDir=Output
Compression=none
DisableReadyPage=true
InternalCompressLevel=ultra64
SolidCompression=true
ArchitecturesInstallIn64BitMode=x64
ArchitecturesAllowed=x64 x86
RestartIfNeededByRun=false
UsePreviousAppDir=false
DirExistsWarning=no
DisableProgramGroupPage=true
DefaultGroupName=Bully
UsePreviousGroup=false
UsePreviousSetupType=false
UsePreviousTasks=false
UninstallFilesDir={app}\Uninstall
[Files]
Source: arc.exe; DestDir: {tmp}; Flags: dontcopy
Source: GameuxInstallHelper.dll; DestDir: {app}\Uninstall; Flags: overwritereadonly ignoreversion
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Messages]
SelectDirBrowseLabel=Нажмите «Установить», чтобы начать установку. Если Вы хотите выбрать другую папку, нажмите «Обзор».
[LangOptions]
WelcomeFontName=Tahoma
WelcomeFontSize=11
[Registry]
Root: HKLM; SubKey: SOFTWARE\1C\{{E07CEDD1-108A-4304-B820-EAFF5D37F5F0}; ValueType: string; ValueName: InstallDir; ValueData: {app}\
Root: HKLM; SubKey: SOFTWARE\1C\{{E07CEDD1-108A-4304-B820-EAFF5D37F5F0}; ValueType: string; ValueName: AppFile; ValueData: {app}\SmershAddon.exe
Root: HKLM; SubKey: SOFTWARE\1C\{{E07CEDD1-108A-4304-B820-EAFF5D37F5F0}; ValueType: string; ValueName: AppVersion; ValueData: 1.0.0.0
[Run]
Filename: {app}\Smersh.exe; WorkingDir: {app}\; Description: Начать игру; Flags: postinstall
Filename: {src}\DirectX\DXSETUP.exe; Parameters: /silent; StatusMsg: Обновление:Microsoft DirectX 9.0c...; Check: InstallDirectX
Filename: {src}\Redistributables\vcredist_x86.exe; Parameters: "/q:a /c:""VCREDI~3.EXE /q:a /c:""""msiexec /i vcredist.msi /qn"""" """; StatusMsg: Обновление:Microsoft Visual C++ 2005...; Check: InstallDirectX
[Icons]
Name: {group}\Играть; Filename: {app}\Smersh.exe; WorkingDir: {app}\
Name: {group}\Настроить игру; Filename: {app}\SmershSetup.exe; WorkingDir: {app}\
Name: {group}\Удалить игру; Filename: {uninstallexe}
Name: {commondesktop}\Смерть шпионам.Момент истины; Filename: {app}\Smersh.exe; WorkingDir: {app}\; Check: MakeDesktopIcon
[UninstallDelete]
Name: {app}\*; Type: filesandordirs
[_Code_]
type
TGUID = record
Data1: Cardinal;
Data2,
Data3: Word;
Data4: array [0..8] of char;
end;
function GenerateGUID(var GUID: TGUID): Cardinal; external 'GenerateGUID@files:GameuxInstallHelper.dll stdcall setuponly';
function AddToGameExplorer(Binary: String; Path: String; InstallType: Integer; var GUID: TGUID): Cardinal; external 'AddToGameExplorerA@files:GameuxInstallHelper.dll stdcall setuponly';
function CreateTask(InstallType: Integer; var GUID: TGUID; TaskType: Integer; TaskNumber: Integer; TaskName: String; Binary: String; Parameters: String): Cardinal; external 'CreateTaskA@files:GameuxInstallHelper.dll stdcall setuponly';
function RetrieveGUIDForApplication(Binary: String; var GUID: TGUID): Cardinal; external 'RetrieveGUIDForApplicationA@{app}\Uninstall\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveFromGameExplorer(var GUID: TGUID): Cardinal; external 'RemoveFromGameExplorer@{app}\Uninstall\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveTasks(var GUID: TGUID): Cardinal; external 'RemoveTasks@{app}\Uninstall\GameuxInstallHelper.dll stdcall uninstallonly';
const
PlayTask = 0;
SupportTask = 1;
var
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel,FreeSpaceLabel: TLabel;
DesktopIcon, DirectX: TCheckBox;
GUID: TGUID;
ProgressBar1: TNewProgressBar;
/////Вычисление свободного места на диске
procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ FloatToStr(round(FreeMB/1024*100)/100) + ' GB' else
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ IntToStr(FreeMB)+ ' MB';
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;
procedure animateprogress;
begin ProgressBar1.Position := ProgressBar1.Position+1
end;
procedure GetNeedSpaceCaption; /////Вычисление требуемого места для установки
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ FloatToStr(round(NeedSize/1024*100)/100) + ' GB' else
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ IntToStr(NeedSize)+ ' MB';end;
function MakeDesktopIcon: Boolean;
begin
Result:=DesktopIcon.Checked;end;
function InstallDirectX: Boolean;
begin
Result:=DirectX.Checked;end;
procedure InitializeWizard();
begin
begin
NeedSize := 3210; //Здесь указывается место для приложения
WizardForm.DiskSpaceLabel.Hide;
WizardForm.FilenameLabel.Hide;
WizardForm.ProgressGauge.Top:=ScaleY(100); //Изменение стандартного прогрессбара
WizardForm.ProgressGauge.Width:=262; //
WizardForm.ProgressGauge.Left:=155; //
WizardForm.StatusLabel.Top:=ScaleY(80);
WizardForm.WelcomeLabel2.Top:=ScaleY(90);
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(202);
Width := ScaleX(209);
Height := ScaleY(13);
end;
end;
FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
begin //Создание чекбокса для создания ярлыка на рабочем столе
DesktopIcon := TCheckBox.Create(WizardForm);
with DesktopIcon do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'Добавить ярлык на Рабочий стол';
Left := ScaleX(0);
Top := WizardForm.DirEdit.Top+35;
Width := ScaleX(400);
Height := ScaleY(15);
TabOrder := 0;
Checked := True;
end;
end;
begin //Создание чекбокса для установки DirectX
DirectX := TCheckBox.Create(WizardForm);
with DirectX do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'Установить дополнительное программное обеспечение';
Left := ScaleX(0);
Top := WizardForm.DirEdit.Top+55;
Width := ScaleX(400);
Height := ScaleY(15);
TabOrder := 0;
Checked := True;
end;
end;
begin ///Создание нового прогрессбара
ProgressBar1 := TNewProgressBar.Create(wizardform);
with ProgressBar1 do
begin
Parent := wizardform.installingpage;
Top := 100
Width := 150;
Height := wizardform.progressgauge.height;
Max :=3; //кол-во архивов
end;
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
begin
if CurPageID=wpSelectDir then
begin //Тут если Свободное место на диске < требуемого то кнопка "Установвить" на PageSelectDir неактивна
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
WizardForm.NextButton.Caption:='Установить'; //Rename кнопки "Далее" на SelectDir
end;
end;
end;
procedure CurStepChanged(CurStep: TSetupStep); ///Регистрация в GameExplorer
var
Binary, MainExe: String;
ResultCode:Integer;
begin
if CurStep = ssInstall then //Перед установкой
begin
GenerateGUID(GUID);
ExtractTemporaryFile('arc.exe'); //Извлечение Arc.exe в Temp
if (FileExists(AddBackslash(ExpandConstant('{tmp}')) + 'arc.exe')) and (FileExists(AddBackslash(ExpandConstant('{src}')) + 'data-a.bin')) then
begin
WizardForm.StatusLabel.Caption:='Распаковка файлов...'; //Извлечение из 1-го архива
Exec(ExpandConstant('{tmp}\Arc.exe'), 'x '+AddQuotes(ExpandConstant('{src}\data-a.bin'))+' -y -dp'+AddQuotes(ExpandConstant('{app}')), '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
ProgressBar1.Position := ProgressBar1.Position+1
WizardForm.StatusLabel.Caption:='Распаковка файлов...'; //Извлечение из 2-го архива
Exec(ExpandConstant('{tmp}\Arc.exe'), 'x '+AddQuotes(ExpandConstant('{src}\data-b.bin'))+' -y -dp'+AddQuotes(ExpandConstant('{app}')), '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
ProgressBar1.Position := ProgressBar1.Position+1
WizardForm.StatusLabel.Caption:='Распаковка файлов...'; //Извлечение из 3-го архива
Exec(ExpandConstant('{tmp}\Arc.exe'), 'x '+AddQuotes(ExpandConstant('{src}\data-c.bin'))+' -y -dp'+AddQuotes(ExpandConstant('{app}')), '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
ProgressBar1.Position := ProgressBar1.Position+1
end else begin
MsgBox('Исполняемый файл:' + #13#10#13#10 + (AddBackslash(ExpandConstant('{tmp}')) + 'arc.exe') + #13#10#13#10 + 'не найден. Установка отменена', mbInformation, MB_OK);
Abort;
end;
end;
if CurStep = ssPostInstall then
begin
Binary:=ExpandConstant('{#GDFBinary}');
MainExe:=ExpandConstant('{#MainExe}');
AddToGameExplorer(Binary, ExpandConstant('{app}'), 3, GUID);
CreateTask(3, GUID, PlayTask, 0, 'Play', MainExe, '');
end;
end;
function InitializeSetup(): Boolean;
var
UnStr: String;
ErrorCode, Mesages: Integer;
begin //Повторный запуск
Result := True;
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\Smersh2_is1', 'UninstallString', UnStr) then
begin
If UnStr <> '' then
begin
Mesages := MsgBox('Смерть шпионам.Момент истины уже установлена в Вашей системе.'+#10#10+'Хотите удалить приложение?', mbInformation, MB_YESNOCANCEL);
case Mesages of
idYes:
begin
UnStr := RemoveQuotes(UnStr);
Exec(UnStr, '/silent', '', SW_Show, ewWaitUntilTerminated, ErrorCode);
Result := True;
end
idNo:
begin
Result := True;
end
idCancel:
begin
Result := False;
end;
end;
end;
end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
ResultStr:String;
Binary: String;
GUID: TGUID;
begin /////////////////////////////////////////Удаление игровых сохранений
if CurUninstallStep=usPostUninstall then
begin
RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\Smersh2_is1', 'UnInstConfirm', ResultStr)
if DirExists(ExpandConstant('{userdocs}')+'\smersh') then
if MsgBox('Удалить сохраненные игры и настройки?',mbconfirmation, mb_YesNo) = IDYES then
begin
if not DelTree(ExpandConstant('{userdocs}')+'\Smersh', True, True, True)
then
MsgBox('Папка не удалена!' #13#13 'Папка не существует или задействована.', mbError, MB_OK);
end;
end;
begin
if CurUninstallStep=usUninstall then //Удаление из GameExplorer
begin
Binary:=ExpandConstant('{#GDFBinary}');
RetrieveGUIDForApplication(Binary, GUID);
RemoveFromGameExplorer(GUID);
RemoveTasks(GUID);
UnloadDll(ExpandConstant('{app}\Uninstall\GameuxInstallHelper.dll'));
end;
end;
end; через joins script ни как
ilyaalex
24-08-2009, 06:27
Народ, помогите. Может кто знает. Нужно определить наличие учетной записи windows, используя средства Inno setup. ВОзможно ли это? Можно ли реализовать это через WinApi в Inno setup? По сути все сводится к функции где один параметр - имя учетки. Функция выплевывает true если учетка существует и false если нет.
user_123
24-08-2009, 13:17
Подскажите пожалуйста, как в программе установки, написанной в inno setup, сделать:
1) вывод стандартного системного запроса (Да/Нет) с использованием текста из секции CustomMessages при снятии флажка в дополнительных задачах / компонентах (секция tasks), при нажатии кнопки "да" снять флажок. p.s. должно появиться уведомление пользователя о возможных последствиях отказа от выполнения задачи / установки компонента с запросом на продолжение (снятие флажка).
2) вывод дополнительного стандартного системного запроса (Да/Нет) с использованием текста из секции CustomMessages при удалении установленной программы. При нажатии кнопки "да" должен удалиться определённый подкаталог программы (и чтобы строка состояния отображала проццес удаления подкаталога, т.к. нём может быть более 50 тыс. файлов). p.s. Нужно, чтобы пользователь решал, удалять подкаталог программы, или нет.
volk1234
24-08-2009, 23:04
ilyaalex
Цитата ilyaalex:
Нужно определить наличие учетной записи windows, используя средства Inno setup. »
Почитайте в Справке по Inno Setup, раздел:
Pascal Scripting: Introduction->Pascal Scripting: Support Functions Reference->function GetUserNameString: String; »
1) вывод стандартного системного запроса (Да/Нет) с использованием текста из секции CustomMessages »
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[CustomMessages]
tsk=Попробуйте, снимите с меня галку... ;)
msg=бла... бла... бла... %n Вы уверенны?
[Tasks]
Name: tsk; Description: {cm:tsk}; GroupDescription: Дополнительно:
[Code]
procedure OnClickCheck(Sender: TObject);
begin
if not IsTaskSelected('tsk') then
if MsgBox(ExpandConstant('{cm:msg}'), mbConfirmation, MB_YESNO) = IDYES then
begin
MsgBox('Я всё видел, Вы нажали "Да"', mbInformation, MB_OK);
end
else
begin
MsgBox('Вы нажали "Нет", очень жаль...', mbInformation, MB_OK);
end;
end;
procedure InitializeWizard;
begin
WizardForm.TasksList.OnClickCheck:= @OnClickCheck;
end;
Привет всем, подскажите пожалуйста, как сделать так, чтобы копирование файлов (Source: D:\TEMP\silnet hill homecoming\rus\*; DestDir: {app}; Flags: recursesubdirs ignoreversion createallsubdirs; Components: Full_Russian EngSRusT), создание ярлыков и выполнение секции run происходило после распаковки архивов, именно в таком порядке. Скрипт прилагается.
можно ли какимнибудь способом в секции Run внести возможность поставить флаг exclusive а также мог бы её снять
Filename: "http://www.quakelive.com/#register"; Description: "Создать аккаунт"; Flags: nowait shellexec postinstall skipifsilent
Filename: "http://www.quakelive.com/#home"; Description: "Войти чтобы играть"; Flags: nowait shellexec postinstall skipifsilent
это для того чтобы если человек выбрал один из любых вариантов или мог бы его отключить
К примеру выбирать он может чтото одно скажем или регистрацию или вход, но также может и убрать галку и с того и другого (всмысле не хочет не входить и регистрироваться)
Есть скрипт для задания чёрного фона (прикрепил), но вот беда, не все текста присутствуют, например, как на скрине (http://s39.radikal.ru/i084/0908/5b/c8b43a899fcf.jpg) (та же фигня на всех страницах), а на странице лицензионного соглашения нет текста "я принимаю..." и "я не принимаю...", тупо две галки =((( Помогите это исправить!!!
FlatX007
28-08-2009, 01:45
Вопрос : как сделать чтобы деинстилятор(unins000.exe) ,созданый установщиком, при запуске удалил ключ из реестра.
Просто никогда этим незанимался :dont-know
FlatX007, добавь флаг uninsdeletevalue, например:
[Registry]
Root: HKLM; Subkey: "SOFTWARE\Activision"; ValueType: String; Flags: uninsdeletevalue
FlatX007
28-08-2009, 19:26
FlatX007, добавь флаг uninsdeletevalue, например:
[Registry]
Root: HKLM; Subkey: "SOFTWARE\Activision"; ValueType: String; Flags: uninsdeletevalue »
Так ключ реестра поппадает в реестр не через установщик, он там есть до него.
Неработает кароче.
BlackSelf
28-08-2009, 20:09
FlatX007,
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usPostUninstall then
RegDeleteValue(HKLM, 'Software\My Program', 'InstallDir')
end;
как сделать так, чтобы »
Попробуйте, скрипт прикрепил к сообщению. Работоспасобность, не проверял.
Есть скрипт для задания чёрного фона (прикрепил), но вот беда, не все текста присутствуют »
стандартным способом нет, придётся вручную рисовать чебоксы и обрабатывать клики мышкой по ним.
Есть скрипт для задания чёрного фона (прикрепил), но вот беда, не все текста присутствуют »
добавьте:
WizardForm.PageNameLabel.Font.Color:=clWhite;
а лицензионное соглашение, помоему это:
WizardForm.LicenseAcceptedRadio.Font.Color:= clWhite;
WizardForm.LicenseNotAcceptedRadio.Font.Color:= clWhite;
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.