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

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

Автор: serg_aka_lain
Дата сообщения: 11.12.2008 23:08
crank666

Цитата:
То что ты мне написал я не понял что и куда, напиши плиз полностью скрипт и как, где ставить антрибуты.

Хотяб так, будет своя иконка у папки, взятая из файла "proga.exe" [more=(для примера)]

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

[Dirs]
Name: "{app}"; Attribs: "readonly"; Flags: uninsalwaysuninstall;

[Files]
Source: "proga.exe"; DestDir: "{app}"; Flags: ignoreversion;
Source: "desktop.ini"; DestDir: "{app}"; Attribs: "hidden system"; Flags: ignoreversion;

[/more]

Автор: Serega0675
Дата сообщения: 11.12.2008 23:11
serg_aka_lain
Спасибо.
В данном примере отключается описание компонентов, если хоть один компонент отсутствует, но в реальной программе у меня 26 компонентов и 99%, что минимум парочка будет отсутствовать.
Можно ли сделать, чтоб описание отсутствующего компонента просто пропускалось? Т.е. каким-то образом, привязать описание к конкретному компоненту?

Добавлено:
serg_aka_lain

Цитата:
Хотяб так, будет своя иконка у папки, взятая из файла "proga.exe" (для примера)
мне кажется, в пример надо добавить флаг uninsremovereadonly, чтоб деинсталлятор снимал атрибуты перед удалением.
Автор: serg_aka_lain
Дата сообщения: 11.12.2008 23:39
Serega0675

Цитата:
Можно ли сделать, чтоб описание отсутствующего компонента просто пропускалось?

незнаю., за отображение описаний отвечает "descctrl.dll".


Добавлено:
з.ы.

Цитата:
мне кажется, в пример надо добавить флаг uninsremovereadonly, чтоб деинсталлятор снимал атрибуты перед удалением.

надо для секции Files, в Dirs не надо, если папка после деинсталяции пуста, то удалится.
Автор: Serega0675
Дата сообщения: 11.12.2008 23:48
serg_aka_lain
Спасибо.
Автор: crank666
Дата сообщения: 11.12.2008 23:59
serg_aka_lain
Я незнаю, я скопировал этот скрипт что ты мне написал для примера, но папка не меняет иконку, а эта "proga.exe" появляется в папке.
Автор: serg_aka_lain
Дата сообщения: 12.12.2008 00:15
crank666

Цитата:
Я незнаю, я скопировал этот скрипт что ты мне написал для примера, но папка не меняет иконку, а эта "proga.exe" появляется в папке.


Ну это для примера "proga.exe".
Нужна твоя иконка или .exe и в desktop.ini прописывай её имя
> сруктура desktop.ini



[.ShellClassInfo]
ConfirmFileOp=0
NoSharing=0
IconFile=твоя .ico или .exe
IconIndex=0


Автор: crank666
Дата сообщения: 12.12.2008 00:25
serg_aka_lain
Ну вот у мя так выглядит:

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

[Dirs]
Name: "{app}"; Attribs: "readonly"; Flags: uninsalwaysuninstall;

[Files]
Source: "icon.ico"; DestDir: "{app}"; Flags: ignoreversion;
Source: "desktop.ini"; DestDir: "{app}"; Attribs: "hidden system"; Flags: ignoreversion;

[.ShellClassInfo]
ConfirmFileOp=0
NoSharing=0
IconFile=icon.ico
IconIndex=0

Правильно ?
Но при этом иконка у папки не меняется и всё.
Автор: GRom V
Дата сообщения: 12.12.2008 00:29
Подскажите плизз! Есть такая командная строка (для установке компонентов в висте):
start /w pkgmgr /iu:"TelnetClient"

Как мне ее записать кодом? Пишу
GetWindowsVersionEx(Version);
if Version.NTPlatform and (Version.Major = 6) and (Version.Minor = 0) then
begin
Exec('start', 'pkgmgr /iu:"TelnetClient"', '', SW_HIDE, ewWaitUntilTerminated, res);

