PDA

Показать полную графическую версию : [архив] Скрипты 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

A1EXXX
19-10-2009, 15:23
Odebay, вопросу по FreeArc'у задавай в соответствующей теме... :off:
Krekerpro, можно задать прозрачность для bmp, для этого нужно сделать заливку фона розовым, с параметрами -
красный: 255, зелёный: 0, синий: 255; вот скрин из Paint'а (http://radikal.ru/F/s55.radikal.ru/i147/0909/1c/821ad508e368.jpg.html)

Krekerpro
19-10-2009, 15:37
A1EXXX,
Не,bmp не подходит,надо для .gif

Berline
19-10-2009, 15:39
Так сказать подниму на обсуждение общественности давнюю проблему:
Благодаря Serega, было реализовано и поправлено все, что я просил и не знал, но 1н вопрос, так и остался не решенным даже им.
Может кто-то подскажет, может кто-то знает.
В аттаче скрипт, в котором не корректно отрабатываются след вещи
вот ссыль на описание (http://forum.oszone.net/post-1221042-122.html)
без добавления ваших измнений. т.е. кнопок - я благополучно выделял галочки руками, у меня менялся сразу необходимый размер на диске, и при повторном запуске этого инсталлятора - он мне отображал уже установленные галочки тех компонентов, что я выбрал. Такое не изменилось после добавления кнопок, но они не корректны, а именно, повторюсь: при выделениее всех компонент, размер не перессчитывается. хотя действительно, компоненты установились, и при повторной установке поверх - инсталлятор не отображает компоненты, которые я уже установил...

A1EXXX
19-10-2009, 15:50
Krekerpro, ну тогда Google тебе в помощь :buba:

Krekerpro
19-10-2009, 19:09
A1EXXX,
Ты меня видать не правильно понял,на картинке фраза-фон прозрачный,но в инсталяторе откуда-то появляется серый стандартный фон(как в стандартном инсталяторе)

Odebay
20-10-2009, 18:59
Как сделать TasksPage,на основе скрипта Prototype? :sorry:

Bambaso
23-10-2009, 07:27
Здравствуйте. Подскажите пожалуйста как найти выход из этой ситуации. Я написал скрипт который что-то вроде патча, но вот в чём дело. В той программе которую я немного изменил есть текстовый файл m3u и мне нужно чтобы в нём добавилась дополнительная информация, этого сделать я не могу, но смог его просто заменить. Проблема в том что после удаления патча он сносит и этот файл а этого делать не нужно. Как сделать так чтобы он не удалялся или добавленая в него информация так же изчезала. Если кто может помоч за ранее спасибо.

Brocman
23-10-2009, 14:10
Подскажите пожалуйста - как реализовать добавление данных в реестр, в зависимости от битности системы.

Допустим в x64 добавлялись одни ветки, в x86 другие.

ChiLiOne
23-10-2009, 18:48
Подскажите пожалуйста - как реализовать добавление данных в реестр, в зависимости от битности системы.
Допустим в x64 добавлялись одни ветки, в x86 другие. »
Присоединяюсь к вопросу только мне без разницы скольки битная система, самое главное чтобы в реестр добавлялось при установке

Serega
23-10-2009, 19:27
есть текстовый файл m3u и мне нужно чтобы в нём добавилась дополнительная информация, этого сделать я не могу »
Почитайте Справку, там есть описание для строковых функций.
но смог его просто заменить. Проблема в том что после удаления патча он сносит и этот файл а этого делать не нужно. »
Просто нужно переименовать оригинальный файл, допустим добавить расширение *.bak, а при деинсталляции восстановить его обратно.

Допустим в x64 добавлялись одни ветки, в x86 другие »
В каталоге Inno Setup, есть папка Examples, там есть скрипт 64BitTwoArch.iss, в нем показан пример, при одной архитектуре копируется один файл при другой, соответственно другой файл. То же самое и с реестром:

[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

[Registry]
Root: HKCU; Subkey: Software\My Program; Flags: uninsdeletekeyifempty
Root: HKCU; Subkey: Software\My Program\x64; Check: Is64BitInstallMode; Flags: uninsdeletekey
Root: HKCU; Subkey: Software\My Program\x32; Check: not Is64BitInstallMode; Flags: uninsdeletekey

DemonAk
23-10-2009, 20:39
Как добавить в этот код еще парочку mp3, чтобы они проигрывались по порядку:
const
BASS_ACTIVE_STOPPED = 0;
BASS_ACTIVE_PLAYING = 1;
BASS_ACTIVE_STALLED = 2;
BASS_ACTIVE_PAUSED = 3;
BASS_SAMPLE_LOOP = 4;

var
mp3Handle: HWND;
mp3Name: String;
cb:TCheckBox;

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PAnsiChar; offset: DWORD; length: DWORD; flags: DWORD): DWORD;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_ChannelIsActive(handle: DWORD): Integer;
external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';

function BASS_ChannelPause(handle: DWORD): Boolean;
external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Pause(): Boolean;
external 'BASS_Pause@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('Music.mp3');
mp3Name := ExpandConstant('{tmp}\Music.mp3');
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PAnsiChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);
Result := True;
end;

