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

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

Автор: Sampron
Дата сообщения: 18.07.2008 23:47
Cryzer

Цитата:
не помогло... :/

Значит у тебя проблема в другом.
Автор: Victor_Dobrov
Дата сообщения: 19.07.2008 03:31
Artem_Butenko, вот как можно сделать распаковку файлов по группам расширений...

[Setup]
AppName=Extraction FileTypes
AppVerName=Extraction of the Files on Types
DefaultDirName={pf}\FileTypes

[Files]
Source: Files\*; DestDir: {app}; Excludes: *.avi; Flags: recursesubdirs
Source: Files\*.avi; DestDir: {app}; Flags: recursesubdirs; BeforeInstall: CopyingFileType('AVI')

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

[CustomMessages]
ExtAVI=Распаковка видео-файлов...

[Code]
Procedure CopyingFileType(Ext: String); Begin
if
(Pos(UpperCase(Ext), '.AVI.MPG.BIK') > 0) and (WizardForm.StatusLabel.Caption <> ExpandConstant('{cm:ExtAVI}')) then WizardForm.StatusLabel.Caption:= ExpandConstant('{cm:ExtAVI}')
End;
Автор: Sig666
Дата сообщения: 19.07.2008 06:59
Снова нуждаюсь в помощи... Возникла необходимость скомпилировать много дистрибутивов. Различаются все они лишь в 2 параметрами, объявленными #define во всем скрипте.

Возможно ли какнить упростить задачу, что бы после каждой компиляции не менять эти параметры вручную? В справке к препроцессору нашел параметр командной строки: /d<name>[=<value>] Sets #define public <name> <value> , но заставить его работать, мне так и не удалось...

upd: все, сам разобрался...
Автор: Kindly
Дата сообщения: 19.07.2008 09:26
All: для библиотеки ISSkin.dll 7 дополнительных скинов -
http://solidfiles.com/d/4b4c
http://www.zerowaitingtime.com/36361-download-7SkinsForISSkin.rar
Автор: Cryzer
Дата сообщения: 19.07.2008 12:33
Genri

Цитата:
-- а у тебя при удалении есть возможность выбора компонентов? И как это реализовано?

Нет, я имею ввиду, что когда при установке выбираю определённые компоненты, то в коде можно использовать функцию IsComponentSelected, с помощью которой при определённой выборке компонентов выполняются мои операции. Я решил воспользоваться этой функцией при удалении: т.е. если при установке был выбран такой-то компонент, то с помощью IsComponentSelected во время удаления будут идти такие-то операции... Решил открыть в help'е "Pascal Scripting: встроенные функции", чуть ниже написано "Информационные функции инсталятора и деинсталятора:", а среди этих функций присутствует IsComponentSelected. И поэтому не могу понять, почему она не вызывается при деинсталяции? Потом, ведь не просто же так все выбранные компоненты при установке пишутся в ключе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyProga_is1 в параметрах "Inno Setup: Selected Components" и "Inno Setup: Deselected Components"...


Цитата:
-- верно. poScreenCenter вызывает пересоздание формы. Добавь после этой строки:
WizardForm.TypesCombo.ItemIndex:= 0;

Спасибо!! Помогло!
Автор: Artem_Butenko
Дата сообщения: 19.07.2008 15:18
Привет всем! Выражаю огромную благодарность за помощь serg_aka_lain и Виктору Доброву. Ребята, как только обзаведусь быстрым интернетом обязательно поделюсь своими творениями для Inno Setup 5!
Автор: elapse
Дата сообщения: 19.07.2008 16:13
Genri

Цитата:
WizardForm.TypesCombo.ItemIndex:= 0;

Не совсем корректное решение. При повторной установке всегда будет выбираться первый тип установки из списка в независимости от того, какой был выбран ранее. Лучше до "перестройки" формы делать так:
var
ItemIndex: Integer;
ItemIndex := WizardForm.TypesCombo.ItemIndex;
После:
WizardForm.TypesCombo.ItemIndex := ItemIndex;
Автор: Genri
Дата сообщения: 19.07.2008 20:53
elapse -- абсолютно согласен
Автор: boss911
Дата сообщения: 19.07.2008 22:37

