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

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

Автор: Genri
Дата сообщения: 29.05.2007 17:01
maxdddca123
Цитата:
#define BuildNum Int(ReadIni(SourcePath + "\\BuildInfo.ini","Info","Build","0,1"))
#expr BuildNum = BuildNum + 0,1


Определяем переменную BuildNum и присваиваем ей значение, считанное из файла BuildInfo.ini, расположенного в каталоге с исходным скриптом, из секции Info, ключ Build. При отсутствии файла или секции или ключа, присваиваем переменной значение 0 (Inno Help - Inni Setup Preprocessor - Built-in functions - ReadIni function):
#define BuildNum Int(ReadIni(SourcePath + "\\BuildInfo.ini","Info","Build","0"))

Увеличиваем значение BuildNum на 1 (Математика - 2 класс):
#expr BuildNum = BuildNum + 1

Сохраняем значение BuildNum в файл BuildInfo.ini, расположенный в каталоге с исходным скриптом, в секцию Info, ключ Build. При отсутствии файла или секции или ключа - файл/секция/ключ создаются (Inno Help - Inni Setup Preprocessor - Built-in functions - WriteIni function):
#expr WriteIni( SourcePath + "\\BuildInfo.ini","Info","Build", BuildNum )
Автор: DuhaLab
Дата сообщения: 29.05.2007 17:31
Genri
Спасибо!!!

+ как правильно зашифровать сетап, чтоб его нельзя было вскрыть прогой IsUnp
я пробовал файл ISCrypt.dll и прописывал в коде Encryption=true и Password=хххххх не помогает!!!
Автор: Genri
Дата сообщения: 29.05.2007 17:45
DuhaLab
Цитата:
как правильно зашифровать сетап
-- см. в шапке Руководство по расширенным возможностям Inno Setup 5 от Kindly
Автор: maxdddca123
Дата сообщения: 29.05.2007 18:46
Genri
Ничего смешного
Вы бесподобны, спасибо за развёрнутый ответ, я после второго примера вашего это понял, уже не совсем в танке то ...
Спрошу для общего развития:
что за св-ва Tag и TabOrder ? Что они определяют ?
Автор: Genri
Дата сообщения: 29.05.2007 19:01
maxdddca123 -- сорри - ничего личного, просто настроение хорошее. На самом деле это хорошо, что не ленишься экспериментировать.

Tag - св-во любого компонента. Для самого компонента ничего не меняет, существует только для удобства разработчиков. В нем можно сохранять какие-то свои значения/флаги и использовать их в коде.

TabOrder - если коротко, порядок, в котором передается фокус на компоненты при нажатии клавиши табуляции.

Это так, как я это понимаю. Может програмеры поправят.
Автор: Sampron
Дата сообщения: 29.05.2007 19:28
Genri
Спасибо за код с кнопкой!
Создал новую страницу компонентов с описанием компонентов как у NSIS и появилось ещё 2 вопроса:
1) Как можно убрать чекбоксы с страницы Завершения?
2) Можно ли на этой странице создать текст в нижнем левом углу как у NSIS в который будет вписыватся размер компонента, и чтоб при выборе другого компонента размер плюсовался?
Первый вопрос больше интересует.
Код [more=здесь]
Код: [Setup]
AppName=AppName
AppVerName=AppVerName
DefaultDirName=C:\AppName

[Files]
Source: 1.exe; DestDir: {app}; Flags: isreadme; Check: Checked1
Source: 2.exe; DestDir: {app}; Flags: isreadme; Check: Checked2
Source: 3.exe; DestDir: {app}; Flags: isreadme; Check: Checked3

[Code]
Var
Page: TWizardPage;
Text1,Text2,Text3,Text4: TNewStaticText;
Panel: TPanel;
ListBox: TListBox;
Check1,Check2,Check3: TCheckBox;
NoChecks,Label1,Label2,Label3: TLabel;

Function Checked1: Boolean;
begin
Result:=Check1.Checked
end;

Function Checked2: Boolean;
begin
Result:=Check2.Checked
end;

Function Checked3: Boolean;
begin
Result:=Check3.Checked
end;

