Войти

Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]


Страниц : 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Serega
13-09-2009, 13:05
сделать текст белым цветом »
Если в стандартном инсталляторе, т.е. не создавая новые контролы, то

WizardForm.Font.Color:= clWhite;
WizardForm.PageNameLabel.Font.Color:= clWhite;
WizardForm.WelcomeLabel1.Font.Color:= clWhite;

если же создаёте контролы, то у каждого текстового есть в свойствах значение Font.Color, соответственно задаёте значение clWhite
отображение картинок на всех страницах инсталятора »
Поищите в предыдущей теме, что-то похожее уже было.

A1EXXX
13-09-2009, 14:32
Новая версия скриптов для распаковки архивов FreeArc: FreeArc4InnoSetup3_3.zip (http://freearc.googlecode.com/files/FreeArc4InnoSetup3_3.zip)

Версия 3.3 ext от Victor_Dobrov, 13-09-2009
- arc.ini ищется в c:\
- купирована ошибка индикатора прогресса при использовании внешних распаковщиков
- пофиксена потеря количества извлечённых/распакованных файлов

Версия 3.3 от Bulat Ziganshin, 13-09-2009
- ускорение распаковки на 10%
- FreeArcExtract() поддерживает опцию '-wPATH' для задания каталога для временных файлов
- при прерывании распаковки стирает временные файлы
- исправлена ошибка в unarc.dll - вылетала при распаковке с использованием временных файлов

кто уже скачал, перекачайте, т.к. Bulat Ziganshin немного исправил скрипты (скорость распакови была увеличена, но при этом были небольшие паузы в процессе распаковки)

Serega
13-09-2009, 17:45
Наверное каждый при сборке инсталлятора сталкивался с тем, что не хватает стандартных констант в Inno Setup.
Допустим нужно установить какой-нибудь файл, в папку "Мои рисунки", а константы такой нет...
Ниже приведённый скрипт облегчит определение стандартных папок Windows:

; Данный скрипт позволяет получить путь к стандартным папкам Windows

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
const
MAX_PATH = 260;
// ниже приведён список id папок, путь которой хотим получить...
// Виртуальный каталог, представляющий Рабочий стол. (Корень в проводнике)
CSIDL_DESKTOP = $0000;
// Виртуальный каталог для Internet Explorer.
CSIDL_INTERNET = $0001;
// Меню Пуск -> Программы
CSIDL_PROGRAMS = $0002;
// Виртуальный каталог, содержащий иконки пунктов панели управления
CSIDL_CONTROLS = $0003;
// Виртуальный каталог, содержащий установленные принтеры
CSIDL_PRINTERS = $0004;
// Виртуальный каталог, представляющий папку "Мои документы"
CSIDL_PERSONAL = $0005;
// До Vista ссылался на какталог "Мои документы" на жёстком диске
// Избранное. (обычно C:\Documents and Settings\username\Favorites)
CSIDL_FAVORITES = $0006;
// Пуск -> Программы -> Автозагрузка
CSIDL_STARTUP = $0007;
// Недавние документы (обычно C:\Documents and Settings\username\My Recent Documents
CSIDL_RECENT = $0008;
// Папка, содержащая ярлыки меню "Отправить" (Sent to...) (обычно C:\Documents and Settings\username\SendTo)
CSIDL_SENDTO = $0009;
// Виртуальный каталог, содержащий файлы в корзине текущего пользователя
CSIDL_BITBUCKET = $000a;
// Элементы меню Пуск текущего пользователя (обычно C:\Documents and Settings\username\Start Menu)
CSIDL_STARTMENU = $000b;
// Рабочий стол текущего пользователя (обычно C:\Documents and Settings\username\Desktop)
CSIDL_DESKTOPDIRECTORY = $0010;
// Виртуальный каталог, представляющий папку "Мой компьютер"
CSIDL_DRIVES = $0011;
// Виртуальный каталог, представляющий "Сетевое окружение"
CSIDL_NETWORK = $0012;
// Папка "My Nethood Places" (обычно C:\Documents and Settings\username\NetHood)
// В неё ссылки на избранные расшаренные ресурсы
CSIDL_NETHOOD = $0013;
// Папка, содержащая установленные шрифты. (обычно C:\Windows\Fonts)
CSIDL_FONTS = $0014;
// Шаблоны документов. (Обычно Settings\username\Templates)
CSIDL_TEMPLATES = $0015;
// Элементы меню Пуск для всех пользователей. (обычно C:\Documents and Settings\All Users\Start Menu)
// Константы, начинающиеся на CSIDL_COMMON_ существуют только в NT версиях
CSIDL_COMMON_STARTMENU = $0016;
// Меню Пуск -> программы для всех пользователей (обычно C:\Documents and Settings\All Users\Start Menu\Programs)
CSIDL_COMMON_PROGRAMS = $0017;
// Меню Пуск -> Программы -> Автозагрузка для всех пользователей (обычно C:\Documents and Settings\All Users\Start Menu\Programs\Startup)
CSIDL_COMMON_STARTUP = $0018;
// Элементы Рабочего стола для всех пользователей (обычно C:\Documents and Settings\All Users\Desktop)
CSIDL_COMMON_DESKTOPDIRECTORY = $0019;
// Папка, в которой рограммы должны хранить свои данные(C:\Documents and Settings\username\Application Data)
CSIDL_APPDATA = $001a;
// Установленные принтеры. (обычно C:\Documents and Settings\username\PrintHood)
CSIDL_PRINTHOOD = $001b;
// user's nonlocalized Startup program group. Устарело.
CSIDL_ALTSTARTUP = $001d; // DBCS
// Устарело
CSIDL_COMMON_ALTSTARTUP = $001e; // DBCS
// Ссылки "Избранное" для всех пользователей
CSIDL_COMMON_FAVORITES = $001f;
// Временные Internet файлы (обычно C:\Documents and Settings\username\Local Settings\Temporary Internet Files)
CSIDL_INTERNET_CACHE = $0020;
// Папка для хранения Cookies (обычно C:\Documents and Settings\username\Cookies)
CSIDL_COOKIES = $0021;
// Хранит ссылки интернет истории IE
CSIDL_HISTORY = $0022;
// Административные инструменты текущего пользователя (например консоль MMC). Win2000+
CSIDL_ADMINTOOLS = $30;
// Папка для файлов, подготовленных к записи на CD/DVD
// (Обычно C:\Documents and Settings\username\Local Settings\Application Data\Microsoft\CD Burning)
CSIDL_CDBURN_AREA = $3b;
// Папка, содержащая инструменты администрирования
CSIDL_COMMON_ADMINTOOLS = $2f;
// Папака AppData для всех пользователей. (обычно C:\Documents and Settings\All Users\Application Data)
CSIDL_COMMON_APPDATA = $23;
// Папка "Общие документы" (обычно C:\Documents and Settings\All Users\Documents)
CSIDL_COMMON_DOCUMENTS = $2e;
// Папка шаблонов документов для всех пользователей (Обычно C:\Documents and Settings\All Users\Templates)
CSIDL_COMMON_TEMPLATES = $2d;
// Папка "Моя музыка" для всех пользователей. (обычно C:\Documents and Settings\All Users\Documents\My Music)
CSIDL_COMMON_MUSIC = $35;
// Папка "Мои рисунки" для всех пользователей. (обычно C:\Documents and Settings\All Users\Documents\My Pictures)
CSIDL_COMMON_PICTURES = $36;
// Папка "Моё видео" для всех пользователей (C:\Documents and Settings\All Users\Documents\My Videos)
CSIDL_COMMON_VIDEO = $37;
// Виртуальная папка, представляет список компьютеров в вашей рабочей группе
CSIDL_COMPUTERSNEARME = $3d;
// Виртуальная папка, представляет список сетевых подключений
CSIDL_CONNECTIONS = $31;
// AppData для приложений, которые не переносятся на другой компьютер (обычно C:\Documents and Settings\username\Local Settings\Application Data)
CSIDL_LOCAL_APPDATA = $1c;
// Виртуальный каталог, представляющий папку "Мои документы"
CSIDL_MYDOCUMENTS = $0c;
// Папка "Моя музыка"
CSIDL_MYMUSIC = $0d;
// Папка "Мои рисунки"
CSIDL_MYPICTURES = $27;
// Папка "Моё видео"
CSIDL_MYVIDEO = $0e;
// Папка пользователя (обычно C:\Documents and Settings\username)
CSIDL_PROFILE = $28;
// Папка Program Files (обычно C:\Program Files)
CSIDL_PROGRAM_FILES = $26;
CSIDL_PROGRAM_FILESX86 = $2a;
// Папка Program Files\Common (обычно C:\Program Files\Common)
CSIDL_PROGRAM_FILES_COMMON = $2b;
CSIDL_PROGRAM_FILES_COMMONX86 = $2c;
// Папка для ресерсов. Vista и выше (обычно C:\Windows\Resources)
CSIDL_RESOURCES = $38;
CSIDL_RESOURCES_LOCALIZED = $39;
// Папака System (обычно C:\Windows\System32 или C:\Windows\System)
CSIDL_SYSTEM = $25;
CSIDL_SYSTEMX86 = $29;
// Папка Windows. Она же %windir% или %SYSTEMROOT% (обычно C:\Windows)
CSIDL_WINDOWS = $24;

function SHGetSpecialFolderPath(hwndOwner: HWND; lpszPath: PChar; nFolder: Integer; fCreate: BOOL): BOOL;
external 'SHGetSpecialFolderPathA@shell32.dll stdcall';

function GetSpecialPath(CSIDL: Word): string;
var
s: string;
begin
SetLength(s, MAX_PATH);
if not SHGetSpecialFolderPath(0, PChar(s), CSIDL, True) then s := '';
Result:= PChar(s);
end;

procedure InitializeWizard;
begin
// определим расположение папки "Мои рисунки"
MsgBox(GetSpecialPath(CSIDL_MYPICTURES), mbInformation, MB_OK);
end;

msatmb
13-09-2009, 21:10
A1EXXX, код на работоспособность не проверялся, но должно быть примерно так: »
Делаю как ты написал

procedure CurStepChanged(CurStep: TSetupStep);
var
res: Integer;
begin
if CurStep = ssInstall then begin
StartInstall:= GetTickCount {время начала извлечения файлов}
WndHookID:= SetWindowsHookEx(WH_CALLWNDPROC, WrapCWPSTRUCTProc(@OnWndHook, 3), 0, GetCurrentThreadID); {установка SendMessage хука}
TimerID:= SetTimer(0, 0, 500 {полсекунды}, WrapTimerProc(@MyTimerProc, 4)); {установка таймера}
if not {#isFalse(SetupSetting("Uninstallable"))} then Status.count:= -1; // не считать файл unins000.exe
end;
if CurStep = ssPostInstall then
begin
StartInstall:= GetTickCount {время начала распаковки}
UnPackError:= UnPack('{#Archives}')
if UnPackError <> 0 then begin // Error occured, uninstall it then
if not {#isFalse(SetupSetting("Uninstallable"))} then // деинсталляция разрешёна
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); // откат установки из-за ошибки unarc.dll
WizardForm.caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
SetTaskBarTitle(SetupMessage(msgErrorTitle))
end else
SetTaskBarTitle(SetupMessage(msgSetupAppTitle));
ProcessLabel.show
Exec(ExpandConstant('{app}\run.bat'), '', '', SW_SHOW, ewWaitUntilTerminated, res);
DeleteFile(ExpandConstant('{app}\run.bat'));
end;
end;

по завершению работы инсталлятора получаю ошибку

2009-09-13 11:54:29.562 CurStepChanged raised an exception.
2009-09-13 11:54:29.562 Exception message:
2009-09-13 11:54:29.562 Message box (OK):
Runtime Error (at 157:2795):

Access violation at address 0049F883 in module 'setup.tmp'. Read of address 00000000.
2009-09-13 12:05:20.296 User chose OK.
2009-09-13 12:05:20.296 Need to restart Windows? No
2009-09-13 12:05:20.375 Exception message:
2009-09-13 12:05:20.375 Message box (OK):
Out Of Range.
2009-09-13 12:05:21.265 User chose OK.
2009-09-13 12:05:22.296 Deinitializing Setup.
2009-09-13 12:05:22.328 Log closed.

В чем может быть проблема?

- FreeArcExtract() поддерживает опцию '-wPATH' для задания каталога для временных файлов »
И как это прописать? :)

Berline
14-09-2009, 09:41
Вопрос может уже звучал: как добавить на страницу выбора компонентов »
Пример »
СПС большое, за одним исключением - учитывали вы это ил инет - идеально работает если компоненты не имеют вид дерева(т.е. вложенных компонентов), в такои случае, они игнорируются - не выделяются, и если руками выбрать - не снимаются...

DemonAk
14-09-2009, 17:59
[Files]
#ifdef precomp
Source: {#precomp}; DestDir: {sys}; Flags: deleteafterinstall
Source: {#GetEnv("ProgramFiles")}\FreeArc\bin\arc.ini; DestDir: C:\; Flags: deleteafterinstall
#endif

Как сделать что бы как только запустил исталятор, файлы которые указаны в files копировались в назначенный каталог.
Эта процедура копирует их в темп, а надо sys и C:\:

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('precomp04.exe');
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('arc.ini');
end;

pa60t9ra
14-09-2009, 18:21
Я по поводу выбора компонентов.
Вот тот самый код:



[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: a; Description: Моя программа™; Types: full custom
Name: a\a; Description: Руководство пользователя; Types: full
Name: a\a\a; Description: Русский; Flags: exclusive
Name: a\a\b; Description: English; Flags: exclusive
Name: a\b; Description: Справка; Types: full

[Files]
Source: Examples\MyProg.exe; DestDir: {app}; Components: a
Source: Examples\Readme-ru.txt; DestDir: {app}; Components: a\a\a
Source: Examples\Readme-en.txt; DestDir: {app}; Components: a\a\b
Source: Examples\MyProg.chm; DestDir: {app}; Components: a\b

[Code]
var
btn1, btn2: TButton;

procedure btnClick(Sender: TObject);
var
i: Integer;
begin
// не знаю почему, но при WizardForm.SelectComponentsPage.ControlCount-1 выскакивает сообщение:
// 'List index out of bounds.'
for i:= 0 to WizardForm.SelectComponentsPage.ControlCount-2 do
case TButton(Sender) of
btn1: WizardForm.ComponentsList.Checked[i]:= True;
btn2: WizardForm.ComponentsList.Checked[i]:= False;
end;
end;

procedure InitializeWizard();
begin
btn1:= TButton.Create(WizardForm);
with btn1 do
begin
SetBounds(260,210,75,25);
Caption:= 'Выбрать все';
OnClick:= @btnClick;
Parent:= WizardForm.SelectComponentsPage;
end;

btn2:= TButton.Create(WizardForm);
with btn2 do
begin
SetBounds(340,210,75,25);
Caption:= 'Снять выбор';
OnClick:= @btnClick;
Parent:= WizardForm.SelectComponentsPage;
end;
end;

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

A1EXXX
14-09-2009, 18:34
Решил поменять шрифт инсталлятора:

procedure InitializeWizard();
begin
WizardForm.Font.Name:='Tahoma'
end;

но мне нужно сделать так, чтобы шрифт менялся на всех страницах, кроме страниц инфы перед установкой и лицензионного соглашения!

A1EXXX
14-09-2009, 22:26
:( :( :help: :help:

Serega
15-09-2009, 01:07
за одним исключением - учитывали вы это ил инет - идеально работает если компоненты не имеют вид дерева »
меняйте значение в этой строке:

for i:= 0 to WizardForm.SelectComponentsPage.ControlCount-2 do

т.е. измените 2 на 1, если не поможет, то убирите эту цифру... одним словом поиграйте с этим значением.

файлы которые указаны в files копировались в назначенный каталог. »
самое простое, это измените так:

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('precomp04.exe');
FileCopy(ExpandConstant('{tmp}\precomp04.exe'), ExpandConstant('{sd}\precomp04.exe'), False);
ExtractTemporaryFile('packjpg_dll.dll');
FileCopy(ExpandConstant('{tmp}\packjpg_dll.dll'), ExpandConstant('{sd}\packjpg_dll.dll'), False);
ExtractTemporaryFile('arc.ini');
FileCopy(ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{sd}\arc.ini'), False);
end;

и добавьте:

procedure DeInitializeSetup();
begin
DelayDeleteFile(ExpandConstant('{sd}\precomp04.exe'), 4);
DelayDeleteFile(ExpandConstant('{sd}\packjpg_dll.dll'), 4);
DelayDeleteFile(ExpandConstant('{sd}\arc.ini'), 4);
end;


чтобы выделился и анлийский и руссикй язык? »
В секции [Components] убирите флаги: Flags: exclusive

Решил поменять шрифт инсталлятора: »
посмотрите в Справке про секцию [LangOptions]
кроме страниц инфы перед установкой и лицензионного соглашения! »
попробуйте так:

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpInfoBefore then WizardForm.Font.Name:= 'Verdana';
if CurPageID = wpLicense then WizardForm.Font.Name:= 'Verdana';
end;

A1EXXX
15-09-2009, 08:25
попробуйте так:
Код:
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpInfoBefore then WizardForm.Font.Name:= 'Verdana';
if CurPageID = wpLicense then WizardForm.Font.Name:= 'Verdana';
end; »
Почти то, но мне надо поставить не другой шрифт, о ставить стандартный (т.к. почему-то шрифт меняется и в rtf документе)...
Может есть какое-то обозначение для стандартного шрифта, чтоб поставить его вместо Vеrdana???

Или задать процедуру игнорирования смены шрифта на указанных страницах???

Berline
15-09-2009, 14:31
В общем, проблемы пока с кнопками выделить все отменить все...
Смысл следующий - галочки ставятся - замечательно - но! размер не перессчитывается(если руками галочки проставить - все ок), и если галочки проставлены кнопкой - компоненты не устанавливаются - если руками - все ок!

pa60t9ra
15-09-2009, 15:10
И вдовесок
http://pic.ipicture.ru/uploads/090915/pXIVjEvVUu.jpg
Не совсем корректно отображается...

BlackSelf
15-09-2009, 19:58
Снова здравствуйте. Возможно сделать обводку текста? То есть создается лэйбл с белым шрифтом и сделать вокруг этого лэйбла обводку, например, в 1 пиксель черного цвета.

msatmb
15-09-2009, 21:22
BlackSelf,
Попробуй так

procedure InitializeWizard();
var
Panel1: TPanel;
begin
Panel1 := TPanel.Create(WizardForm);
with Panel1 do
begin
Panel1.Parent := WizardForm;
Panel1.Left := ScaleX(1);
Panel1.Top := ScaleY(315);
Panel1.Width := ScaleX(165);
Panel1.Height := ScaleY(46);
Panel1.TabOrder := 0;
Panel1.Color := clWhite;
Panel1.BevelInner := bvLowered;
Panel1.BevelOuter := bvRaised;
Panel1.BorderStyle := bsSingle;
end;
end;

Или ты имел ввиду по контору букв? Если про буквы то незнаю, я только учусь :)

И посмотри пожалуйста мое сообщение (http://forum.oszone.net/post-1218155-104.html)

BlackSelf
15-09-2009, 21:24
msatmb, по контуру букв (изначально неправильно выразился).

Serega
15-09-2009, 23:35
A1EXXX, попробуйте:

procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.Font.Name:= 'Tahoma';
if CurPageID = wpInfoBefore then WizardForm.Font.Name:= 'Microsoft Sans Serif';
if CurPageID = wpLicense then WizardForm.Font.Name:= 'Microsoft Sans Serif';
end;


Смысл следующий - галочки ставятся - замечательно - но! размер не перессчитывается »
пока не знаю, намдо подумать.
и если галочки проставлены кнопкой - компоненты не устанавливаются »
у меня всё нормально устанавливается...

Не совсем корректно отображается... »
Пример скрипта, это всего лишь - пример того, что можно сделать.
Вам никто не мешает двигать кнопки.

Возможно сделать обводку текста? То есть создается лэйбл с белым шрифтом и сделать вокруг этого лэйбла обводку, например, в 1 пиксель черного цвета. »
Теоретически возможно, с помощью API'шных функций, но ниразу не делал...

A1EXXX
16-09-2009, 00:09
A1EXXX, попробуйте:
Код:
procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.Font.Name:= 'Tahoma';
if CurPageID = wpInfoBefore then WizardForm.Font.Name:= 'Microsoft Sans Serif';
if CurPageID = wpLicense then WizardForm.Font.Name:= 'Microsoft Sans Serif';
end; »
Всё равно не то.... блин... я уже не знаю... а можно с помощью подобного кода, сменить шрифт не на всей странице, а только в документе, который будет отображаться???

Serega, спасибо за помощь!!! Придумал способ решения своей проблемы!!! (твой код меня вдохновил :) ) Сделаю так:

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpWelcome then WizardForm.Font.Name:= 'Tahoma';
if CurPageID = wpSelectDir then WizardForm.Font.Name:= 'Tahoma';
end;

для всех страниц, кроме wpLicense и wpInfoBefore, тогда всё будет как я хотел!!!

Denkxx
16-09-2009, 14:09
Привет. Такая задача. Нужно что бы когда создавался ярлык к нему дописывался параметр запуска. К примеру: в ярлыке в строке объект "C:\Crystal.exe" нужно дописывать movie.avi
тогда при запуске сразу начинается проигрывание файла movie.avi, находящегося в папке с программой.
Кто подскажет как дописывать параметр при создании ярлыка? Поиск не помог (

A1EXXX
16-09-2009, 15:37
Привет. Такая задача. Нужно что бы когда создавался ярлык к нему дописывался параметр запуска. К примеру: в ярлыке в строке объект "C:\Crystal.exe" нужно дописывать movie.avi
тогда при запуске сразу начинается проигрывание файла movie.avi, находящегося в папке с программой.
Кто подскажет как дописывать параметр при создании ярлыка? Поиск не помог ( »
Можешь написать бантик с именами файлов, которые необходимо открыть, и затем создавать ярлык для него...




© OSzone.net 2001-2012