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

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

Автор: Genri
Дата сообщения: 16.08.2007 18:17
CrackMe -- по поводу тасков выше уже ответили. А по поводу ассоциаций, я бы предложил сделать чуть иначе. Ниже пример создания ассоциаций расширений ext1, ext2, ext3 с ноутпадом :

Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
ChangesAssociations=yes

[Tasks]
Name: MostVideo; Description: "Most Video Files "; GroupDescription: "Associate Video Files:"
Name: MostVideo\DiracVideo; Description: "Dirac"; GroupDescription: "Associate Video Files:"
Name: MostVideo\AviVideo; Description: "AVI"; GroupDescription: "Associate Video Files:"
Name: MostVideo\MP4Video; Description: "MP4"; GroupDescription: "Associate Video Files:"

[Files]
Source: Files\new.ext1; DestDir: {app}
Source: Files\new.ext2; DestDir: {app}
Source: Files\new.ext3; DestDir: {app}

[Registry]
; .ext1
Root: HKCR; Subkey: ".ext1"; ValueType: string; ValueName: ""; ValueData: "MyProgramFile1"; Flags: uninsdeletevalue; Tasks: MostVideo\DiracVideo
Root: HKCR; Subkey: "MyProgramFile1"; ValueType: string; ValueName: ""; ValueData: "My Program File №1"; Flags: uninsdeletekey; Tasks: MostVideo\DiracVideo
Root: HKCR; Subkey: "MyProgramFile1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{sys}\notepad.exe,0"; Tasks: MostVideo\DiracVideo
Root: HKCR; Subkey: "MyProgramFile1\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{sys}\notepad.exe"" ""%1"""; Tasks: MostVideo\DiracVideo
; .ext2
Root: HKCR; Subkey: ".ext2"; ValueType: string; ValueName: ""; ValueData: "MyProgramFile2"; Flags: uninsdeletevalue; Tasks: MostVideo\AviVideo
Root: HKCR; Subkey: "MyProgramFile2"; ValueType: string; ValueName: ""; ValueData: "My Program File №2"; Flags: uninsdeletekey; Tasks: MostVideo\AviVideo
Root: HKCR; Subkey: "MyProgramFile2\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{sys}\notepad.exe,0"; Tasks: MostVideo\DiracVideo
Root: HKCR; Subkey: "MyProgramFile2\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{sys}\notepad.exe"" ""%1"""; Tasks: MostVideo\AviVideo
; .ext3
Root: HKCR; Subkey: ".ext3"; ValueType: string; ValueName: ""; ValueData: "MyProgramFile3"; Flags: uninsdeletevalue; Tasks: MostVideo\MP4Video
Root: HKCR; Subkey: "MyProgramFile3"; ValueType: string; ValueName: ""; ValueData: "My Program File №3"; Flags: uninsdeletekey; Tasks: MostVideo\MP4Video
Root: HKCR; Subkey: "MyProgramFile3\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{sys}\notepad.exe,0"; Tasks: MostVideo\DiracVideo
Root: HKCR; Subkey: "MyProgramFile3\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{sys}\notepad.exe"" ""%1"""; Tasks: MostVideo\MP4Video
Автор: omals
Дата сообщения: 16.08.2007 18:45
2 Genri
если я не ошибаюсь то для ассоциаций
кажется нужно еще заполнить и HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ext1\OpenWithList
там MRUList имеет большое значение

нужно сначала записать себя
например будет как g
g будет иметь значение notepad.exe
затем перезаписать MRUList
где MRUList=g+MRUList - поставить себя в начало списка

а при деинсталяции все нужно возвращать обратно
Автор: Genri
Дата сообщения: 16.08.2007 19:24
omals -- скажем так: имхо можно, но имхо не нужно

MRU (Most Recently Used) - последние использованные. MRUList - в данном случае, порядок последних использованных программ для открытия файлов с данным расширением (видны при выборе пункта меню "Открыть с помощью...")