Понимаю фигня какаято - а сообразить не могу....
Автор: crank666
Дата сообщения: 12.12.2008 00:31
clemenco
Спасибо, но всё получается не так как я хочу.
У меня инсталлятор выглядит (например SetupIconFile=зелёная иконка), я устанавливаю программу и деинсталлятор получается такой же (зелёная иконка), а я хочу чтобы инсталлятор был (зелёная иконка), а деинсталлятор (например красная иконка).
При помощи Restorator получается аналогично.
Автор: Serega0675
Дата сообщения: 12.12.2008 00:34
crank666

Цитата:
Но при этом иконка у папки не меняется и всё.
у меня с таким Desktop.ini, отображается:
[.ShellClassInfo]
IconFile=Icons.dll
IconIndex=cl
Автор: Aion13
Дата сообщения: 12.12.2008 00:47
Ещё вопрос: как отключить дублирование папки установки в пути?
Т.е. если изменяешь путь, то он изменяется именно так как ты его меняешь, а не дописывается ещё плюс то что у тебя в параметре DefaultDirName.
Пример:
DefaultDirName=С:\My Prog
Я хочу установить в D:\System Prog\2
А он мне дописывает значение My Prog к пути, вот и получается: D:\System Prog\2\My Prog

Вот как от этого избавится?
Автор: serg_aka_lain
Дата сообщения: 12.12.2008 00:50
crank666
Возможно, дело в иконке, ну вот ещё вариант через секцию Code
[more]



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

[Files]
Source: "icon.ico"; DestDir: "{app}"; Flags: ignoreversion;

[Code]

var
ErrorCode: Integer;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
SaveStringToFile(ExpandConstant('{app}\desktop.ini'), '[.ShellClassInfo]' + #13#10, true);
SaveStringToFile(ExpandConstant('{app}\desktop.ini'), 'IconResource=' + ExpandConstant('{app}\icon.ico,0') + #13#10, true);

Exec('attrib', ' +r ' + '"' + ExpandConstant('{app}') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
Exec('attrib', ' +h +s ' + '"' + ExpandConstant('{app}\desktop.ini') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
begin
Exec('attrib', ' -h -s ' + '"' + ExpandConstant('{app}\desktop.ini') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
DeleteFile(ExpandConstant('{app}\desktop.ini'));
end;
end;

[/more]
Автор: crank666
Дата сообщения: 12.12.2008 00:59
serg_aka_lain
Большое спасиба за старание помоч, но ничего не получилось, другой скрипт, а делает всё также.

а в нутри папки поялвяется сама иконка
Автор: clemenco
Дата сообщения: 12.12.2008 01:10
crank666
скрипт
serg_aka_lain
рабочий, пробуй в том виде в котором тебе его дали.
если всё работает вставляй в свой. если после этого не работает, значит ошибка при совмещении.
Автор: crank666
Дата сообщения: 12.12.2008 01:14
clemenco
Я пробовал в том виде в котором мне дали, зачем я буду сразу совмещать, я сначала пробую а потом совмещаю
Автор: braunberg
Дата сообщения: 12.12.2008 01:28

Цитата:
Кто то предлагал такой вариант для деинсталятора
[setup]
SetupIconFile=C:\icon.ico - (иконка инсталлятора)
UninstallIconFile=C:\icon2.ico - (иконка деинсталлятора, которая будет отображаться в правом верхнем углу окна 'Процесс удаления')
UninstallDisplayIcon=C:\icon3.ico - (значок для деинсталлятора в диалоге 'Установка и удаление программ' Панели управления)
UninstallStyle=classic – (стиль деинсталлятора)

По моему вопросу есть какие нибудь мнения...


clemenco, crank666, все перечисленое выше работало и работает, но только в 4-х(!) версиях Inno Setup в них можно было поставить разные иконки на инсталлятор и деинсталлятор, в 5-х версиях этого сделать нельзя.
Автор: crank666
Дата сообщения: 12.12.2008 01:54
braunberg
Я сразу нашёл 4-ю версию , тока вот зря, думал щас я там иконки все себе и поменяю, но в 4-й версии не всё поддерживается что есть в 5-й, так что мой скрипт не откомпелировался в 4-й версии.
Автор: braunberg
Дата сообщения: 12.12.2008 03:10
crank666
Ну, тут тебе решать или иконки, или возможности последних версий.
ЗЫ Я бы последнее выбрал
Автор: crank666
Дата сообщения: 12.12.2008 03:32
Я тоже решил выбрать возможности.
Ну всётаки если кто может помогите ещё, посмотрите
Автор: braunberg
Дата сообщения: 12.12.2008 06:00
crank666
Иконка деинсталляции в меню Пуск (корзина)

[Icons]
Name: {group}\Удалить Cstrike; Filename: {uninstallexe}; IconFilename: "{sys}\SHELL32.dll"; IconIndex: 31


Своя иконка деинсталляции в меню Пуск (отображается если установка идет по-дефолту в Program Files)

[Files]
Source: uninst.ico; DestDir: {app}

[Icons]
Name: {group}\Удалить Cstrike; Filename: {uninstallexe}; IconFilename: "{pf}\Cstrike\uninst.ico";
Автор: Forslay
Дата сообщения: 12.12.2008 09:22

Цитата:
crank666


Красивая схема, просто понравилась решил заметить. =))) Вот видно сразу человек, который может объяснить в дествительности чего он хочет. =) Даже спасибо скажу, за то, что есть такие люди =)
Автор: Aion13
Дата сообщения: 12.12.2008 10:00
Я тешу себя надеждой что всё-таки глянет на мои проблемы, и, возможно, подскажет как их решить. Очень на это надеюсь.

