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

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

Автор: marat shakirov
Дата сообщения: 19.05.2007 22:52
Genri
Спасибо вам огромное.
Автор: rupo
Дата сообщения: 19.05.2007 23:16
вопрос
что надо прописать в скрипте чтоб в ярлыке прописывалось Paбoчaя пaпкa: "бла\бла" ?
А то там пусто приходиться самому прописывать путь
Автор: boss911
Дата сообщения: 20.05.2007 00:01
Так что, ответ кто-то даст на вопрос? Чтоб я сюда каждый час не бегал!
Автор: Sampron
Дата сообщения: 20.05.2007 00:07
Заметил одну ошибку в скине на странице лицензии, перезалил сюда: http://data.cod.ru/1010728394

Добавлено:
boss911
Если ты про кнопки то ответа нет кроме как изменить цвет.
Автор: boss911
Дата сообщения: 20.05.2007 01:50
Sampron

Нет, я про это:

Цитата:
Смущают пока две вещи: это вздергивания (запуск) инсталла после окончания анимации и, если открыта страница лицензии или ридми, то анимация завершается на белом фоне! Что-то из этого решаемо?


Цитата:
Заметил одну ошибку в скине на странице лицензии

Не знаю, про что ты, но попрошу поправить мой скрипт! Так же, хотел тебя попросить, чтоб ты сделал страницу лицензии, чтоб RTF отображался со стилем шрифта и надпись о принятия или не принятия соглашения, была не черного цвета, а основного! Я надеюсь, ты понял, о чем я, так как ты уже мне делал описания для RTF, типа стили шрифта не поддерживались раньше! Как всегда все с пометками об изменениях! Ой, замучил я тебя, но скоро отстану, уже самому надоело!
Автор: Genri
Дата сообщения: 20.05.2007 03:51
rupo
Цитата:
...чтоб в ярлыке прописывалось Paбoчaя пaпкa: "бла\бла" ?
-- WorkingDir. Пример из хелпа:
[Icons]
Name: "{group}\My Program"; Filename: "{app}\MYPROG.EXE"; WorkingDir: "{app}"

Yekver
Цитата:
Не записывается определяемый при установки IP в ini-файл.
-- а я все еще не могу понять:- что, куда и в какой момент писать? Сначала ты говорил "...этот адрес записать перед {app}\Settings.ini"; теперь - "...чтобы он дописался в строчку String: "\\{code:GetServerIP}\{app}\Base\Turuchet.gdb""
В моем примере были строки:
[INI]
Filename: \\{code:GetServerIP}\{app}\Settings.ini; Section: "Default"; Key: "dbPath"; String: "{app}\Base\Turuchet.gdb"
...которые дают указание инсталлятору в файле, который указан параметром Filename, в секции, которая указана параметром Section, для ключа, который указан параметром Key, прописать значение, которое указано параметром String.
В свою очередь, любой из этих параметров может содержать выражение {code:GetServerIP} , вместо которого будет подставлено значение, возвращаемое указанной функцией (в данном примере функцией GetServerIP)
Так что пропиши это выражение в то место, где хочешь видеть адрес, а все остальное инсталлятор сделает сам.