Думаю, изменять этот список нет особой необходимости. А вот в чем я с тобой полностью согласен, так это с тем, что при удалении программы очень желательно восстановить предыдущие ассоциации. Только делать это не через MRUList (во-первых, там нет всех данных - иконка, путь; во-вторых, этот список может быть изменен пользователем), а сохраняя старые значения изменяемых ключей из реестра. Но это уже другая история
Автор: 4esnok
Дата сообщения: 16.08.2007 20:49
Люди пожалуйста выложите нормально "Руководство по расширенным возможностям Inno Setup 5 от Kindly Версию 5.1" чтобы можно было скачать!
Автор: CrackMe
Дата сообщения: 16.08.2007 21:24
Kindly
omals
спасибо
Genri
судя по коду , как раз то чего я хотел, спасибо, буду тесить - отпишусь о результатах. А как сбекапить-то, действительно, реестр перед правкой, а потом на место всё вернуть?

Добавлено:
4esnok
http://ifolder.ru/3028227
кто-нить может ткнуть носом в мануалл на изложенное Genri, а то удивляет что не нашёл ?
Автор: Genri
Дата сообщения: 16.08.2007 21:55
CrackMe
Цитата:
кто-нить может ткнуть носом в мануалл
-- http://www.jrsoftware.org/isfaq.php#assoc
Автор: Genri
Дата сообщения: 17.08.2007 00:27

Цитата:
А как сбекапить-то, действительно, реестр перед правкой, а потом на место всё вернуть?
-- зависит от ситуации. Старое значение можно сохранить в реестре или в рег-файле или в ини-файле. [more=Здесь]
Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
ChangesAssociations=yes

[Tasks]
Name: MostVideo; Description: "Most Video Files "; GroupDescription: "Associate Video Files:"
Name: MostVideo\DiracVideo; Description: "Dirac"; GroupDescription: "Associate Video Files:"
Name: MostVideo\AviVideo; Description: "AVI"; GroupDescription: "Associate Video Files:"
Name: MostVideo\MP4Video; Description: "MP4"; GroupDescription: "Associate Video Files:"

[Files]
Source: Files\new.ext1; DestDir: {app}
Source: Files\new.ext2; DestDir: {app}
Source: Files\new.ext3; DestDir: {app}

[Registry]
; .ext1
Root: HKCR; Subkey: ".ext1"; ValueType: string; ValueName: ""; ValueData: "MyProgramFile1"; Flags: uninsdeletevalue; Tasks: MostVideo\DiracVideo; BeforeInstall: BackupData('ext1')
Root: HKCR; Subkey: "MyProgramFile1"; ValueType: string; ValueName: ""; ValueData: "My Program File ¹1"; Flags: uninsdeletekey; Tasks: MostVideo\DiracVideo
Root: HKCR; Subkey: "MyProgramFile1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{sys}\notepad.exe,0"; Tasks: MostVideo\DiracVideo
Root: HKCR; Subkey: "MyProgramFile1\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{sys}\notepad.exe"" ""%1"""; Tasks: MostVideo\DiracVideo
; .ext2
Root: HKCR; Subkey: ".ext2"; ValueType: string; ValueName: ""; ValueData: "MyProgramFile2"; Flags: uninsdeletevalue; Tasks: MostVideo\AviVideo; BeforeInstall: BackupData('ext2')
Root: HKCR; Subkey: "MyProgramFile2"; ValueType: string; ValueName: ""; ValueData: "My Program File ¹2"; Flags: uninsdeletekey; Tasks: MostVideo\AviVideo
Root: HKCR; Subkey: "MyProgramFile2\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{sys}\notepad.exe,0"; Tasks: MostVideo\AviVideo
Root: HKCR; Subkey: "MyProgramFile2\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{sys}\notepad.exe"" ""%1"""; Tasks: MostVideo\AviVideo
; .ext3
Root: HKCR; Subkey: ".ext3"; ValueType: string; ValueName: ""; ValueData: "MyProgramFile3"; Flags: uninsdeletevalue; Tasks: MostVideo\MP4Video; BeforeInstall: BackupData('ext3')
Root: HKCR; Subkey: "MyProgramFile3"; ValueType: string; ValueName: ""; ValueData: "My Program File ¹3"; Flags: uninsdeletekey; Tasks: MostVideo\MP4Video
Root: HKCR; Subkey: "MyProgramFile3\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{sys}\notepad.exe,0"; Tasks: MostVideo\MP4Video
Root: HKCR; Subkey: "MyProgramFile3\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{sys}\notepad.exe"" ""%1"""; Tasks: MostVideo\MP4Video

