Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: MaximusMX
Дата сообщения: 04.12.2007 15:24
Inno Setup 5.2.2 русская версия
http://www.innosetup.narod.ru/rus_ver/isetup-5.2.2-ru.exe
Автор: serg_aka_lain
Дата сообщения: 04.12.2007 17:09
GRom V

Цитата:
А как сделать чтоб ПЕРЕД НАЧАЛОМ ИНСТАЛЛЯЦИИ - если система ХР, то запускал File1.exe, а если Vista, то File2.exe.............?



function InitializeSetup (): Boolean;
var Version: TWindowsVersion;

begin
GetWindowsVersionEx(Version);
if Version.NTPlatform and (Version.Major = 6) and (Version.Minor = 0) then
begin
MsgBox('You OS Windows Vista' ,mbInformation, mb_Ok);
//Exec
Result:= True;
end

begin
GetWindowsVersionEx(Version);
if Version.NTPlatform and (Version.Major = 5) and (Version.Minor = 1) then
begin
MsgBox('You OS Windows XP' ,mbInformation, mb_Ok);
//Exec
Result:= True;
end
end
end;
Автор: Olezka
Дата сообщения: 04.12.2007 17:24
Подскажите, плиз, если это возможно, чтобы некоторые файлы Х извлекались только туда куда будет написано в скрипте, а файлы У по умолчанию или куда выберет пользователь???
Заранее благодарен!!!
Автор: Uncle_Steeler
Дата сообщения: 04.12.2007 18:44
Уважаемые форумчане, а не подскажет ли кто, как "скрестить" скины от Sampron (переделанный InstallShield) и код проигрывания мр3?
Автор: Vitalliano
Дата сообщения: 04.12.2007 20:58
Ребята у меня такой скрипт, я не могу включить кнопку Cancel в процесе инсталяции:

[Code]
type
TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);
var
BackImage, SlideImage: TBitmapImage;
TimerID: LongWord;
s:string;
Width, Height:Integer;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';
function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';

procedure InitializeWizard();
begin
WizardForm.Position:=poScreenCenter
Width:=GetSystemMetrics(0)
Height:=GetSystemMetrics(1)
MainForm.BORDERSTYLE:=bsNone
MainForm.Left:=0
MainForm.Top:=0
MainForm.Width:=Width
MainForm.Height:=Height
ExtractTemporaryFile('Back.bmp')
s:=ExpandConstant('{tmp}')+'\Back.bmp '
BackImage:=TBitmapImage.Create(MainForm)
BackImage.Bitmap.LoadFromFile(s)
BackImage.Align:=alClient
BackImage.Parent:=MainForm
BackImage.Stretch:=True
MainForm.Visible:=True

ExtractTemporaryFile('Back.bmp')
ExtractTemporaryFile('1.bmp')
ExtractTemporaryFile('2.bmp')
ExtractTemporaryFile('3.bmp')
ExtractTemporaryFile('4.bmp')
ExtractTemporaryFile('5.bmp')
end;