Код: [Files]
Source: {sys}\PROG.exe; DestDir: {app}\Folder; Flags: external skipifsourcedoesntexist uninsneveruninstall
Автор: Igrock2007
Дата сообщения: 20.07.2008 03:00
Доброго Времени Суток!!!

Подскажите, как сделать чтобы при нажатии на кнопки инсталлятора проигрывался звук - клик. Это реализовано в CoronaSkin, но мне нужен отдельный код. Заранее благодарю за любую помощь!!!
Автор: serg_aka_lain
Дата сообщения: 20.07.2008 12:55
Igrock2007

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


[more]

[Files]
Source: "click.wav"; DestDir: "{tmp}"; Flags: dontcopy nocompression;

[Code]

function sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer;
external 'sndPlaySoundA@winmm.dll stdcall';


function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('click.wav');
Result := True;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
sndPlaySound(ExpandConstant('{tmp}\click.wav'), $0001);
Result := True;
end;

function BackButtonClick(CurPageID: Integer): Boolean;
begin
sndPlaySound(ExpandConstant('{tmp}\click.wav'), $0001);
Result := True;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
sndPlaySound(ExpandConstant('{tmp}\click.wav'), $0001);
end;

[/more]

Автор: Sandy Ann
Дата сообщения: 20.07.2008 13:43
serg_aka_lain
Подскажи пожайлуста назначение строчки
Source: "{sys}\*.dll"; DestDir: "{tmp}"; Flags: external;
в твоем предыдущем скрипте на тему проигрывания мр3 при распаковке файлов.
Автор: serg_aka_lain
Дата сообщения: 20.07.2008 14:20
Sandy Ann

Цитата:
Подскажи пожайлуста назначение строчки


Назначение, просто для тестирования этого примера (воспроизведение музыки).
Если нет файлов в секции Files, то установка закончится, не успев начаться.
В Твоём случае она не нужна.
Автор: boss911
Дата сообщения: 20.07.2008 16:43
Ребята, я все понимаю, выходные, все такое, но вопрос горит!

Смотрел help, нашел:

Цитата:
Support function: GetVersionNumbersString

Образец:

function GetVersionNumbersString(const Filename: String; var Version: String): Boolean;

Описание:

Определяет номер версии указанного файла и возвращает его как строку.

Возможно это то, что мне нужно, но дальше для меня наступает темный лес.
Автор: serg_aka_lain
Дата сообщения: 20.07.2008 17:42
boss911

Функция GetVersionNumbersString определяет версию Windows в таком формате (5.1.2600) , использовать можно так примерно - [more]