[Code]
procedure BackupData(FileExt: String);
var
OldValueData: string;
begin
if RegKeyExists(HKCR, '.' + FileExt) then
begin
RegQueryStringValue(HKCR, '.' + FileExt, '', OldValueData);
RegWriteStringValue(HKCR, '.' + FileExt + '(backup)', '', OldValueData);
end;
end;

procedure RestoreData(FileExt: String);
var
OldValueData: string;
begin
if RegKeyExists(HKCR, '.' + FileExt + '(backup)') then
begin
RegQueryStringValue(HKCR, '.' + FileExt + '(backup)', '', OldValueData);
RegWriteStringValue(HKCR, '.' + FileExt, '', OldValueData);
RegDeleteKeyIncludingSubkeys(HKCR, '.' + FileExt + '(backup)');
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
RestoreData('ext1');
RestoreData('ext2');
RestoreData('ext3');
end;
end;
Автор: iTASmania_Inc
Дата сообщения: 17.08.2007 05:21
Victor_Dobrov
В своём скине для пересозданного WizardForm.TypesCombo Вы используете такой способ устранения глюков с выпадающим списком:

WizardForm.TypesCombo.Style := csDropDown

//НО при использовании данного варианта:
// 1) название типа установки в выпадающем списке можно изменить или удалить, что в принципе не очень-то хорошо;
// 2) исчезает название типа установки на странице wpReadyMemo, если
// - было изменено или удалено название типа установки на странице wpSelectComponents;
// - пользователь НИ РАЗУ не щёлкнул по одному из компонентов мышью или НЕ сменил тип установки.

Не лучше ли попробовать:

WizardForm.TypesCombo.ItemIndex := 0

В моей системе эта команда работает правильно, к тому же лишена вышеупомянутых глюков!

Хотя может быть так задумано - и советовать я не могу, а может, и не должен!
Автор: Victor_Dobrov
Дата сообщения: 17.08.2007 05:39

Цитата:
Не лучше ли попробовать: WizardForm.TypesCombo.ItemIndex:= 0

Я так делал, но тогда теряется выбор компонентов ПРЕДЫДУЩЕЙ установки.

[more=Скрипт шифрования файлов]
;Скрипт шифрования файлов, НЕ сохраняющий исходный пароль (в чистом виде или MD5-hash) в инсталлятор.
;Пароль инвертируется и в таком виде принимаются компилятором. Например '0123456789' запишется как '9876543210'

[Setup]
AppName=Password
AppVerName=Encryption Password
CreateAppDir=false
Encryption=true
Password=202cb962ac59075b964b07152d234b70
;на странице пароля ввести: 123

#define EncryptPass
#define i Len(SetupSetting("Password"))
#for {i; i > 0; i--} EncryptPass = EncryptPass + Copy(SetupSetting("Password"), i, 1)
;(можно запутать ещё и так: '0123456789' > '4321098765') #define EncryptPass Copy(EncryptPass, Len(EncryptPass)/2+1, Len(EncryptPass) -Len(EncryptPass)/2) + Copy(EncryptPass, 1, Len(EncryptPass)/2)

[Files]
Source: Files\*; DestDir: {pf}\Corona Skin; Flags: recursesubdirs

[Code]
var PasswordText: TPanel;

Function DecryptPass(Password: String): String;
    var n: Integer;
Begin
    for n:= Length(Password) Downto 1 do Result:= Result + Copy(Password, n, 1)
End;

