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

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

Автор: Raf_SE
Дата сообщения: 13.02.2009 15:25
А как можно сделать такую надпись?

Автор: noiseless
Дата сообщения: 13.02.2009 15:34
Raf_SE
А справку почитать?
Или используй поиск - обсуждалось мульон раз! )))
Автор: Raf_SE
Дата сообщения: 13.02.2009 16:24
noiseless
Справку уже раз 100 вдоль и в поперек выштудировал - не нашел. Ну а насчет поиска... А по каким словам, можно решение данной задачи найти?
Автор: JuNoS
Дата сообщения: 13.02.2009 16:34
Raf_SE

[Messages]
BeveledLabel=Copyrigth 2003-2007.......
Автор: Vselennaya
Дата сообщения: 14.02.2009 01:42
Подскажите пожалуйста, а как сделать скрытый файл?
Чтобы при распаковке в папке его не было видно, только если залезть в свойства папки и там выставить функцию "показывать скрытые файлы и папки".
Автор: Region_70
Дата сообщения: 14.02.2009 06:26
Vselennaya
Чтото непонятно напиши точно что тебя интересует!
Автор: sproxy
Дата сообщения: 14.02.2009 07:20

Цитата:
Чтобы при распаковке в папке его не было видно, только если залезть в свойства папки и там выставить функцию "показывать скрытые файлы и папки".

……чсто скрытые файлы = надо выставить атрибут файла – скрытый (свойства файла>скрытый)…..а вот как это в инно…
Автор: Region_70
Дата сообщения: 14.02.2009 09:35
Чтобы не видно было при распаковки во время устновки. Я так понял это SFX архив вас интересует. Если так то через что вы его запускаете если черз код то вот

Код:
Exec(s, '-y -o"'+ s1 + '"', '', SW_HIDE, ewWaitUntilTerminated, res); вы небудетивидеть распаковку.
А если через [Run] то надо флаг Flags: shellexec runhidden waituntilterminated
Автор: kombat 77
Дата сообщения: 14.02.2009 12:45
Vselennaya

Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; Attribs: "hidden"; Flags: ignoreversion;
Автор: Raf_SE
Дата сообщения: 14.02.2009 13:37
Ктонить знает, как сделать так, чтобы файл из секции "InfoBeforeFile" показывался в зависимости от языка интерфейса инсталлятора? Ну т.е. у меня есть 3 файла, Русский, Украинский и Английский, как сделать чтобы если пользователь выберет англоязычный интерфейс инсталлятора, то показывался и англоязычный файл "InfoBeforeFile", ну и тоже самое относительно остальных локализаций.

P.S.
Так как пареметр "InfoBeforeFile" находиться в секции [Setup], то фишка с добавлением в конец "Languages", не срабатывает.
Автор: kombat 77
Дата сообщения: 14.02.2009 17:26
Raf_SE

Цитата:
Ктонить знает, как сделать так, чтобы файл из секции "InfoBeforeFile" показывался в зависимости от языка интерфейса инсталлятора?

Сталкивался для двухязычной установки, для себя нашел такое простое решение [more=Код]


[Setup]
AppName=My Pregram
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
InfoBeforeFile=info_en.txt
ShowLanguageDialog=True

[Languages]
Name: "English"; MessagesFile: "compiler:Default.isl";
Name: "Russian"; MessagesFile: "compiler:Languages\Russian.isl";

[Files]
Source: "info_en.txt"; DestDir: "{tmp}"; Flags: nocompression;
Source: "info_ru.txt"; DestDir: "{tmp}"; Flags: nocompression;

[Code]
procedure CurPageChanged(CurPageID: Integer);
var
Text: String;
begin
if CurPageID = wpInfoBefore then
if ActiveLanguage = 'English' then
ExtractTemporaryFile('info_en.txt');
LoadStringFromFile(ExpandConstant('{tmp}\info_en.txt'), Text);
WizardForm.InfoBeforeMemo.Text := Text;