Цитата:
Непорядок с порядком отображения страниц
-- не задан порядок, поэтому непорядок В функциях CreateInputOptionPage, CreateInputQueryPage и т.п. порядок задает первый параметр (который указывает, после какой страницы создать указанную. А у тебя все страницы создаются после wpWelcome
Наверно подразумевалось примерно так:
.........................
UsagePage := CreateInputOptionPage(wpWelcome, ...
.........................
ServerPage := CreateInputQueryPage(UsagePage.ID, ...
.........................
LocalPage := CreateInputQueryPage(ServerPage.ID, ...
.........................

Kindly
Цитата:
Поддерживает ли Inno изменение внешнего курсора
-- похоже да. раньше таким вопросом не задавался, но попробовал - работает.

Код:
Const
GCL_HCURSOR = (-12);
OCR_NORMAL = 32512;

var
OldCursor, NewCursor: Longint;

function LoadCursorFromFile(FileName: String): Longint;
external 'LoadCursorFromFileA@user32 stdcall';

function SetClassLong(hWnd: HWND; Index, NewLong: Longint): Longint;
external 'SetClassLongA@user32 stdcall';

function SetCursor(Cursor: Longint): Longint;
external 'SetCursor@user32 stdcall';

function SetSystemCursor(Cursor, CurType: Longint): Longint;
external 'SetSystemCursor@user32 stdcall';

function GetCursor(): Longint;
external 'GetCursor@user32 stdcall';


procedure InitializeWizard;
begin
OldCursor:= GetCursor;
NewCursor:= LoadCursorFromFile('C:\TEMP\BeOS2.cur');
SetSystemCursor(NewCursor, OCR_NORMAL);
end;

procedure DeinitializeSetup();
begin
SetSystemCursor(OldCursor, OCR_NORMAL);
end;
Автор: NightW0lf
Дата сообщения: 20.05.2007 10:27
Genri

Цитата:
-- можешь попробовать использовать GetVolumeInformation В старой ветке я выкладывал исходники длл-ки с ее использованием.

Знал бы я как + та длл вроде сделана для проверки серийного номера винчестера.
[more=Вот та длл]

Код:
function SerialNumberDisk(disk: string): string;
var
VolumeName : array [0..MAX_PATH-1] of Char;
FileSystemName : array [0..MAX_PATH-1] of Char;
VolumeSerialNo : DWord;
MaxComponentLength : DWord;
FileSystemFlags : DWord;

function GetReplaceCDNumber(num: String): String;
var
i, len: Integer;
begin
Result:= '';
len:= Length(num);
if len <> 8 then exit;
for i:= 1 to (len div 2) do begin
Dec(len);
Result:= Result + num[len ];
Result:= Result + num[len + 1];
Dec(len);
end;
end;

begin
GetVolumeInformation(PChar(disk), VolumeName, MAX_PATH, @VolumeSerialNo, MaxComponentLength,
FileSystemFlags, FileSystemName, MAX_PATH);
Result:= IntToHex(Integer(VolumeSerialNo), 8);
if Win32Platform <> VER_PLATFORM_WIN32_NT then
Result:= GetReplaceCDNumber(Result);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:= SerialNumberDisk('c:\');
end;
Автор: Genri
Дата сообщения: 20.05.2007 12:43
NightW0lf
Цитата:
Знал бы я как
-- Не хочешь длл, прописывай в самом коде:

Код:
[Setup]
AppName=My Program
AppVerName=My Program ver.1.5
DefaultDirName={pf}\My Program

[Code]
Const
BufferLen = 50;

function GetVolumeInformation(PathName, VolumeName: PChar; VolumeNameSize,
VolumeSerialNumber, MaxComponentLength, FileSystemFlags: Longint;
FileSystemName: PChar; FileSystemNameSize: Longint): Longint;
external 'GetVolumeInformationA@kernel32.dll stdcall';

procedure InitializeWizard;
var
VolumeName,
FileSystemName : string;
VolumeSerialNo : Longint;
MaxComponentLength,
FileSystemFlags : Longint;
begin
VolumeName:= StringOfChar( ' ', BufferLen );
FileSystemName:= StringOfChar( ' ', BufferLen );

GetVolumeInformation('C:\', VolumeName, BufferLen-1, VolumeSerialNo,
MaxComponentLength,
FileSystemFlags,
FileSystemName,
BufferLen-1);
MsgBox(FileSystemName, mbInformation, MB_OK);
end;
Автор: Sampron
Дата сообщения: 20.05.2007 13:08
Создал чекбокс на запуск программы на странице Финиша и незнаю как сделать запуск программы после нажатия на кнопку завершить если чекбокс выбран.

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}

[Code]
var
CheckBox: TCheckBox;
CheckBoxLabel: Tlabel;
ResultCode: Integer;

Procedure CheckLaunchOnClick (Sender: TObject);
begin
CheckBox.Checked:=Exec(ExpandConstant('{app}\MyProg.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ResultCode)
end;

Procedure InitializeWizard();
begin
CheckBox:=TCheckBox.Create(WizardForm)
CheckBox.Left:=180
CheckBox.Top:=140
CheckBox.Width:=14
CheckBox.Height:=14
CheckBox.Checked:=True
CheckBox.OnClick:=@CheckLaunchOnClick
CheckBox.Parent:=WizardForm.FinishedPage

CheckBoxLabel:=TLabel.Create(WizardForm)
CheckBoxLabel.Left:=196
CheckBoxLabel.Top:=140
CheckBoxLabel.Transparent:=True
CheckBoxLabel.Caption:='Запустить My Program'
CheckBoxLabel.Parent:=WizardForm.FinishedPage
end;
Автор: NightW0lf
Дата сообщения: 20.05.2007 13:35
Genri
Спасибо! НО только вот как этот код привезать к этому [он внизу] чтобы при быборе одного из дисков происходила проверка выбранного, а не при запуске.

[more=Вот код]

Код:
;Script by GloThin & Genri Edit by NightW0lf "Отображения списка локальных дисков пользователя на странице выбора директории".

[Setup]
;Название программы - инсталлятора, а также заголовок инсталлятора, (пожеланию можно версию указать):
AppName=Example.In.Percent.In.GB.MB.List.Lokal.Disc
;Версия программы - инсталлятора, (пожеланию можно указать - название + версию):
AppVerName=Example.In.Percent.In.GB.MB.List.Lokal.Disc 1.5
;Директория установки для программы - инсталлятора:
DefaultDirName=C:\Example.In.Percent.In.GB.MB.List.Lokal.Disc
;Название выходного файла компилятора:
OutputBaseFilename=in.percent.in.gb.mb.list.lokal.disc.by.glothin.genri


[Code]
const
NeedSize = 200000; //Прописать, сколько мегабайт необходимо
DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVEABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

MB_ICONINFORMATION = $40;
MB_ICONEXCLAMATION = $30;
MB_ICONQUESTION = $20;    
MB_ICONSTOP = $10;
MB_ICONNONE = $0;

var
ListBox: TListBox;
Text: TNewStaticText;
hWnd: Integer;

function GetLogicalDrives: DWORD;
external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: string): Longint;
external 'GetDriveTypeA@kernel32.dll stdcall';

function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer;
external 'MessageBoxA@user32.dll stdcall';


procedure ListBoxOnClick(Sender: TObject);
var
NewLetter, OldString: string;
i: Integer;
begin
for i := 0 to ListBox.Items.Count - 1 do
begin
if ListBox.Selected[i] then
begin
NewLetter := Copy(ListBox.Items[i], 0, 1);
OldString := Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text));
WizardForm.DirEdit.Text := NewLetter + OldString;
end;
end;
end;


procedure InitializeWizard();
var
Page: TWizardPage;
Text: TNewStaticText;
Memo: TMemo;
Path: string;
FreeMB, TotalMB: Cardinal;
drives: DWORD;
i: integer;
begin
Text := TNewStaticText.Create(WizardForm);
Text.Top := 102;
Text.Width := 332;
Text.Height := 14;
Text.Caption := 'Список жестких дисков и свободного места';
Text.Parent := WizardForm.SelectDirPage;

ListBox := TListBox.Create(WizardForm);
ListBox.Top := 120;
ListBox.Width := 332;
ListBox.Height := ScaleY(90);
ListBox.Parent := WizardForm.SelectDirPage;
ListBox.OnClick := @ListBoxOnClick;
ListBox.Font.Name := 'Courier New';
ListBox.Font.Size := 10;
ListBox.Font.Style := [fsBold];
ListBox.Color := clBtnFace;

drives := GetLogicalDrives();
for i := 0 to 31 do
begin
if (drives and (1 shl i)) > 0 then
begin
Path := chr(ord('A') + i) + ':\';
if GetDriveType(Path) = DRIVE_FIXED then
begin
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB>1024 then ListBox.Items.Add(Path + ' ' + IntToStr(round(FreeMB / TotalMB * 100)) + '% ' + floatToStr(round(FreeMB/1024*100)/100) + ' GB')
else ListBox.Items.Add(Path + ' ' + IntToStr(round(FreeMB / TotalMB * 100)) + '% ' + IntToStr(FreeMB) + ' MB');
end;
end;
end;
end;


function NextButtonClick(CurPageID: Integer): Boolean;
var
Path,s: String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < (NeedSize*1024) then
begin
if FreeMB>1024 then
begin
s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ floatToStr(round(FreeMB/1024*100)/100) + ' GB!'
end
else s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ + IntToStr(FreeMB)+' MB';
MessageBox(hWnd, s, 'Недостаточно места на диске', MB_OK or $10)
Result := False;
end;
end;
end;
Автор: Sero
Дата сообщения: 20.05.2007 16:15
Sampron
Попробуй так:
[more=код]

Код:
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}

[Code]
var
CheckBox: TCheckBox;
CheckBoxLabel: Tlabel;
ResultCode: Integer;

procedure DeinitializeSetup();
begin
if Checkbox.Checked=True then
Exec(ExpandConstant('{app}\MyProg.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ResultCode)
end;

Procedure InitializeWizard();
begin
CheckBox:=TCheckBox.Create(WizardForm)
CheckBox.Left:=180
CheckBox.Top:=140
CheckBox.Width:=14
CheckBox.Height:=14
CheckBox.Checked:=True
CheckBox.Parent:=WizardForm.FinishedPage

CheckBoxLabel:=TLabel.Create(WizardForm)
CheckBoxLabel.Left:=196
CheckBoxLabel.Top:=140
CheckBoxLabel.Transparent:=True
CheckBoxLabel.Caption:='Запустить My Program'
CheckBoxLabel.Parent:=WizardForm.FinishedPage
end;
Автор: Sampron
Дата сообщения: 20.05.2007 16:29
Sero
Спасибо! пашет, это для скина с транспарентом.
Автор: Nagual
Дата сообщения: 20.05.2007 16:51
мужики
а может кто выложить код для игры музыки мормата xm, чтобы сразу играла музыка и можно было кнопкой вкл/откл ее
Автор: NightW0lf
Дата сообщения: 20.05.2007 17:30
Nagual

Цитата:
мужики
а может кто выложить код для игры музыки мормата xm, чтобы сразу играла музыка и можно было кнопкой вкл/откл ее

Забирай с:
RL-Team.RU
RapidShare.COM
Автор: Nagual
Дата сообщения: 20.05.2007 17:42
NightW0lf
ага супер спс
Автор: Sero
Дата сообщения: 20.05.2007 18:06
Sampron
Ошибка!
[more=Вот]
Код: [Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}

[Code]
var
CheckBox: TCheckBox;
CheckBoxLabel: Tlabel;
ResultCode: Integer;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result:=True;
if CurPageID=wpFinished then
if Checkbox.Checked=True then
Exec(ExpandConstant('{app}\MyProg.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ResultCode);
end;

Procedure InitializeWizard();
begin
CheckBox:=TCheckBox.Create(WizardForm)
CheckBox.Left:=180
CheckBox.Top:=140
CheckBox.Width:=14
CheckBox.Height:=14
CheckBox.Checked:=True
CheckBox.Parent:=WizardForm.FinishedPage

CheckBoxLabel:=TLabel.Create(WizardForm)
CheckBoxLabel.Left:=196
CheckBoxLabel.Top:=140
CheckBoxLabel.Transparent:=True
CheckBoxLabel.Caption:='Запустить My Program'
CheckBoxLabel.Parent:=WizardForm.FinishedPage
end;
Автор: Sampron
Дата сообщения: 20.05.2007 18:29
Sero
Действительно ошибка при отмене установки, Спасибо за поправку!
Автор: Yekver
Дата сообщения: 20.05.2007 19:51
Genri
Спасибо большое! Всё получилось.....
Автор: iTASmania_Inc
Дата сообщения: 21.05.2007 00:09
Sampron
А не мог бы ты, пожалуйста, выложить ПОЛНЫЙ (пожалуйста!!!) код для скина Slate с кнопками управления музыкой в формате MP3! А то с XM и MOD более-менне разобрался, а вот MP3 не могу заставить проигрывать. Наверное, потому что нуль в программировании.
Автор: Genri
Дата сообщения: 21.05.2007 00:12
NightW0lf
Цитата:
как этот код привезать к этому [он внизу] чтобы при быборе одного из дисков происходила проверка выбранного

Получение имени файловой системы оформляешь в виде функции. Например:

Код: function GetFileSystemName(Path: string): string;
var
VolumeName,
FileSystemName : string;
VolumeSerialNo : Longint;
MaxComponentLength,
FileSystemFlags : Longint;
begin
VolumeName:= StringOfChar( ' ', BufferLen );
FileSystemName:= StringOfChar( ' ', BufferLen );

GetVolumeInformation(Path, VolumeName, BufferLen-1, VolumeSerialNo,
MaxComponentLength,
FileSystemFlags,
FileSystemName,
BufferLen-1);
Result:= Trim(FileSystemName);
end;
Автор: iTASmania_Inc
Дата сообщения: 21.05.2007 00:24
И ещё хотел бы попросить помощи: есть такая DLL-ка (timectrl.dll) и кусок кода Timer.iss, которые когда-то кем-то (извините, что не помню кем именно) выкладывались на этом форуме. Для верности перезалил на: http://data.cod.ru/1014922698
Так вот - этот скрипт вместе с DLL-кой не позволяют перейти дальше со страницы принятия лицензионного соглашения, пока не истечёт определённое количество секунд. А как сделать, чтобы количество секунд было более 999, например 1100 или 1200, потому что 999 - это, очевидно, предел?
Автор: NightW0lf
Дата сообщения: 21.05.2007 00:39
Genri
Огромное спасибо!
Автор: Sampron
Дата сообщения: 21.05.2007 01:08
iTASmania_Inc
Это я выкладывал, а зачем больше? или ты хочешь в лицензию какую-то энциклопедию вставить?
Автор: Victor_Dobrov
Дата сообщения: 21.05.2007 02:14
Возвращаясь к напечатанному... Хочу поделиться завершённым скриптом определения аппаратных требований.
Возможности: Вызов сведений из любой страницы, Корректная проверка версий Windows и Service Pack, Проверка программы пользователя (укажите ключ реестра), Показ размера системных папок, Проверка аппаратной конфигурации, Выбор диска установки.

Скачать скрипт:

Скачать бонус: пакет Windows Tweaks (краткий обзор): Замена оформления системы на улучшенное Vista, Миниатюры свёрнутых окон на 'Рабочем столе', Вывод в контекстное меню рисунков, фильмов и музыки, Обзор папок из контекстного меню, Рабочий стол: запись/восстановление положения значков, Диспетчер задач: службы, приоритеты задач, загрузка сети, Ускорение работы системы, и многое другое...

------------------ У меня вопрос к экспертам:

Function FolderSize(Dir: string): Cardinal;    // Укажите, как иначе получить размер, папки более 2Гб дают ошибку на старых версиях WinScript!
begin
    SaveStringToFile(ExpandConstant('{tmp}\DirSize.vbs'),'WScript.CreateObject("WScript.Shell").RegWrite "HKCU\Environment\DirSize",CreateObject("Scripting.FileSystemObject").GetFolder("'+ Dir +'").Size/1048576,"REG_DWORD"', False);
    ShellExec('open','DirSize.vbs','',ExpandConstant('{tmp}'),sw_Hide,ewWaitUntilTerminated, errorCode); RegQueryDWordValue(HKCU,'Environment','DirSize',Result); RegDeleteValue(HKCU,'Environment','DirSize');
end;

GloThin, спасибо за вашу DelSp, я её немного сократил...

Function DelSp(String: String): String;    // Удаление начальных пробелов в строке
begin
    while (Pos(' ', String) =1) do Delete(String,1,1) Result:= String
end;
Автор: Chanka
Дата сообщения: 21.05.2007 07:56
Victor_Dobrov

У меня при нажатии на кнопку 'О системе' вылезает такая ошибка:


windows Script Host

Сценарий:
C:\Users\Chanka\AppData\Local\Temp\is-CJOC6.tmp\DirSize.vbs
Строка: 1
Символ: 1
Ошибка: Разрешение отклонено
Код: 800A0046
Источник: Ошибка выполнения Microsoft VBScript

У меня Windows Vista Ultimate
Автор: maxdddca123
Дата сообщения: 21.05.2007 10:05
Victor_Dobrov
Спасибо, только сист требования определяются оч долго, сделать бы прогрес бар, пока они определяются !
Автор: Kindly
Дата сообщения: 21.05.2007 11:04
Genri

Цитата:
Либо изменить курсор только для отдельных типов компонент:

Спасибо. Вот этот вариант самый лучший. Идеально подходит для обновленного траспарентного скина от Sampron. Указать всего хендлы кнопки и wizardform. Стильно! Genri как всегда на высоте и Sampron молодец.
Автор: iTASmania_Inc
Дата сообщения: 21.05.2007 13:22
Sampron
На самом деле не знаешь? Или всё-таки время можно увеличить?
Автор: Sampron
Дата сообщения: 21.05.2007 13:26
iTASmania_Inc
На самом деле незнаю.
Автор: iTASmania_Inc
Дата сообщения: 21.05.2007 13:35
Обидно

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Mail.ru агент - вход не выполнен


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