Function CheckPassword(Password: String): Boolean;
Begin
    Result:= (GetMD5OfString(Password) = DecryptPass('{#EncryptPass}'))
    if not Result then exit;
        PasswordText.Caption:= WizardForm.PasswordEdit.Text
        WizardForm.PasswordEdit.Text:= DecryptPass('{#EncryptPass}')
        PasswordText.Show
End;

Procedure PasswordEditOnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
Begin
    WizardForm.Nextbutton.Enabled:= CheckPassword(WizardForm.PasswordEdit.Text)
End;

Procedure CurPageChanged(CurPageID: Integer);
Begin
    if CurPageID = wpPassword then if PasswordText.Caption = '' then WizardForm.Nextbutton.Enabled:= CheckPassword(WizardForm.PasswordEdit.Text)
End;

Procedure InitializeWizard;
Begin
    WizardForm.PasswordEdit.OnKeyUp:= @PasswordEditOnKeyUp
PasswordText:=TPanel.Create(WizardForm)
    PasswordText.SetBounds(WizardForm.PasswordEdit.Left, WizardForm.PasswordEdit.Top, WizardForm.PasswordEdit.Width, WizardForm.PasswordEdit.Height)
    PasswordText.Font.Style:= [fsBold]
    PasswordText.Alignment:=taLeftJustify
    PasswordText.BevelOuter:= bvNone
    PasswordText.BorderStyle:= bsSingle
    PasswordText.Parent:= WizardForm.PasswordPage
PasswordText.Hide
End;
[/more], НЕ сохраняющий исходный пароль (в чистом виде или MD5-hash) в инсталлятор.
Пароль инвертируется и в таком виде принимаются компилятором. Например '0123456789' запишется как '9876543210'. Далее в скрипте при проверке выполняется обратное преобразование...
Автор: iTASmania_Inc
Дата сообщения: 17.08.2007 06:52

Цитата:
Я так делал, но тогда теряется выбор компонентов ПРЕДЫДУЩЕЙ установки.

Выбор компонентов как раз не теряется, теряется тип установки, и он всегда будет
WizardForm.TypesCombo.ItemIndex := 0
Но ведь инсталлятор читает информацию об установленном приложении из реестра, почему же нельзя тогда проиндексировать типы установки и сделать проверку - и, соответственно, уже присваивать ItemIndex подходящее значение?
Нет, конечно, может и накладно, но просто csDropDown-формата комбо-бокс меня несколько бесит...
Но опять же, всё дело вкуса.
Автор: Genri
Дата сообщения: 17.08.2007 09:10
Удалено.
Автор: Victor_Dobrov
Дата сообщения: 17.08.2007 09:13
Зачем реестр, всё проще.
Исправления в Corona_kernel.iss, начиная со строки:
    { wpSelectComponents}
{new}    WizardForm.TypesCombo.Tag:= WizardForm.TypesCombo.ItemIndex {запоминаем индекс}
... установка параметров для WizardForm.TypesCombo
{убрать}    WizardForm.TypesCombo.Style:= csDropDown
{new}    WizardForm.TypesCombo.ItemIndex:= WizardForm.TypesCombo.Tag

P.S. в примере шифрования на пред. странице разобрался сам (и исправил код)
Автор: omals
Дата сообщения: 17.08.2007 14:22
имеется
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usUninstall then
begin
    if MsgBox('Сделаем шото или нет?', mbInformation, mb_YesNo) = idYes then
    begin
        // тут мой код - с ним проблем нет
    end
    else begin
        // А вот сюда нужно вписать код чтобы прервать анинсталл
        // тоесть типа нажал Cancel - анисталл не состоялся - все осталось без изменений
    end;
end;
end;