procedure cbmusic(Sender: TObject);
begin
if cb.checked = true then
begin
case BASS_ChannelIsActive(mp3Handle) of
BASS_ACTIVE_PAUSED:
begin
BASS_ChannelPlay(mp3Handle, False);
end;
BASS_ACTIVE_STOPPED:
begin
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PAnsiChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);
end;
end;
end;
if cb.checked = false then
BASS_ChannelPause(mp3Handle);
end;

procedure InitializeWizard();
begin
cb:=TCheckBox.Create(WizardForm);
cb.Parent:=WizardForm;
cb.Width:=ScaleX(220);
cb.Left:=ScaleY(10);
cb.Top:=ScaleY(330);
cb.CAPTION:='Проигрывание музыки';
cb.ONCLICK:=@cbmusic;
cb.checked:=true
end;

procedure DeinitializeSetup();
begin
BASS_Stop();
BASS_Free();
end;

Bambaso
24-10-2009, 12:49
Здравствуйте. Весь день ломаю голову, но ничего толкового не вышло.
Как сделать бэкап оригинальному файлу получилось, но при удалении программы он всёравно удаляет и этот бэкап,
и при этом просто не хочет его востанавливать.
Пробовал другой вариант, но и при этом выходит так что файл остаётся но не оригинальный а подменённый.
Вот примеры и если знаете как исправить подскажите пожалуйста.
Пример 1
Source: {pf}\a\b\c\play.m3u; DestDir: {pf}\a\b\c; DestName:play.m3u.bak; Flags: ignoreversion external skipifsourcedoesntexist
Делает бэкап, но после удаления программы его не востанавливает а удаляет.
Пример 2
Source: {pf}\a\b\c\play.m3u; DestDir: {pf}\a\b\c; DestName:play.m3u.bak; Flags: ignoreversion external skipifsourcedoesntexist
Source: C:\play.m3u; DestDir: {pf}\a\b\c; Flags: uninsneveruninstall
Делает тоже самое, но вместо оригинального play.m3u остаётся подменённый.
Мне нужно чтобы при инсталле создавался бэкап оригиналу затем был подменён, а после деинсталла убивал подменённый и востанавливал оригинал.
Спасибо за ранее.

Zloy Pryanik
24-10-2009, 12:52
А подскажите пожалуста как сменить положение кнопок "назад,вперед и отмена

comsun
25-10-2009, 02:21
Помогите пож. отправить файл в папку назначения C:\D&S\User.
Пробовал {user} выдаёт ошибку при компилляции, {username} - компилится,вроде всё нормально,но при установке файла по этому адресу нет.

DemonAk
25-10-2009, 02:26
Помогите пож. отправить файл в папку назначения C:\D&S\User.
Пробовал {user} выдаёт ошибку при компилляции, {username} - компилится,вроде всё нормально,но при установке файла по этому адресу нет. »
{%userprofile}

serg aka lain
25-10-2009, 04:06
А подскажите пожалуста как сменить положение кнопок "назад,вперед и отмена »



[Setup]
AppName=My Program
AppVerName=My Program
CreateAppDir=False
Uninstallable=False
OutputDir=userdocs:My Program.

[Code]

procedure InitializeWizard();
begin
with WizardForm do
begin
BackButton.Left := ScaleX(1);
BackButton.Width := ClientWidth div 3;
NextButton.Left := BackButton.Left + BackButton.Width;
NextButton.Width := BackButton.Width;
CancelButton.Left := NextButton.Left + NextButton.Width;
CancelButton.Width := BackButton.Width;
end;
end;





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

[Files]
; Test copy
Source: "{sys}\*.dll"; DestDir: "{tmp}"; Flags: external;

[code]

procedure InitializeWizard();
begin
with WizardForm do
begin
BackButton.Top := BackButton.Top - ScaleY(12);
BackButton.Height := BackButton.Height + ScaleY(21);
NextButton.Top := NextButton.Top - ScaleY(12);
NextButton.Height := NextButton.Height + ScaleY(21);
CancelButton.Top := CancelButton.Top - ScaleY(12);
CancelButton.Height := CancelButton.Height + ScaleY(21);
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpWelcome then
with WizardForm do
begin
NextButton.Left := ScaleX(1);
NextButton.Width := ClientWidth div 2;
CancelButton.Left := NextButton.Left + NextButton.Width;
CancelButton.Width := NextButton.Width;
end;