if ActiveLanguage = 'Russian' then
ExtractTemporaryFile('info_ru.txt');
LoadStringFromFile(ExpandConstant('{tmp}\info_ru.txt'), Text);
WizardForm.InfoBeforeMemo.Text := Text;
end;

[/more]
Автор: Sig666
Дата сообщения: 14.02.2009 19:03
Все гораздо проще:

[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl; InfoBeforeFile: C:\ru_infobefore.txt
Name: en; MessagesFile: compiler:Languages\English.isl; InfoBeforeFile: C:\en_infobefore.txt
Автор: Raf_SE
Дата сообщения: 14.02.2009 19:18
kombat 77
Хм... Чет не работает Ну в смысле показывает пустой екран, вместо RTF файла.
Можешь склеить 2 кода, [more=этот]procedure CurPageChanged(CurPageID: Integer);
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
(CurPageID = wpSelectComponents) then
WizardForm.BackButton.Visible := False;

PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
end;[/more] и [more=твой]procedure CurPageChanged(CurPageID: Integer);
var
Text: String;
begin
if CurPageID = wpInfoBefore then
if ActiveLanguage = 'English' then
ExtractTemporaryFile('info_en.txt');
LoadStringFromFile(ExpandConstant('{tmp}\info_en.txt'), Text);
WizardForm.InfoBeforeMemo.Text := Text;

if ActiveLanguage = 'Russian' then
ExtractTemporaryFile('info_ru.txt');
LoadStringFromFile(ExpandConstant('{tmp}\info_ru.txt'), Text);
WizardForm.InfoBeforeMemo.Text := Text;
end;[/more]? Возможно иза того что я их неправильно объеденил, и не пашет. (я нюб в этом)
Автор: kombat 77
Дата сообщения: 14.02.2009 20:48
Raf_SE
Вариант предложеный Sig666 действительно проще.
Цитата:
[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl; InfoBeforeFile: C:\ru_infobefore.txt
Name: en; MessagesFile: compiler:Languages\English.isl; InfoBeforeFile: C:\en_infobefore.txt

Автор: Raf_SE
Дата сообщения: 14.02.2009 21:10
Sig666, kombat 77
Спасибо, в самом деле так. Я просто не заметил поста Sig666
Автор: Vselennaya
Дата сообщения: 15.02.2009 05:03

Цитата:
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; Attribs: "hidden"; Flags: ignoreversion;

kombat 77
О, спасибочки То, что надо
Автор: LordVeider
Дата сообщения: 15.02.2009 14:31
Хочется чтобы ветка реестра в CurrentVersion/Uninstall создавалась без постфикса _is1.
Это возможно ?
Автор: Raf_SE
Дата сообщения: 15.02.2009 17:05
А можно сделать так, чтобы до запуска инсталлятора, устанавливалось 3 шрифта в систему? Просто у меня InfoBeforeFile в RTF формате, с использованием пары специфических щрифтов. Нужно чтобы они были в системе пользователя, для корректного отображения в InfoBeforeFile.

P.S.
LordVeider
Любопытно - зачем?
Автор: Studio13 OutlaW
Дата сообщения: 15.02.2009 22:40
Очень странно, почему то я не могу использовать библеотеку innocallback.dll

Например тут

[more=КОД_1]#define TIME_FOR_VIEW 1

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
OutputBaseFileName=Timer_with_InnoCallback.dll
OutputDir={#SourcePath}

[Files]
Source: InnoCallback.dll; Flags: dontcopy;

[Code]
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;

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';

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
case currTime of
{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{src}\Image_2.bmp')) end;
2*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{src}\Image_3.bmp')); KillTimer(0, TimerID); end;
end;
end;

procedure InitializeWizard();
begin

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top;
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.ProgressGauge.Width / 2;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Hide;
WizardForm.FilenameLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{src}\Image_1.bmp'));
SplashImage.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;

begin

if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 4);
TimerID := SetTimer(0, 0, 1000, pfunc);

WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;

WizardForm.ProgressGauge.Show;
SplashImage.Show;
end
else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;

if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageDescriptionLabel.Show;
end;

end;

end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;[/more]

Или тут [more=КОД][Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
Compression=zip

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: c:\games\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: is7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy

[Icons]
Name: {group}\Удалить; IconFilename: {app}\unins000.exe; Filename: {app}\unins000.exe

[Code]
type
TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);
var
ProgressBar : TNewProgressBar;
TimerID: LongWord;
pfunc: LongWord;
Label1:tlabel;

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';
procedure Extract7z (hWnd: THandle; fpath,extractPath:pchar); external 'Extract7z@files:is7z.dll stdcall';
function progress:integer; external 'progress@files:is7z.dll stdcall';
function progressmax:integer; external 'progressmax@files:is7z.dll stdcall';

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
progressbar.Max:=progressmax;
progressbar.Position:=progress;
end;


procedure InitializeWizard();
begin
ProgressBar := TNewProgressBar.Create(WizardForm);
label1:=Tlabel.Create(WizardForm);
WizardForm.ProgressGauge.left:=135;
WizardForm.FilenameLabel.left:=135;
WizardForm.ProgressGauge.width:=280;
ProgressBar.Left := 10;
ProgressBar.Top := WizardForm.ProgressGauge.Top;
ProgressBar.Width := 120;
ProgressBar.Height := WizardForm.ProgressGauge.Height;
ProgressBar.Parent := WizardForm.InstallingPage;
ProgressBar.Position := 0;
label1.parent:=WizardForm.InstallingPage;
label1.top:=WizardForm.FilenameLabel.Top;
label1.caption:='Распаковка архива 7zip';
label1.left:=10;
label1.width:=130;
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall then
begin
pfunc:=WrapTimerProc(@OnTimer, 4)
TimerID:=SetTimer(0, 0, 200, pfunc)
Extract7z (wizardform.handle, ExpandConstant('{src}') + '\anyfiles.7z', ExpandConstant('{app}'));
end
end;

procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpFinished then KillTimer(0, TimerID);
end;[/more]

Выдает ошибку

Не знаю, что делать, ибо скрипт Corona, где тоже используется модуль работает...

Проблема решина самостоятельно)
Автор: GRom V
Дата сообщения: 16.02.2009 15:56
Скажите - возможно ли решение проблемы, а именно - на инсталляторы сделанные в Inno Касперский говорит - запускается потенциально опасная программа. Программа не имеет цифровой подписи. Это как нить лечится??? Не приятно каждый раз лицезреть сообщения подобного рода...

Автор: LordVeider
Дата сообщения: 16.02.2009 17:19

Цитата:
Хочется чтобы ветка реестра в CurrentVersion/Uninstall создавалась без постфикса _is1.
Это возможно ?
Задача решена варварским способом - редактированием Setup.e32.
Автор: Studio13 OutlaW
Дата сообщения: 16.02.2009 20:50
GRom V
. а какое по?
Автор: Artem_Butenko
Дата сообщения: 17.02.2009 01:01
Ребята, пожалуйста поясните, каким образом можно реализовать распаковку определенных файлов указанных в секции [Files] по пути, извлеченному из ключа системного реестра? Тогда как остальные файлы будут распакованы в директорию выбранную пользователем.
Автор: GRom_V
Дата сообщения: 17.02.2009 01:22
Studio13 OutlaW

Цитата:
GRom V
. а какое по?

Именно на сам инсталлятор сделаный в инно. ПО любое
Автор: Studio13 OutlaW
Дата сообщения: 17.02.2009 06:50
Как какое вредоносное ПО распознается? GRom_V
Автор: LordVeider
Дата сообщения: 17.02.2009 07:03
Artem_Butenko

Цитата:
каким образом можно реализовать распаковку определенных файлов указанных в секции [Files] по пути, извлеченному из ключа системного реестра?
DestDir задавать через {reg:}
Автор: Jetr0
Дата сообщения: 17.02.2009 09:20
Всем привет.
У меня следующая проблема:
Есть софтина, запакованая в инсталятор. Устанавливается все нормально, все норм работает, но иногда её приходится устанавливать в нескольких копиях, вот здесь и начинаются проблемы. При установке создается ветка реестра
[more] HKLM\SOFTWARE\programname\1 [/more]
в которой прописан путь к программе. При еще одной установке нужно чтобы создавался ключ уже заканчивающийся на 2:
[more] HKLM\SOFTWARE\programname\2 [/more]
Потом на 3, 4, и тд.

Но и это не все. При установке создается конфиг кодом:
[more] procedure CurStepChanged(CurStep: TSetupStep);
var
S: String;
begin
If CurStep=ssPostInstall then
begin
S := ExpandConstant('{app}')
StringChangeEx(S, ':\', ':\|', True);
SaveStringToFile(ExpandConstant('{app}')+'\config.ini', 'INSTALLATION_NUMBER=1' + #13, true);
[/more]
в котором значение "INSTALLATION_NUMBER=?" должно соответствовать цифре в ветке реестра, тоесть здесь - HKLM\SOFTWARE\programname\?.

Добавлено:
Помогите реализовать данный код.
Автор: milwaukeeman
Дата сообщения: 17.02.2009 11:28
Всем привет.
Подскажите пожалуйста.
Мне нужно после установки удалилась папка со всеми файлами.
Потому что я запаковываю оригинальную установку в свою.
Тоесть сначала пользователь просто указывает путь для распаковки.
потом запускается Run и там уже установка спрашивает куда ставить.

Так вот. Все папки и файлы что создались в шаге один остаются не тронутыми.
А мне нужно чтоб они были уделены после нажатия кнопки "Завершить"

вот мой скрипт.

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVerName "My Program 1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "istool-5.2.1.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{D61AFDB9-1B11-4525-BDEC-1897CF8E2DA5}
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=C:\Setup
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: ..\Рабочий стол\ISTool\istool-5.2.1.exe; DestDir: {app}; Flags: ignoreversion deleteafterinstall recursesubdirs createallsubdirs; Tasks: ; Languages:
Source: ..\Рабочий стол\ISTool\*; DestDir: {app}\; Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon

[Run]
Filename: {app}\istool-5.2.1.exe; WorkingDir: {app}; Flags: waituntilidle
[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
DelTree(ExpandConstant('{app}\'), True, True, True);
end;
end;

Добавлено:
Как сделать чтоб при установке показывалось два Process Bar?
как в играх с free-torrents.org

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVerName "My Program 1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "istool-5.2.1.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{D61AFDB9-1B11-4525-BDEC-1897CF8E2DA5}
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=C:\Setup
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: ..\Рабочий стол\ISTool\istool-5.2.1.exe; DestDir: {app}; Flags: ignoreversion deleteafterinstall recursesubdirs createallsubdirs; Tasks: ; Languages:
Source: ..\Рабочий стол\ISTool\*; DestDir: {app}\; Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon

[Run]
Filename: {app}\istool-5.2.1.exe; WorkingDir: {app}; Flags: waituntilidle
[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
DelTree(ExpandConstant('{app}\'), True, True, True);
end;
end;
Автор: GRom V
Дата сообщения: 17.02.2009 12:18
Studio13 OutlaW

Цитата:
Как какое вредоносное ПО распознается? GRom_V

Просто пишет - запускается потенциально опасная программа. Программа не имеет цифровой подписи. Короче скоко пробовал различные инсталляторы сделанные в Инно - такая фигня...
Автор: Region_70
Дата сообщения: 17.02.2009 12:44
milwaukeeman
Может просто также удалить через батники все!
Смотрите в шапке темы Коллекция скриптов там есть пример как это сделать.Все очень понятно!


Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: в очередной раз босудим антивиры?


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