1) Помогите пожалуйста решить такую проблемку: на странице выбора дополнительных компонентов (создание ярлыков и прочее), мне нужно под выбранным компонентом написать свой текст, что-то вроде описания, со своим стилем шрифтом и так далее. Как это осуществить?
Пример такого описания тут: http://s56.radikal.ru/i151/0812/4a/103725771e2f.png

2) Как сделать ещё одну страницу с выбором дополнительных компонентов, т.е. на одной один выбор компонентов, на другой допустим отдельным пунктом идёт выбор, к примеру резервирования файлов?

3) Как сделать кнопки управления музыкой инсталлятора, вынесенные в нижнюю левую часть (где прописывается BeveledLabel), и их было всего 2: play/pause и stop? Вот как это осуществить?

4) При бекапе файлов происходит копирование в папку "Backup" полного пути к файлу, но сам файл не резервируется потому как резервить нечего. А вот путь остаётся, дак ещё и потом обратно возвращается мол типо он что-то заменяет, хотя там просто пустые папки. Что нужно поправить или добавить в коде, чтобы такого не было?

5) Как сделать так, чтобы на странице доп. информации (управляется параметром InfoBeforeFile) на кнопку "Далее" можно было нажать только если всю страницу прочтут до конца?

6) Как отключить дублирование папки установки в пути? Пример: DefaultDirName=С:\My Prog. Я хочу установить в D:\System Prog\2. А он мне дописывает значение My Prog к пути, вот и получается: D:\System Prog\2\My Prog.
Вот как от этого избавится, чтобы устананавливалась именно то что я выбрал и ничего не дописывалось?

Если можно, напишите уже готовый код, а то я в этом смысле новичёк....

Заранее спасибо за помощь.
Автор: noiseless
Дата сообщения: 12.12.2008 10:06
Aion13
По пункту 4 - скрипт в студию, на словах никто ничего не понимает