function PercentProgress(): Integer;
begin
with WizardForm.ProgressGauge do begin
Result:=(Position-Min)/((Max - Min)/100)
end
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
percent: integer;
begin
percent:=PercentProgress
with SlideImage do begin
if ((percent>0) and (percent<20) and (Tag<>1)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\1.bmp')
Tag:=1
end else
if ((percent>20) and (percent<40) and (Tag<>2)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\2.bmp')
Tag:=2
end else
if ((percent>40) and (percent<60) and (Tag<>3)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\3.bmp')
Tag:=3
end else
if ((percent>60) and (percent<80) and (Tag<>4)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\4.bmp')
Tag:=4
end else
if ((percent>80) and (percent<100) and (Tag<>5)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\5.bmp')
Tag:=5
end
end
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
Width, Height: Integer;
begin
if CurPageID=wpInstalling
then
begin
pfunc:=WrapTimerProc(@OnTimer, 4)
TimerID:=SetTimer(0, 0, 500, pfunc)
SlideImage:=TBitmapImage.Create(MainForm)
with SlideImage do begin
Stretch:=True
Align:=alClient
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\1.bmp')
Parent:=MainForm
Tag:=1

WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=True;
WizardForm.Bevel1.Width:=WizardForm.Width;
WizardForm.Bevel1.Left:=ScaleX(0);
WizardForm.Bevel1.Top:=ScaleY(101);
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(180);


WizardForm.Left:=ScaleX(MainForm.Left+20);
WizardForm.Top:=ScaleY(MainForm.Height-190);



WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.InnerNotebook.Height:=ScaleY(65);

WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(5);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;

WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;

WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;

WizardForm.CancelButton.Visible:=True;
WizardForm.CancelButton.Cancel:=True;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(130);
WizardForm.CancelButton.Width := ScaleX(75);
WizardForm.CancelButton.Height := ScaleY(23);
WizardForm.CancelButton.Left := WizardForm.Width - ScaleX(75 + 10);
WizardForm.CancelButton.Top := WizardForm.Height - ScaleY(23 + 10);
WizardForm.CancelButton.Caption := 'Cancel';
WizardForm.CancelButton.ModalResult := mrCancel;

end
end
if CurPageID=wpFinished
then
begin
SlideImage.Hide

WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Position:=poScreenCenter;

end
end;
procedure DeinitializeSetup();
begin
KillTimer(0, TimerID)
end;

Что можно изменить что бы кнопка Cancel заработала?

Заранее благодарю!
Автор: serg_aka_lain
Дата сообщения: 04.12.2007 21:46
Vitalliano

Допиши в CurPageChanged
WizardForm.CancelButton.BringToFront;

и позиция Cancel по вертикали у тебя прописана два раза,
будет последняя выполняться.

Это подойдет лучше
WizardForm.CancelButton.Top:=ScaleY(130); , но можно и выше кнопку сделать.
Автор: Vitalliano
Дата сообщения: 05.12.2007 00:31
serg_aka_lain


Огромное спасибо, помогло!
Автор: GRom V
Дата сообщения: 05.12.2007 02:19
serg_aka_lain

procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
Cancel:=False;
Confirm:=False;
if CurPage = wpInstalling then
begin
if MsgBox('Ты действительно хочешь навинтить?', mbError, MB_YESNO) = idYes then
begin
Cancel:=true;

end;
end;
end;


Добавлено:
Vitalliano
извеняюсь ......лохонулся
Автор: ShiftLock
Дата сообщения: 05.12.2007 04:32
Помогите ктонить!
Есть код........

function InitializeSetup(): Boolean;
var
sLocation: String;
iShowCmd: Integer;
iErrorCode: Integer;
bRun: Boolean;
begin
ExtractTemporaryFile('splash.exe'); //Извлечение "временной" программы.
sLocation := ExpandConstant('{tmp}');
bRun := Exec(sLocation + '\splash.exe', '',sLocation, SW_SHOW, ewWaitUntilTerminated, iErrorCode); //запуск "временной" программы.
Result := True;
end;


Можно ли как нибудь в этом коде запустить splash.exe не из временной папки, а из той где находится инсталлятор...(типа {src}) ????????????
Автор: Olezka
Дата сообщения: 05.12.2007 09:12
Помогите сскрипт составить с выше вказаными к нему требованиями, и еще как эту программу заставить делать инсталятор больше 2Гб, а то доходит до 2 и выкидывает ошибку????
Автор: EagleSH
Дата сообщения: 05.12.2007 11:11
Olezka

Цитата:
как эту программу заставить делать инсталятор больше 2Гб, а то доходит до 2 и выкидывает ошибку????

никак
макс размер - 2гига.
Автор: Unc1e
Дата сообщения: 05.12.2007 12:57
ShiftLock, попробуй так
//ExtractTemporaryFile('splash.exe'); //Извлечение "временной" программы.
sLocation := ExpandConstant('{src}');
Olezka, нужно включить разбиение на части
DiskSpanning=true
SlicesPerDisk=1
DiskSliceSize=732954624
Читайте хелп!
Автор: Angel_Smerti
Дата сообщения: 05.12.2007 19:35
Люди, спецы - помогите:
Есть в реестре такая ветка как HKEY_USERS в этой ветке есть подключи, типа:
\S-1-5-21-73586283-1897051121-1417001333-1010
\S-1-5-21-73586283-1897051121-1417001333-1010_Classes подскажите, пожалуйста, как мне эти ключи правильно записать в инсталлятор, ведь как я понял для каждого компьютера эти подключи свои?
Автор: Ruud
Дата сообщения: 05.12.2007 23:54
Angel_Smerti

Ветка HKEY_USERS\S-[длинный-набор-цифр] аналогична ветке HKEY_CURRENT_USER.
Автор: GRom V
Дата сообщения: 06.12.2007 03:27
Unc1e

Цитата:
ShiftLock, попробуй так
//ExtractTemporaryFile('splash.exe'); //Извлечение "временной" программы.
sLocation := ExpandConstant('{src}');

Так не вкатывает!!!
Автор: Vitalliano
Дата сообщения: 06.12.2007 12:19
Вот скрипт в котором я не совсеб догоняю как можно сделать так, чтобы когда прога установлена InnoSetup спрашивал удалить или нет, если удалить то удаляет, если нет то нет, но при этих двух вариантах инсталятор не должен запускатся!


function InitializeSetup(): Boolean;
var
ResultCode: Integer;
s, ResultStr:string;

begin
If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{6B0AA1BC-8CAF-4070-BD82-DE15MO6Y1986}_is1', 'UninstallString', ResultStr) then
begin
If ResultStr<>'' then
begin
ResultStr:=RemoveQuotes(ResultStr);
If MsgBox('Приложение "Program" уже установлено на Вашем компьютере' #13#13 'Вы действительно хотите удалить данное приложение?', mbInformation, MB_OYRSNO)=IDYES then
if not Exec(ResultStr, '/SILENT', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode)
then
else
begin
Result:=True;
exit;
end;
end;
end;
Result:=True;
end;

Можно это сделать с сообщением "Да" или "Нет". Получается только с кнопкой "ОК" и "Отмена"?
Автор: Unc1e
Дата сообщения: 06.12.2007 14:24
ShiftLock, GRom V - а так
[code]
var
iErrorCode: Integer;
s:string;
function InitializeSetup(): Boolean;
begin
s:=ExpandConstant('{src}')+'\splash.exe';
Exec(s, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, iErrorCode);
end;
Автор: Vitalliano
Дата сообщения: 07.12.2007 08:59
Ребята извините насчет скрипта, протупил, там все ок!!!!

А вот насчет DLL, незнаю как ее запустить, это со Сталкера насколько я понимаю проверка системных требований, может Вы что-то подскажете???

Вот здесь я ее выложил:

http://depositfiles.com/files/2621893

Добавлено:
И вот за одно спрошу, сам скрипт вродибы правильный, но когда я поставил "{userinfoserial}" для записи в реестр, инсталятор после установки файлов начинает записывать информацию в реестр, и вот тогда выдает ошибку:

http://img227.imageshack.us/my.php?image=errorexi5.jpg

А вот сам скрипт:

function CheckSerial(Serial: String): Boolean;
var
mask:string;
i:Integer;
begin
Result:=True;
mask:='####-####-####-****';
If Length(Serial)<>Length(mask) then
begin
Result:=False;
exit;
end;
For i:=1 to Length(mask) do
begin
If StrGet(mask, i)='#' then
If not ((Ord(StrGet(Serial, i))>=48) and (Ord(StrGet(Serial, i))<=57)) then
begin
Result:=False;
exit;
end;
If StrGet(mask, i)='*' then
If not ((StrGet(Serial, i)>='A') and (StrGet(Serial, i)<='Z')) then
begin
Result:=False;
exit;
end;
end;
end;

Заранее благодарю!!!
Автор: EagleSH
Дата сообщения: 07.12.2007 20:02
господа подскажите, что здесь НЕ правильно:


Код:
function InitializeSetup(): Boolean;
var
ResultCode: Integer;
s, ResultStr:string;
begin
Result:=True;
If not RegKeyExists(HKLM, 'SOFTWARE\Program') or RegKeyExists(HKLM, 'SOFTWARE\Wow6423Node\Program')
then
begin
Result:=False;
end
else
begin
end;
end;
Автор: serg_aka_lain
Дата сообщения: 07.12.2007 20:41
EagleSH

begin
Result:=True;
if not RegKeyExists(HKLM, 'SOFTWARE\Program') then
begin
if not RegKeyExists(HKLM, 'SOFTWARE\Wow6423Node\Program') then
begin
...........


Добавлено:
Vitalliano

Первый вопрос уже обсужался (подробно) в предыдущей ветке.

По второму вопросу серийник можно ток записать

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
RegWriteStringValue( HKLM, 'SOFTWARE\Programma', 'SerialNumber', ExpandConstant('{userinfoserial}'));
end
end;
Автор: EagleSH
Дата сообщения: 07.12.2007 21:34
serg_aka_lain
не работает... блин.

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

а ваще эти танцы с бубном я делаю для определения 64-я или 32-я винда, изначально было так:

Код:
function InitializeSetup(): Boolean;
var
ResultCode: Integer;
s, ResultStr:string;
begin
Result:=True;
If not RegKeyExists(HKLM, 'SOFTWARE\Program')
then
begin
Result:=False;
end
else
begin
end;
end;
Автор: serg_aka_lain
Дата сообщения: 07.12.2007 22:49
EagleSH

Вот этот попробуй проверка для 64 и 32 битной врсии,
если нет сообщение и выход.

p.s. Проверить полностью нет возможности (нет Win64)

function InitializeSetup(): Boolean;
begin
if IsWin64 then
begin
Result:= True;
if not RegKeyExists(HKLM, 'SOFTWARE\Wow6423Node\Program') then
begin
MsgBox('Не найдено 64!',mbInformation, mb_Ok);
Result:= False;
exit;
end
end

begin
if not IsWin64 then
begin
Result:= True;
if not RegKeyExists(HKLM, 'SOFTWARE\Program') then
begin
MsgBox('Не найдено 32!',mbInformation, mb_Ok);
Result:= False;
exit;
end
end
end
end;
Автор: EagleSH
Дата сообщения: 08.12.2007 01:11
serg_aka_lain
шота тупит оно - я в шоке.
винду определяет - 64 или 32
ну а если запись есть в 32-й работает (продолжает установку)

если запись в 64-й - не работает (вылетает)
Автор: serg_aka_lain
Дата сообщения: 08.12.2007 01:45
EagleSH

Поставь в секции Setup
ArchitecturesAllowed=x86 x64
ArchitecturesInstallIn64BitMode=x64
Автор: EagleSH
Дата сообщения: 08.12.2007 01:53
serg_aka_lain
в том то и дело, что стоит

как сделать чтоб


Код:
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpWelcome then
begin
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
end;
function NextButtonClick(CurPage: Integer): Boolean;
var
s: string;
begin
Result := True;
if CurPage = 6 then
begin
if (FileSearch('test.exe', ExpandConstant('{app}')) = '')

then

begin
s := 'Укажите папку, в которой установлена игра';
MsgBox(s, mbError, mb_Ok);
Result := False
end;
end;
end;
end.
Автор: serg_aka_lain
Дата сообщения: 08.12.2007 02:05
EagleSH

Если имеется ввиду это

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpWelcome then
begin
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
if CurPageID = wpSelectDir then
begin
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end
end;
Автор: EagleSH
Дата сообщения: 08.12.2007 02:13
serg_aka_lain
уже почти почти

а теперь бы сооединить всё

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

тобишь перед нажатием на дирселекте кнопки, нужно проверить файл есть или нет (если это сможет инно конечно)

подскажи
Автор: Vitalliano
Дата сообщения: 08.12.2007 09:47
serg_aka_lain

Все получилось огромное спасибо!!!

А насчет проверки системы посмотрю.
Автор: baw17
Дата сообщения: 08.12.2007 10:14
уважаемые гуру своего дела есть вопрос
каким образм можно сделать чтобы секция [Registry]
отрабатывалась 2 раза
до инсталяции и после

тоесть запуская инсталятор он вносит значение в реестр , потом идет копирование файлов, а потом еще рас секция [Registry] вноситться в реестр

Добавлено:
baw17
спасибо разобрался не понадобилась для этого юзаю теперь IS Tool
Автор: serg_aka_lain
Дата сообщения: 08.12.2007 13:22
EagleSH

Если знаем папку установки обновляемой программы
то можно так

[more]

[Setup]
AppName=Program
AppVerName=Program 1.0
DefaultDirName={code:GetInstallPath}
DirExistsWarning=no


[Code]

function GetInstallPath( AppID: String ): String;
var Path: String;
begin
Path:= '';
if not RegQueryStringValue(HKLM, 'SOFTWARE\Wow6423Node\Program','InstallLocation', Path) then
RegQueryStringValue(HKLM, 'SOFTWARE\Program','InstallLocation', Path);
Result := Path;
end;


function InitializeSetup() : Boolean;
begin
Result := True;
if (FileSearch('file.exe', ExpandConstant('{code:GetInstallPath}')) = '') then
begin
MsgBox('Программа установки не может завершить установку (Программы)!' #10
'Поскольку либо (Программа) отсутствует, либо отсутствуют файлы необходимые для продолжения установки.' #13#13
'Проверьте правильность установки (Программы).' ,mbCriticalError , mb_Ok);
Result:= False;
exit;
end
end;

[/more]

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Поиск в WinDjView


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.