function InitializeSetup(): Boolean;
begin
if GetWindowsVersionString = '5.1.2600' then
begin
MsgBox('Windows version:' #13#10 + GetWindowsVersionString + #13#13, MbInformation, Mb_Ok);
Result := True;
end else
MsgBox('Windows version:' #13#10 + GetWindowsVersionString + #13#13 'Not support.', MbInformation, Mb_Ok);
Result := False;
end;

[/more]
Автор: boss911
Дата сообщения: 20.07.2008 18:28
serg_aka_lain

Цитата:
Функция GetVersionNumbersString определяет версию Windows

Дык мне надо, чтобы проверяло версию файла и если версия файла совпадает с заданной (я задал), тогда файл копируется.
Автор: serg_aka_lain
Дата сообщения: 20.07.2008 18:53
boss911

Цитата:
Дык мне надо, чтобы проверяло версию файла


Тогда причём здесь версия винды,?
Это совсем другая функция(GetVersionNumbersString)
Пример проверки версии Explorer.exe [more]


function InitializeSetup(): Boolean;
var
fileversion : string;
begin
if GetVersionNumbersString(ExpandConstant('{win}') + '\explorer.exe', fileversion) then
begin
// if fileversion = '6.0.6001.18000' then {условие}
MsgBox('Version Explorer.exe' #13#10 + ExpandConstant(fileversion) + #13#13, MbInformation, Mb_Ok);
Result := True;
end;
end;

[/more]
Автор: boss911
Дата сообщения: 20.07.2008 20:01
serg_aka_lain

Цитата:
Тогда причём здесь версия винды,?

Я же написал:

Цитата:
Возможно это то, что мне нужно

Откуда мне знать, что это для винды, в описании этого не написано:

Цитата:
Определяет номер версии указанного файла и возвращает его как строку.





Цитата:
Пример проверки версии Explorer.exe Подробнее...

А как мне связать это с этим:

Код: [Files]
Source: {sys}\PROG.exe; DestDir: {app}\Folder; Flags: external skipifsourcedoesntexist uninsneveruninstall (прверка на версию 5.1.2600.хххх)
Автор: serg_aka_lain
Дата сообщения: 20.07.2008 20:13
boss911

К примеру.
Если версия PROG.exe = 5.1.2600.0000 , то файл будет скопирован, если другая, то нет.
Я правильно понял? [more]


[Files]
Source: {sys}\PROG.exe; DestDir: {app}\Folder; Check: GetFileVersion; Flags: external skipifsourcedoesntexist uninsneveruninstall;

[Code]

function GetFileVersion: Boolean;
var
version: string;
begin
GetVersionNumbersString(ExpandConstant('{sys}') + '\prog.exe' , version)
if version = '5.1.2600.0000' then
begin
Result := True;
end
else
Result := False;
end;

[/more]
Автор: elapse
Дата сообщения: 20.07.2008 20:53
boss911, если я правильно понял, то [more=так][no]
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

[Files]
Source: {sys}\Prog.exe; DestDir: {app}\Folder; Check: CheckFileVersion; Flags: external skipifsourcedoesntexist uninsneveruninstall;

[Code]
function CheckFileVersion(): Boolean;
var
Version: String;
begin
if GetVersionNumbersString(ExpandConstant('{sys}\Prog.exe'), Version) and
(Length(Version) = 13) and
(Pos('5.1.2600', Version) = 1) then
Result := True;
end;[/no][/more]. Файл с версией 5.1.2600.78 скопирован НЕ будет, файл с версией 2.5.1.2600 скопирован не будет. Файлы, подходящиещие под маску, например, 5.1.2600.1001, скопируются без проблем.
Автор: boss911
Дата сообщения: 20.07.2008 21:49
serg_aka_lain

Цитата:
Я правильно понял?

Правильно, только вот elapse понял еще правильней:

Цитата:
Файлы, подходящиещие под маску, например, 5.1.2600.1001, скопируются без проблем.

именно оно, то есть последние четыре цифры мне будут не известны. Ребята, с меня виртуальный пивас, респект.




Код: [Files]
Source: C:\MyProg\Folder\*; DestDir: {app}\ResFiles; Flags: recursesubdirs createallsubdirs; Excludes: Folder2\*
Автор: serg_aka_lain
Дата сообщения: 20.07.2008 21:57
boss911

Цитата:
Правильно, только вот elapse понял еще правильней:


- Ну, рад за Тебя.


Добавлено:
boss911

Цитата:
Как исключить компиляцию всей папки Folder2


- Excludes: "\Folder2";
Автор: boss911
Дата сообщения: 20.07.2008 23:13
serg_aka_lain

Цитата:
Excludes: "\Folder2";

Спасибо, что я только уже не перепробовал. Да, только вот с кавычками не работает, убрал.
Автор: bull3t
Дата сообщения: 21.07.2008 09:51
Genri

спасибо большое! пример очень помог!
Автор: nOobCrafter
Дата сообщения: 21.07.2008 12:50
Неа, неполучается( изменяю [more=на]function ShouldSkipPage(PageID: Integer): Boolean;
begin
If (PageID = Page1.ID) and
(Not IsTaskSelected('sec')) then
Result:= True
else Result:= False;
if (PageID = Page2.ID) and Not IsTaskSelected('askini') then
Begin
\\ Result:= true; \\
MsgBox('Желательно сделать резервную копию!' ,mbInformation, mb_Ok); // Тут трабла, изза 2х действий табличка выскакивает 2 раза, хз как отметить, привязка к страницам надо и в тоже время без таска она не имееет смысла((

End;
end[/more]
И результат как раньше, все проходит норм но менюшка выскакивает по 2 раза.( что сделать можно?...
Автор: Cryzer
Дата сообщения: 21.07.2008 15:01
Выходит, IsComponentSelected нельзя использовать при деинсталляции...
Тогда вместо [more=него]procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
String: String;
begin
if CurUninstallStep = usUninstall then
begin
if (IsComponentSelected('main\current_user') = True) then
     begin[/more] придётся использовать что-то наподобие [more=этого]procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
String: String;
begin
if CurUninstallStep = usUninstall then
begin
if (RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Proga_is1', 'Inno Setup: Selected Components', String)) and (Pos(UpperCase('main\current_user'), UpperCase(String)) > 0) then
     begin[/more], но возникает вопрос: ключ "Proga_is1" может быть назван как "Proga_is2", если "Proga_is1" существует. Тоже самое и с "Proga_is2", "Proga_is3" и т.д. Можно ли сделать так, чтобы ключ деинсталляции при установке всегда создавался с одним и тем же именем?

elapse

Цитата:
Не совсем корректное решение. При повторной установке всегда будет выбираться первый тип установки из списка в независимости от того, какой был выбран ранее. Лучше до "перестройки" формы делать так:
var
ItemIndex: Integer;
ItemIndex := WizardForm.TypesCombo.ItemIndex;
После:
WizardForm.TypesCombo.ItemIndex := ItemIndex;

Я попробовал [more=так]var
ItemIndex: Integer;
ItemIndex := WizardForm.TypesCombo.ItemIndex;
procedure InitializeWizard();
begin
...
with WizardForm do begin
Position:=poScreenCenter
WizardForm.TypesCombo.ItemIndex := ItemIndex;
ClientWidth:=700
ClientHeight:=480
... // и т.д.[/more] сделать, но на третьей строчке кода выскакивает ошибка: "Duplicate identifier 'ItemIndex'". Что тут не так?
Автор: altpas
Дата сообщения: 22.07.2008 01:05
уважаемые знатоки) помогите пожалуста советом

имееться скрипт с компонентами , собрал exe'шник . запускаю , со всеми компонентами ставиться отлично . но есле прогу снова устанавливаешь в ту же папку что и первый раз и выбираешь к примеру минимальная установка . или не выбираешь как-нибудь компонент, появляеться окошко

"Программа установки обнаружила, что следующие компоненты уже установлены на Вашем компьютере:

Component1
Component2
...

Отмена выбора этих компонент не удалит их. Продолжить?"

вот код


Код:
AppName=MyProg
AppVerName=MyProg 1.1.0
DefaultDirName={pf}\MyProg
DefaultGroupName=MyProg
LicenseFile=M:\setup\license2.txt
Compression=lzma

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

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

[Types]
Name: full; Description: Полная установка
Name: compact; Description: Минимальная установка (Обновление старой версии)
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: main; Description: MyProg; Types: full compact custom; Flags: fixed
Name: sound; Description: Component1; Types: full
Name: settings; Description: Component2; Types: full
Name: smale; Description: Component3; Types: full
Name: theme; Description: Component4; Types: full

[Files]
Source: M:\setup\MyProg\MyProg.exe; DestDir: {app}; Flags: ignoreversion; Components: main
Source: M:\setup\MyProg\smale\*; DestDir: {app}\EmoPacks; Flags: ignoreversion recursesubdirs createallsubdirs; Components: smale
Source: M:\setup\MyProg\Themes\*; DestDir: {app}\Themes; Flags: ignoreversion recursesubdirs createallsubdirs; Components: theme
Source: M:\setup\MyProg\Settings\russian.ini; DestDir: {app}\Settings; Flags: ignoreversion replacesameversion
Source: M:\setup\MyProg\Settings\settings.ini; DestDir: {app}\Settings; Flags: ignoreversion replacesameversion; Components: settings
Source: M:\setup\MyProg\sound\*; DestDir: {app}\Settings; Flags: ignoreversion replacesameversion; Components: sound

[Icons]
Name: {group}\MyProg; Filename: {app}\MyProg.exe
Name: {group}\{cm:UninstallProgram,MyProg}; Filename: {uninstallexe} IconFilename: {sys}\system32\SHELL32.dll; iconindex: 31
Name: {commondesktop}\MyProg; Filename: {app}\MyProg.exe; Tasks: desktopicon

;занимаемое место компонентами
[Сode]
function GetComponentSpace(): Currency;
var
ComponentSpace: string;
StartLen, EndLen, SpaceLen: integer;
begin
ComponentSpace:= SetupMessage(msgComponentsDiskSpaceMBLabel);
StartLen:= Pos('[', ComponentSpace);
EndLen:= Length(ComponentSpace) - Pos(']', ComponentSpace);
ComponentSpace:= WizardForm.ComponentsDiskSpaceLabel.Caption;
SpaceLen:= Length(ComponentSpace) - StartLen - EndLen + 2;
ComponentSpace:= Copy(ComponentSpace, StartLen, SpaceLen);
end;

[Run]
Filename: {app}\MyProg.exe; Description: {cm:LaunchProgram,ApexDC++}; Flags: postinstall skipifsilent
Автор: SotM
Дата сообщения: 22.07.2008 08:25
altpas

Цитата:
вот кусок кода

И где сам код то?!
Автор: Unc1e
Дата сообщения: 22.07.2008 14:06
Что-то не получается импортировать функции из библиотеки FirewallInstallHelper.dll для добавления приложения в список исключений файрвола (Описание) Помогите, пожалуйста, поправить [more=код]#define MyAppVerName "My Program version"
#define MyAppExeName "MyProg.exe"
#define path "{app}\MyProg.exe"

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

[Files]
Source: "MyProg.exe"; DestDir: "{app}";
Source: "FirewallInstallHelper.dll"; DestDir: {app};

[UninstallDelete]
Type: files; Name: "{app}\FirewallInstallHelper.dll"

[no][code][/no]
function AddApplicationToExceptionListW(path: String; name: String): Boolean;
external 'AddApplicationToExceptionListW@files:FirewallInstallHelper.dll stdcall setuponly';

function RemoveApplicationFromExceptionListW(path: String): Boolean;
external 'RemoveApplicationFromExceptionListW@{app}\FirewallInstallHelper.dll stdcall uninstallonly';

procedure CurStepChanged(CurStep: TSetupStep);
var
path, name: String;
begin

if CurStep = ssPostInstall then
begin
path:=ExpandConstant('{#path}');
name:=ExpandConstant('{#MyAppVerName}');

AddApplicationToExceptionListW(path, name);
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
path: String;
begin
if CurUninstallStep=usUninstall then
begin
path:=ExpandConstant('{#path}');
RemoveApplicationFromExceptionListW(path)
UnloadDll(ExpandConstant('{app}\FirewallInstallHelper.dll'));
end;
end;[/more] Проблема в том, что приложение не появляется в списке исключений.
Автор: altpas
Дата сообщения: 22.07.2008 15:06
подскажите как избавицца от сообщения при установке

"Программа установки обнаружила, что следующие компоненты уже установлены на Вашем компьютере:

компонент1
компонент2
...

Отмена выбора этих компонент не удалит их.%n%nПродолжить?"

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

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


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