есть идеи как такое реализовать?
Автор: 4esnok
Дата сообщения: 17.08.2007 14:28
CrackMe Genri Всё скачал спасиб
Автор: SpoinT
Дата сообщения: 17.08.2007 14:58
omals
Там и так откат идет во время инсталляции. Если прерываешь её, то все что накопировалось - удаляется
Автор: Victor_Dobrov
Дата сообщения: 17.08.2007 15:06
Corona Skin - перезалил. Устранены ошибки и переписаны функции проверки серийника/пароля.
Автор: omals
Дата сообщения: 17.08.2007 15:25
SpoinT
может я неверно написал
я знаю, что если нажал Cancel то будет откат
мне же надо смоделировать нажатие Cancel
если в MsgBox('Сделаем шото или нет?', mbInformation, mb_YesNo) нажимаю No
то типа я нажал Cancel в анинстале и должен пойти откат
Автор: Genri
Дата сообщения: 17.08.2007 15:42
omals -- Abort;
Автор: omals
Дата сообщения: 17.08.2007 15:57
Genri
спасибо
сам посмеялся с удовольствием
мозги явно уже не варят у мня
Автор: OOD
Дата сообщения: 17.08.2007 16:11
Подскажите видел программы , созданные в какой то программе для создания установочных пакетов , они делают один exe файл и после его запуска программа устанавливается на определенный каталог указанный в установочном пакете всё ставиться само без вмешательства в реест тоже само добавляется...

Вот не знаю что за программа не Inno Setup точно

Автор: CrackMe
Дата сообщения: 17.08.2007 19:58
OOD
таких много, и иноо в их числе
Автор: OOD
Дата сообщения: 17.08.2007 23:41
CrackMeПодскажите пожалуйста как с помощью Inno сделать быстрый инстал чего либо чтобы не приходилось указывать путь и т.д?
Автор: BruteForce
Дата сообщения: 18.08.2007 09:36
Где взять

get_hw_caps.dll

Для проверки сис. требований.
Спасибо.
Автор: 4esnok
Дата сообщения: 18.08.2007 11:34
Подскажите как сделать, чтоб например при нажатии на кнопку (в мойм случае "тест системы") в инстале давало сведения о Винде, видюхе, звуковой карте и тд...? Подскажите плз...
Автор: NightW0lf
Дата сообщения: 18.08.2007 14:23
BruteForce

Цитата:
Где взять

get_hw_caps.dll

Для проверки сис. требований.
Спасибо.

Вот ссылка для скачаивания.
Автор: Victor_Dobrov
Дата сообщения: 18.08.2007 15:55
4esnok, вот здесь скрипт вывода сведений о системе.
Автор: Volodumur
Дата сообщения: 18.08.2007 20:52
як зробити так щоб відбувалась заміна установлених файлів???



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

[Setup]
AppName=CommFort 3.00 Smiles
AppVerName=CommFort 3.00 Smiles
AppPublisher=Created by ***VOVA***
AppPublisherURL=http://www.superstroyka.hyperphp.com/index.html
AppSupportURL=http://www.superstroyka.hyperphp.com/index.html
AppUpdatesURL=http://www.superstroyka.hyperphp.com/index.html
DefaultDirName={pf}\CommFort\Smilies
DefaultGroupName=CommFort 3.00 Smiles
DisableProgramGroupPage=yes
OutputDir=C:\Documents and Settings\VOVA\Ìîè äîêóìåíòû\Smiles\Install
OutputBaseFilename=setup
SetupIconFile=C:\Documents and Settings\VOVA\Ìîè äîêóìåíòû\Smiles\Install\56.ico
Compression=lzma
SolidCompression=yes

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

[Files]
Source: "C:\Program Files\CommFort\Smilies\2.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\5.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\7.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\10.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\12.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\15.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\24.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\34.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\38.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\43.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\47.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\54.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\56.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\59.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\61.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\65.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\67.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\68.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\72.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\75.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\78.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\87.gif"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\CommFort\Smilies\Smilies.txt"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{cm:ProgramOnTheWeb,CommFort 3.00 Smiles}"; Filename: "http://www.superstroyka.hyperphp.com/index.html"
Автор: Genri
Дата сообщения: 18.08.2007 21:05
Volodumur -- а что такое "відбувалась" ?
Автор: SpiderXXX
Дата сообщения: 18.08.2007 21:41

Цитата:
а что такое "відбувалась" ?

Происходила
Автор: CrackMe
Дата сообщения: 18.08.2007 21:54
OOD
Через коммандную строку консольный параметр /VERYSILENT
или не то?

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

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


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