Procedure Check1OnClick (Sender: TObject);
begin
Check1.Checked:=Not(Check1.Checked)
end;

Procedure Check2OnClick (Sender: TObject);
begin
Check2.Checked:=Not(Check2.Checked)
end;

Procedure Check3OnClick (Sender: TObject);
begin
Check3.Checked:=Not(Check3.Checked)
end;

procedure Check1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=True
Text4.Caption:='Описание компонента 1'
end;

procedure Check2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=True
Text4.Caption:='Описание компонента 2'
end;

procedure Check3MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=True
Text4.Caption:='Описание компонента 3'
end;

procedure NoChecksMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=False
Text4.Caption:='Наведите курсор мыши на название компонента, чтобы прочесть его описание.'
end;

Procedure InitializeWizard();
begin
Page:=CreateCustomPage(2, 'Компоненты устанавливаемой программы', 'Выберите компоненты, которые вы хотите установить.')

Text1:=TNewStaticText.Create(Page)
Text1.Left:=0
Text1.Top:=0
Text1.Width:=417
Text1.Height:=28
Text1.AutoSize:=False
Text1.WordWrap:=True
Text1.Caption:='Выберите компоненты программы, которые вы хотите установить. Нажмите на кнопку "Далее" для продолжения.'
Text1.Parent:=Page.Surface

Text2:=TNewStaticText.Create(Page)
Text2.Left:=0
Text2.Top:=63
Text2.Width:=130
Text2.Height:=42
Text2.AutoSize:=False
Text2.WordWrap:=True
Text2.Caption:='Выберите компоненты программы для установки:'
Text2.Parent:=Page.Surface

Panel:=TPanel.Create(Page)
Panel.Left:=287
Panel.Top:=60
Panel.Width:=130
Panel.Height:=160
Panel.BevelInner:=bvLowered
Panel.Parent:=Page.Surface

Text3:=TNewStaticText.Create(Page)
Text3.Left:=293
Text3.Top:=54
Text3.Font.Color:=clBlue
Text3.Caption:='Описание'
Text3.Parent:=Page.Surface

Text4:=TNewStaticText.Create(Page)
Text4.Left:=4
Text4.Top:=10
Text4.Width:=122
Text4.Height:=140
Text4.AutoSize:=False
Text4.WordWrap:=True
Text4.Parent:=Panel

NoChecks:=TLabel.Create(Page)
NoChecks.Width:=WizardForm.Width
NoChecks.Height:=WizardForm.Height
NoChecks.Autosize:=False
NoChecks.Transparent:=True
NoChecks.OnMouseMove:=@NoChecksMouseMove
NoChecks.Parent:=Page.Surface

ListBox:=TListBox.Create(Page)
ListBox.Left:=135
ListBox.Top:=60
ListBox.Width:=140
ListBox.Height:=160
ListBox.Parent:=Page.Surface

Check1:=TCheckBox.Create(Page)
Check1.Left:=2
Check1.Top:=0
Check1.Checked:=True
Check1.Parent:=ListBox

Check2:=TCheckBox.Create(Page)
Check2.Left:=2
Check2.Top:=16
Check2.Checked:=True
Check2.Parent:=ListBox

Check3:=TCheckBox.Create(Page)
Check3.Left:=2
Check3.Top:=32
Check3.Checked:=True
Check3.Parent:=ListBox

Label1:=TLabel.Create(Page)
Label1.Left:=16
Label1.Top:=2
Label1.Caption:='Компонент 1'
Label1.OnClick:=@Check1OnClick
Label1.OnMouseMove:=@Check1MouseMove
Label1.Parent:=Check1

Label2:=TLabel.Create(Page)
Label2.Left:=16
Label2.Top:=2
Label2.Caption:='Компонент 2'
Label2.OnClick:=@Check2OnClick
Label2.OnMouseMove:=@Check2MouseMove
Label2.Parent:=Check2

Label3:=TLabel.Create(Page)
Label3.Left:=16
Label3.Top:=2
Label3.Caption:='Компонент 3'
Label3.OnClick:=@Check3OnClick
Label3.OnMouseMove:=@Check3MouseMove
Label3.Parent:=Check3
end;
Автор: Sero
Дата сообщения: 29.05.2007 19:45
Sampron