По пункту 5 - [more]
Тут идет речь о лицензии - пока ее до конца не прочтешь, пункт "Согласен" будет не активен Важный момент - параметр TestLine. Это та линия в файле лицензии, после которой лицензия считается прочитанной
[_Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
LicenseFile=License.rtf

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

[_Code]
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
const
EM_GETFIRSTVISIBLELINE = $CE;
TestLine = 10;
var
TimerID: LongWord;

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);
var
CurrLine: integer;
begin
CurrLine:= SendMessage(WizardForm.LicenseMemo.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
If CurrLine >= TestLine then
begin
WizardForm.LicenseAcceptedRadio.Enabled:= True;
KillTimer(0, TimerID);
end;
//WizardForm.Caption:= IntToStr(CurrLine);
end;

procedure InitializeWizard();
begin
WizardForm.LicenseAcceptedRadio.Enabled:= False;
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if CurPageID = wpLicense then
begin
pfunc:= WrapTimerProc(@OnTimer, 4);
TimerID:= SetTimer(0, 0, 500, pfunc);
end else
KillTimer(0, TimerID);
end;

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

По пункту 6 - приведи кусок скрипта, а то непонятно почему это происходит
Обычно если доступ к страничке выбора директории установки есть, то и путь можно менять как угодно (только если он "жестко" не установлен)
Автор: Aion13
Дата сообщения: 12.12.2008 10:30
noiseless
По пункту 4: скрипт обычного бекапа.

[Files]
Source: D:\base\*; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension overwritereadonly;

[Code]
function MoveFile(const srcFile, destFile: PChar): Integer;
external 'MoveFileA@kernel32.dll stdcall';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
MoveDir(ExpandConstant('{app}\Install_DM\Backup\'),ExpandConstant('{app}'));
RemoveDir(ExpandConstant('{app}\Install_DM\Backup\'));
RemoveDir(ExpandConstant('{app}\Install_DM'))
end;
end;

procedure CreateBackup;
var
srcFile, destFile: string;
basePath, shortPath: string;
begin
basePath:= ExpandConstant('{app}');
srcFile:= ExpandConstant(CurrentFileName);
shortPath:= srcFile;
StringChangeEx(shortPath, basePath, '', True);
destFile:= ExpandConstant('{app}\Install_DM\Backup') + shortPath;
ForceDirectories(ExtractFilePath(destFile));
MoveFile(PChar(srcFile), PChar(destFile));
end;

И вот он почему-то если допустим нечего заменять, он в Backup папке при установке создаёт путь полный до этого файла, но там ничего нет (т.е. одни папка имут), впринципе это правильно (нет файлов для резервирования потому что). Но сам факт того, что эти папки создаются напрягает. Вот как сделать чтобы этого не происходило?

По пункту 5: так там же файл лицензии. а мне нужно InfoBeforeFile. Или там просто заменить License на InfoBeforeFile?
По пункту 6: как я приведу кусок скрипта если он автоматически создаётся программой, а не мной Т.е если я её вручную не отключаю и не прописываю, то тогда страница и путь задаётся по жёсткому параметру DefaultDirName. И когда собираешься поменть директорию то к концу приписывается значение из него. А мне нужно чтобы не приписывался.
Автор: GRom V
Дата сообщения: 12.12.2008 11:28
Помогите плиЗЗ!!! Очень надо, как записать командную строку кодом:
вот команда:
start /w pkgmgr /iu:"TelnetClient"
вот что я пишу:
Exec('start', 'pkgmgr /iu:"TelnetClient"', '', SW_HIDE, ewWaitUntilTerminated, res);
Но она не канает....
Автор: noiseless
Дата сообщения: 12.12.2008 11:54
GRom V
Попробуй так:
Exec('cmd.exe', 'start /w pkgmgr /iu:"TelnetClient"', '', SW_HIDE, ewWaitUntilTerminated, res);

Aion13
4 пункт - Попробуй так (не проверял ):

procedure CreateBackup;
var
srcFile, destFile: string;
basePath, shortPath: string;
begin
basePath:= ExpandConstant('{app}');
srcFile:= ExpandConstant(CurrentFileName);
if srcFile <>'' then
begin
shortPath:= srcFile;
StringChangeEx(shortPath, basePath, '', True);
destFile:= ExpandConstant('{app}\Install_DM\Backup') + shortPath;
ForceDirectories(ExtractFilePath(destFile));
MoveFile(PChar(srcFile), PChar(destFile));
end;
end;

5 пункт - как-то так [more]
[_Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
;LicenseFile=License.rtf
InfoBeforeFile=read_0.txt

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

[_Code]
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
const
EM_GETFIRSTVISIBLELINE = $CE;
TestLine = 15;
var
TimerID: LongWord;

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);
var
CurrLine: integer;
begin
CurrLine:= SendMessage(WizardForm.InfoBeforeMemo.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
If CurrLine >= TestLine then
begin
WizardForm.NextButton.Enabled:=True;
KillTimer(0, TimerID);
end;
// WizardForm.Caption:= IntToStr(CurrLine);
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if CurPageID = wpInfoBefore then
begin
WizardForm.NextButton.Enabled:=False;
pfunc:= WrapTimerProc(@OnTimer, 4);
TimerID:= SetTimer(0, 0, 500, pfunc);
end else
begin
KillTimer(0, TimerID);
WizardForm.NextButton.Enabled:=True;
end;
end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;
[/more]
Автор: GRom V
Дата сообщения: 12.12.2008 12:10
noiseless

Цитата:
GRom V
Попробуй так:
Exec('cmd.exe', 'start /w pkgmgr /iu:"TelnetClient"', '', SW_HIDE, ewWaitUntilTerminated, res);


Пробовал - запускается cmd.exe, но pkgmgr /iu:"TelnetClient" не выполняется
Автор: Aion13
Дата сообщения: 12.12.2008 12:32
noiseless
По пункту 5 вроде помогло, спасибо большое! Ток вот значение TestLine побольше сделал и всё норм. Прям чтоб до конца если не посмотришь кнопочка не загорится

По пункту 4 что-то никак. Тоже самое. Попробуй сам создать папку в папке, её в другой папке и там какой-нить файл положить. И установи параметры бекапа на этот файл. что-то вроде этого:

[Files]
Source: D:\base\*; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension overwritereadonly;

Флаги кстати не влияют. Просто у меня такие стоят. Хотя можешь и поэкспериментировать. Но у меня эти эксперименты давали тоже результат: папки всё равно создаются, как бы обозначая путь до файла или файлов, хотя эти файлы не будут бекапится потому что их нет.

p.S
По остальным пунктам не знаешь? Мне бы ещё хотябы решить проблему по пункту 1. [more]Я тешу себя надеждой что всё-таки глянет на мои проблемы, и, возможно, подскажет как их решить. Очень на это надеюсь.

1) Помогите пожалуйста решить такую проблемку: на странице выбора дополнительных компонентов (создание ярлыков и прочее), мне нужно под выбранным компонентом написать свой текст, что-то вроде описания, со своим стилем шрифтом и так далее. Как это осуществить?
Пример такого описания тут: http://s56.radikal.ru/i151/0812/4a/103725771e2f.png

2) Как сделать ещё одну страницу с выбором дополнительных компонентов, т.е. на одной один выбор компонентов, на другой допустим отдельным пунктом идёт выбор, к примеру резервирования файлов?

3) Как сделать кнопки управления музыкой инсталлятора, вынесенные в нижнюю левую часть (где прописывается BeveledLabel), и их было всего 2: play/pause и stop? Вот как это осуществить?

4) При бекапе файлов происходит копирование в папку "Backup" полного пути к файлу, но сам файл не резервируется потому как резервить нечего. А вот путь остаётся, дак ещё и потом обратно возвращается мол типо он что-то заменяет, хотя там просто пустые папки. Что нужно поправить или добавить в коде, чтобы такого не было?

5) Как отключить дублирование папки установки в пути? Пример: DefaultDirName=С:\My Prog. Я хочу установить в D:\System Prog\2. А он мне дописывает значение My Prog к пути, вот и получается: D:\System Prog\2\My Prog.
Вот как от этого избавится, чтобы устананавливалась именно то что я выбрал и ничего не дописывалось?

Если можно, напишите уже готовый код, а то я в этом смысле новичёк....

Заранее спасибо за помощь.[/more]
Автор: htuos
Дата сообщения: 12.12.2008 13:14
ExpeditorR

Цитата:
Цитата:

Цитата: 2.прозрачный фон у гифа куда делся?

Вообщето он прозрачный, в примере который был в архиве фон белый, и это виден цвет формы, а не фон gif'a, хотя может на других gif'aх прозрачность и не работает, на тесты времени нет.
Автор: noiseless
Дата сообщения: 12.12.2008 13:21
Aion13

Цитата:
По пункту 5 вроде помогло, спасибо большое! Ток вот значение TestLine побольше сделал и всё норм. Прям чтоб до конца если не посмотришь кнопочка не загорится

Ну да, собственно, пока прокрутку до конца не сделать кнопка не активна. Просто решал буквально только что и "причесать" не получилось

Цитата:

По пункту 4 что-то никак...

Я только что попробовал. Специально удалил файл из base\<папка1>\<папка2>\<папка3>. Так при бекапе этой структуры не было, т.е. не забекапилась именно пустая папка, без файлов. Вроде так надо было или я чео-то не догнал?

Цитата:

p.S
По остальным пунктам не знаешь? Мне бы ещё хотябы решить проблему по пункту 1.

Пока нет, увы...

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

Предыдущая тема: Презентация


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