if (CurPageID > wpWelcome) and (CurPageID < wpInstalling) then
with WizardForm do
begin
BackButton.Left := ScaleX(1);
BackButton.Width := ClientWidth div 3;
NextButton.Left := BackButton.Left + BackButton.Width;
NextButton.Width := BackButton.Width;
CancelButton.Left := NextButton.Left + NextButton.Width;
CancelButton.Width := BackButton.Width;
end;

if CurPageID = wpInstalling then
with WizardForm do
begin
CancelButton.Left := ClientWidth div 3 * 2;
CancelButton.Width := ClientWidth div 3;
end;

if CurPageID = wpFinished then
with WizardForm do
begin
NextButton.Left := ClientWidth div 3 * 2 - NextButton.Width;
NextButton.Width := ClientWidth div 3;
end;
end;

Serega
25-10-2009, 12:10
Как сделать бэкап оригинальному файлу »

[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

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion


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

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

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Beforeinstall: Backup; Flags: ignoreversion

[Code]
procedure Backup;
begin
// переименовываем оригинальный файл
RenameFile(ExpandConstant('{app}\MyProg.exe'), ExpandConstant('{app}\MyProg.bak'));
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
// восстанавливаем оригинальный файл
RenameFile(ExpandConstant('{app}\MyProg.bak'), ExpandConstant('{app}\MyProg.exe'));
end;

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

comsun
25-10-2009, 12:56
Цитата comsun:
Помогите пож. отправить файл в папку назначения C:\D&S\User.
Пробовал {user} выдаёт ошибку при компилляции, {username} - компилится,вроде всё нормально,но при установке файла по этому адресу нет.
»
{%userprofile} »

DemonAk, Спасибо!!!! То что надо!

comsun
25-10-2009, 22:32
затруднения с шифрованием(
применил тему от ISSkin и шифрование от InnoSetup Scripting v.5.1
соединил InnoSetuo Script Joiner, получилось так -


; --- Source: ISSkinSetup.iss ------------------------------------------------------------
; -- Example1.iss --
; Demonstrates copying 3 files and creating an icon.

; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!


[Files]
; Add the ISSkin DLL used for skinning Inno Setup installations.
Source: {app}\ISSkin.dll; DestDir: {app}; Flags: dontcopy

; Add the Visual Style resource contains resources used for skinning,
; you can also use Microsoft Visual Styles (*.msstyles) resources.
Source: {tmp}\Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy

; The following code block is used to load the ISS, pass in
; an empty string ('') as the second parameter to LoadSkin to use
; the Blue color scheme, this is the default color scheme for
; Office2007.cjstyles.
[Code]
// Importing LoadSkin API from ISSkin.DLL
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

// Importing UnloadSkin API from ISSkin.DLL
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

// Importing ShowWindow Windows API from User32.DLL
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup1(): Boolean;
begin
ExtractTemporaryFile('Office2007.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup1();
begin
// Hide Window before unloading skin so user does not get
// a glimse of an unskinned window before it is closed.
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;

[Setup]


; --- Source: Шифр_1_Код.iss ------------------------------------------------------------


[Setup]
Encryption=Yes
;MD5 сумма, подсчитанная ниже
Password=449f2546d2a51b20442c5025c43f126f

[Code]
procedure InitializeWizard2();
var
MD5: String;
begin
//Подсчитываем сумму слагаемых в MD5 калькуляторе, на примере сумма MD5 "````" равна 449f2546d2a51b20442c5025c43f126f
MD5 := GetMD5OfString(''+'`'+'``'+'`')
WizardForm.PasswordEdit.Visible:= False;
//Вставляем то, что складываем
WizardForm.PasswordEdit.Text:= MD5;
end;

//Как обычно нажимаем страницу с пассом
procedure CurPageChanged2(CurPageID: Integer);
begin
if CurPageID = wpPassword then
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;

[Setup]


; --- Dispatching code ------------------------------------------------------------

[Code]

function InitializeSetup(): Boolean;
begin
Result := InitializeSetup1(); if not Result then exit;
end;

procedure DeinitializeSetup();
begin
DeinitializeSetup1();
end;

procedure InitializeWizard();
begin
InitializeWizard2();
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged2(CurPageID);
end;




Компиллируется нормально,при попытке запустить установку,Windows пишет, ошибка (http://i38.tinypic.com/j9wjmr.jpg)

По отдельности работают - или скин или шифрование.
вместе нет,помогите разобраться,плз

Habetdin
25-10-2009, 22:43
comsun, соединил InnoSetuo Script Joiner, получилось так »
А "разделенные" можете опубликовать? :)




© OSzone.net 2001-2012