Цитата:
Как можно убрать чекбоксы с страницы Завершения?

В секции Files убери флаг isreadme!

P.S. - красиво!
Автор: Sampron
Дата сообщения: 29.05.2007 19:58
Sero
Точно спасибо!
Секцию Files брал из другого кода и не обратил внимание на флаг isreadme.
А второй вопрос незнаешь как решить?
Автор: maxdddca123
Дата сообщения: 29.05.2007 20:33
Genri
Сенкс, а можно мини примерчик как на страницу выбора каталога добавить произвольную кнопку не вниз, где далее и назад, а в саму страницу, например под Обзором ?
Без Create....Page можно реализовать ?
Автор: Sampron
Дата сообщения: 29.05.2007 20:52
Кто-то на какой-то странице хотел чтоб ссылка BeveledLabel меняла цвет при наведении курсора и при нажатии.
Пример [more=здесь][Setup]
AppName=AppName
AppVerName=AppVerName
DefaultDirName={pf}\AppName

[Code]
var
MouseLabel,SiteLabel: TLabel;

procedure SiteLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://forum.ru-board.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;

procedure SiteLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clRed
end;

procedure SiteLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clBlue
end;

procedure SiteLabelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clGreen
end;

procedure SiteLabelMouseMove2(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clBlue
end;

procedure InitializeWizard();
begin
MouseLabel:=TLabel.Create(WizardForm)
MouseLabel.Width:=WizardForm.Width
MouseLabel.Height:=WizardForm.Height
MouseLabel.Autosize:=False
MouseLabel.Transparent:=True
MouseLabel.OnMouseMove:=@SiteLabelMouseMove2
MouseLabel.Parent:=WizardForm

SiteLabel:=TLabel.Create(WizardForm)
SiteLabel.Left:=10
SiteLabel.Top:=330
SiteLabel.Cursor:=crHand
SiteLabel.Font.Color:=clBlue
SiteLabel.Caption:='Forum Ru-Board'
SiteLabel.OnClick:=@SiteLabelOnClick
SiteLabel.OnMouseDown:=@SiteLabelMouseDown
SiteLabel.OnMouseUp:=@SiteLabelMouseUp
SiteLabel.OnMouseMove:=@SiteLabelMouseMove
SiteLabel.Parent:=WizardForm
end;[/more]
Автор: maxdddca123
Дата сообщения: 29.05.2007 21:08
Sampron

Цитата:
Кто-то на какой-то странице хотел чтоб ссылка BeveledLabel меняла цвет при наведении курсора и при нажатии.

Спасибо самым внимательным. Я не хотел, но пригодится !!! Респект !
Автор: iTASmania_Inc
Дата сообщения: 29.05.2007 23:27
Люди, подскажите, пожалуйста, как работает DelTree? В какую procedure или function она вписывается, а то читал help - а там тока формат.
И ещё, как сделать так, чтобы при установки программы, папка, в которую она устанавливается, меняла бы иконку. Эт, наверное, через отдельную иконку и desktop.ini делается, а как задать это в [Code]?
И ещё когда-то спрашивал: есть ли в Inno такая возможность, чтобы при установки копировался файл, потом проходит время заданное в скрипте - копируется другой и т.д и т.п.?

Добавлено:
И ещё
Как запихнуть в инсталлятор скрытые файлы?
Автор: Sero
Дата сообщения: 30.05.2007 00:58
Sampron
Так сделать сможешь?
Автор: ZavadS
Дата сообщения: 30.05.2007 01:20
Genri

Почему-то этот код никак не хочет закрывать запущенную злужбу.

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

Код:
var
res: integer;

function InitializeSetup(): Boolean;
begin
Exec('net', 'stop W32Time', '', SW_HIDE, ewWaitUntilTerminated, res);
Result:= True;
end;

procedure DeinitializeSetup();
begin
Exec('net', 'start W32Time', '', SW_HIDE, ewWaitUntilTerminated, res);
end;


-- это стоп/старт службы Windows Time

Помоги расправиться с этой службой На всякий случай даю информация на конкретную службу.
Имя службы: OO Defrag, Выводимое имя: O&O Defrag, Описание: O&O Defragmentation Service, Исполняемый файл: C:\WINDOWS\system32\oodag.exe

Автор: Genri
Дата сообщения: 30.05.2007 01:28
ZavadS -- в очередной раз проблема длинных имен. возьми имя сервиса в двойные кавычки:
function InitializeSetup(): Boolean;
begin
Exec('net', 'stop "OO Defrag"', '', SW_HIDE, ewWaitUntilTerminated, res);
Result:= True;
end;

procedure DeinitializeSetup();
begin
Exec('net', 'start "OO Defrag"', '', SW_HIDE, ewWaitUntilTerminated, res);
end;
Автор: EagleSH
Дата сообщения: 30.05.2007 01:34
Genri, Sampron
можно както сделать разный размер томов?... насколько я помню в 1с-овском думе, 1-й том в районе 600 мег, 2-й 700, ну и 3-й остальное

к примеру у меня 3 тома, 1-й хочу 300, 2-й 600 ну и всё остальное в 3-й.
Автор: Genri
Дата сообщения: 30.05.2007 01:42
EagleSH -- не приходилось сталкиваться, но думаю можно только для первого тома (см. ReserveBytes)
Автор: ZavadS
Дата сообщения: 30.05.2007 02:36
Genri
Все ровно не закрывает.
Я в личку отправил весь код. Может как-то прикрепы этот код к моему. Но я пробовал без своего, только твой пример - блин он как висел этот сервис так и висить
Автор: GloThin
Дата сообщения: 30.05.2007 05:07
ZavadS

Цитата:
твой пример - блин он как висел этот сервис так и висить



Цитата:
Имя службы: OO Defrag, Выводимое имя: O&O Defrag

Использувать надо не имя службы, а выводимое имя - O&O Defrag:

Код:
function InitializeSetup(): Boolean;
begin
Exec('net', 'stop "O&O Defrag"', '', SW_HIDE, ewWaitUntilTerminated, res);
Result:= True;
end;

procedure DeinitializeSetup();
begin
Exec('net', 'start "O&O Defrag"', '', SW_HIDE, ewWaitUntilTerminated, res);
end;
Автор: ZavadS
Дата сообщения: 30.05.2007 09:00
Спасибо GloThin. Я сейчас на роботе, приду вечером домой попробую.


Автор: Genri
Дата сообщения: 30.05.2007 09:43
GloThin
Цитата:
Использувать надо не имя службы, а выводимое имя
-- ты прав. Строго по хелпу, используется выводимое имя. Но сколько пробовал - работает и так и так. Тем более, что отображаемое имя в локализованных версиях свое, а имя сервиса, насколько я помню русскую систему, то же, что и на английской. Соответственно, при использовании выводимого имени, скрипт неоправданно усложняется.

ZavadS
Цитата:
я пробовал без своего, только твой пример - блин он как висел этот сервис так и висить
-- а можно подробнее, где ты смотришь состояние служб? Вот только что скомпилил в таком виде:
function InitializeSetup(): Boolean;
begin
Exec('net', 'stop "Windows Time"', '', SW_HIDE, ewWaitUntilTerminated, res);
Result:= True;
end;

procedure DeinitializeSetup();
begin
Exec('net', 'start "Windows Time"', '', SW_HIDE, ewWaitUntilTerminated, res);
end;

Открыл список служб, убедился что статус службы "Windows Time" - Started, запустил скомпиленный инсталлятор, не закрывая его переключился на службы, обновил экран (F5), убедился что служба остановлена, продолжил инсталляцию, после окончания работы инсталлятора переключился на службы, опять обновил экран и убедился что служба работает.


Автор: Sampron
Дата сообщения: 30.05.2007 10:34
Sero

Цитата:
Так сделать сможешь?

Изменить размеры и положение компонентов [more=можно]
Код: [Setup]
AppName=AppName
AppVerName=AppVerName
DefaultDirName=C:\AppName

[Files]
Source: 1.exe; DestDir: {app}; Check: Checked1
Source: 2.exe; DestDir: {app}; Check: Checked2
Source: 3.exe; DestDir: {app}; Check: Checked3

[Code]
Var
Page: TWizardPage;
Text1,Text2,Text3,Text4: TNewStaticText;
Panel: TPanel;
ListBox: TListBox;
Check1,Check2,Check3: TCheckBox;
NoChecks,Label1,Label2,Label3: TLabel;

Function Checked1: Boolean;
begin
Result:=Check1.Checked
end;

Function Checked2: Boolean;
begin
Result:=Check2.Checked
end;

Function Checked3: Boolean;
begin
Result:=Check3.Checked
end;

Procedure Check1OnClick (Sender: TObject);
begin
Check1.Checked:=Not(Check1.Checked)
end;

Procedure Check2OnClick (Sender: TObject);
begin
Check2.Checked:=Not(Check2.Checked)
end;

Procedure Check3OnClick (Sender: TObject);
begin
Check3.Checked:=Not(Check3.Checked)
end;

procedure Check1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=True
Text4.Caption:='Описание компонента 1'
end;

procedure Check2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=True
Text4.Caption:='Описание компонента 2'
end;

procedure Check3MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=True
Text4.Caption:='Описание компонента 3'
end;

procedure NoChecksMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=False
Text4.Caption:='Наведите курсор мыши на название компонента, чтобы прочесть его описание.'
end;

Procedure InitializeWizard();
begin
Page:=CreateCustomPage(2, 'Компоненты устанавливаемой программы', 'Выберите компоненты, которые вы хотите установить.')

Text1:=TNewStaticText.Create(Page)
Text1.Left:=0
Text1.Top:=0
Text1.Width:=417
Text1.Height:=28
Text1.AutoSize:=False
Text1.WordWrap:=True
Text1.Caption:='Выберите компоненты программы, которые вы хотите установить. Нажмите на кнопку "Далее" для продолжения.'
Text1.Parent:=Page.Surface

Text2:=TNewStaticText.Create(Page)
Text2.Left:=0
Text2.Top:=63
Text2.Width:=130
Text2.Height:=42
Text2.AutoSize:=False
Text2.WordWrap:=True
Text2.Caption:='Выберите компоненты программы для установки:'
Text2.Parent:=Page.Surface

Panel:=TPanel.Create(Page)
Panel.Left:=135
Panel.Top:=178
Panel.Width:=282
Panel.Height:=52
Panel.BevelInner:=bvLowered
Panel.Parent:=Page.Surface

Text3:=TNewStaticText.Create(Page)
Text3.Left:=140
Text3.Top:=172
Text3.Font.Color:=clBlue
Text3.Caption:='Описание'
Text3.Parent:=Page.Surface

Text4:=TNewStaticText.Create(Page)
Text4.Left:=4
Text4.Top:=8
Text4.Width:=274
Text4.Height:=40
Text4.AutoSize:=False
Text4.WordWrap:=True
Text4.Parent:=Panel

NoChecks:=TLabel.Create(Page)
NoChecks.Width:=WizardForm.Width
NoChecks.Height:=WizardForm.Height
NoChecks.Autosize:=False
NoChecks.Transparent:=True
NoChecks.OnMouseMove:=@NoChecksMouseMove
NoChecks.Parent:=Page.Surface

ListBox:=TListBox.Create(Page)
ListBox.Left:=135
ListBox.Top:=60
ListBox.Width:=282
ListBox.Height:=110
ListBox.Parent:=Page.Surface

Check1:=TCheckBox.Create(Page)
Check1.Left:=2
Check1.Top:=0
Check1.Checked:=True
Check1.Parent:=ListBox

Check2:=TCheckBox.Create(Page)
Check2.Left:=2
Check2.Top:=16
Check2.Checked:=True
Check2.Parent:=ListBox

Check3:=TCheckBox.Create(Page)
Check3.Left:=2
Check3.Top:=32
Check3.Checked:=True
Check3.Parent:=ListBox

Label1:=TLabel.Create(Page)
Label1.Left:=16
Label1.Top:=2
Label1.Caption:='Компонент 1'
Label1.OnClick:=@Check1OnClick
Label1.OnMouseMove:=@Check1MouseMove
Label1.Parent:=Check1

Label2:=TLabel.Create(Page)
Label2.Left:=16
Label2.Top:=2
Label2.Caption:='Компонент 2'
Label2.OnClick:=@Check2OnClick
Label2.OnMouseMove:=@Check2MouseMove
Label2.Parent:=Check2

Label3:=TLabel.Create(Page)
Label3.Left:=16
Label3.Top:=2
Label3.Caption:='Компонент 3'
Label3.OnClick:=@Check3OnClick
Label3.OnMouseMove:=@Check3MouseMove
Label3.Parent:=Check3
end;
Автор: GloThin
Дата сообщения: 30.05.2007 11:03
Sero

03:58 30-05-2007
Цитата:
Sampron
Так сделать сможешь?

Тебе нужна страница выбора компонентов или полный аналог твоего скрина из НСИСа?
А почему не использовать стандартную страницу выбора компонентов Инно?
Автор: ZavadS
Дата сообщения: 30.05.2007 11:09
Genri
добавляю код закрытия службы к своему скрипту, запускаю собранный инсталлятор (предварительно запустив саму программу дефрагментатора), инсталлятор предупреждает что программа работает....нажимаю клавишу 'Далее' , одновременно с программой запущенный диспетчеч задания, вижу что в диспетчере закрывается программа вместе с программкой в трее а служба дефрагментатора остается. Установил половину файлов русификатора, исталлятор останавливается и предупреждает что невозможно заменить файл, который принадлежит к этой службе. Открываю саму службу, пишет что работает, закрываю ее вручную и дальше инсталлятор устанавливает без проблем. Ну и после инсталляции сама служба не запускается, только в ручную.
Но все это я пробовал так же только с твоим кодом.

Автор: Genri
Дата сообщения: 30.05.2007 11:37
ZavadS -- ну так попробуй без инсталлятора из командной строки:
net stop "OO Defrag"
... или как рекомендует GloThin:
net stop "O&O Defrag"
... и посмотри на результат.

А еще лучше сначала поэкспериментировать на службе без зависимостей (напр. тот же Windows Time):
net stop "Windows Time"


Автор: Sero
Дата сообщения: 30.05.2007 11:44

Цитата:
А почему не использовать стандартную страницу выбора компонентов Инно?

Ну... не знаю... так красиве!

Добавлено:
Sampron

Цитата:
а как задействовать TComboBox незнаю.

Я этого хотел спросить!
Автор: ZavadS
Дата сообщения: 30.05.2007 12:30
Genri
Буду пробовать уже только вечером в дома, так как сама программа дефрагментатора на роботе не установлена.
Автор: Genri
Дата сообщения: 30.05.2007 12:46
ZavadS -- я уже попробовал Пришлось поставить O&O Defrag. GloThin оказался полностью прав. Правильный синтаксис: net stop "O&O Defrag".
Правда, почему у тебя не пошел пример с W32Time, для меня загадка.

Автор: iTASmania_Inc
Дата сообщения: 30.05.2007 13:39
Genri
Не мог бы ты мне помочь хотя б с одним из моих вопросов?
Автор: Stratege
Дата сообщения: 30.05.2007 13:51
iTASmania_Inc

Цитата:
И ещё, как сделать так, чтобы при установки программы, папка, в которую она устанавливается, меняла бы иконку. Эт, наверное, через отдельную иконку и desktop.ini делается, а как задать это в Code?
Тебе нужно создать Desktop.ini и него дописать.
[.ShellClassInfo]
IconFile=icon.ico
IconIndex=0
После чего самое главное сам файла надо одарить атрибутами системный и скрытый а потом самое важное саму папку в которой ты создал этой файл нужно сделать системной!!! Иначе работать не будет, по крайней мере в XP он начинает смотреть в файл Desktop.ini только если сама папка системная.

Цитата:
И ещё когда-то спрашивал: есть ли в Inno такая возможность, чтобы при установки копировался файл, потом проходит время заданное в скрипте - копируется другой и т.д и т.п.?
Нет, но ты можешь сделать это ручками через функции BeforeInstall или AfterInstall в секции [Files].

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

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


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