Войти

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

SeDmY
22-06-2010, 21:15
Друзья, посмотрите скрипт: http://rghost.ru/1959537

У меня во время распаковки freearc ошибку выдает(((

Habetdin
22-06-2010, 21:26
CrOsP, вот, пробуй :)
[Code]
//вешаем ссылку на подпись
var
MouseLabel,SiteLabel: TLabel;

procedure SiteLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://game.dnet.com.ua', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;

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

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

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

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

// 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 InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Office2007.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
Result := True;
end;

procedure InitializeWizard();
begin
WizardForm.Position:= poScreenCenter; //отключение о программе

//вешаем ссылку
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:=$000080FF
SiteLabel.Caption:='Наш сайт game.dnet.com.ua'
SiteLabel.OnClick:=@SiteLabelOnClick
SiteLabel.OnMouseDown:=@SiteLabelMouseDown
SiteLabel.OnMouseUp:=@SiteLabelMouseUp
SiteLabel.OnMouseMove:=@SiteLabelMouseMove
SiteLabel.Parent:=WizardForm
end;


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

CrOsP
22-06-2010, 22:20
Habetdin, Спасибо вам , вы как всегда помогли . Спасибо огромное

Schemer
24-06-2010, 02:44
Здравствуйте. Inno Setup очень хорошо обращается с ini файлами, жалко с xml так нельзя.
Мне нужно в конце установки найти в XML файле строчку <Setting name="Language Code" type="string">en</Setting>
и заменить ее на<Setting name="Language Code" type="string">ru</Setting>
Возможно ли это сделать силами самой inno?

R.i.m.s.k.y.
24-06-2010, 08:36
Возможно ли это сделать силами самой inno »
Вот процедура замены текста в файле. Кажется давно ее мне подогнал Serega

procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
S: TArrayOfString;
//str : string;
i : Integer;
begin
if not FileExists(FilePath) then begin MsgBox('Файл не найден', mbError, mb_Ok); Exit;end; // если файла нет, выходим
LoadStringsFromFile(FilePath, S); // загружаем файл
for i:= 0 to GetArrayLength(S)-1 do begin
if (Pos(AnsiUpperCase(find), AnsiUpperCase(S[i])) > 0) then begin
StringChangeEx(S[i], find, replace, True);
end;
end;
SaveStringsToFile(FilePath, S, False); // сохраняем файл
end;

Schemer
24-06-2010, 20:01
Спасибо. А как этим пользоваться? Я вставил все после затем после var дописал
[CODE] FilePath : 'C:\file.xml';
find : 'en';
replace : 'ru';

выдает ошибку. Что я сделал не так?

aub2000
25-06-2010, 03:51
Пользуюсь Inno Setup первый раз.
Задаю параметры

DefaultGroupName=Программа расчета
DisableProgramGroupPage=no

Цель - создание в меню Пуск раздела с документацией и деинсталятором.
Не могу добиться чтобы в меню Пуск была создана соответствующая папка, страница с запросом на создание/изменение тоже не показывается.
Инсталирую DLL (COM-сервер) и документацию к нему.
Указал все файлы в разделе [Files], может этого не достаточно?

Schemer
25-06-2010, 05:28
Что бы показывалась страница на создание/изменение папки в меню пуск, точно не помню, по моему нужно поставить yes в
DisableProgramGroupPage=yes
А вот что бы ярлыки создавались, их надо прописать в секции [Icons]:
[Icons]
;Создаст группу программы в меню Пуск
Name: "{group}\Proga";Filename: "{app}\Proga.exe"

R.i.m.s.k.y.
25-06-2010, 08:27
выдает ошибку. Что я сделал не так »
Не написали какую ошибку.
Вот мой код использования этой процедуры

RePlaceTextinFile(ExpandConstant('{app}\x264\Megui\allprofiles\AviSynth\AviSynth_dp_ FFT3DGPU.xml'), 'import("', 'import("'+plugindir2_5+'\');

Подменяет в профилях настройки MEGUI путь к плагинам.
plugindir2_5 вычисляется чуть выше (берется из реестра)
В вашем случае

[_Code]
...
RePlaceTextinFile(ExpandConstant('C:\file.xml'), 'en', 'ru');
...

aub2000
25-06-2010, 15:48
Schemer, спасибо за подсказку!
У меня в голове Icons ни как не ассоциировалось со списком файлов в меню Пуск.
Подсказка помогла.
Наверное более уместным было бы название секции Items.

Schemer
25-06-2010, 18:35
Я наверно совсем тугой. Но эти коды я не понимаю. Куда вставлять?
Если я вставляю после procedure вот так:
procedure RePlaceTextinFile(ExpandConstant('C:\file.xml'), 'en', 'ru');
то выдает ошибку:
colon (':') expected.

А если после var вот так:
var
RePlaceTextinFile(ExpandConstant('C:\file.xml'), 'en', 'ru');
то выдает это:
Duplicate identifier 'RePlaceTextinFile'

А если после begin то при компиляции ошибок не выдает, но с xml файлом ничего не происходит. Даже если его нет. Если я правильно понимаю эту строчку:
if not FileExists(FilePath) then begin MsgBox('Файл не найден', mbError, mb_Ok); Exit;end;
То как минимум должно выдать ошибку об отсутствие файла при установке?
А какой инно сетап нужен? Я свой давно не обновлял, у меня - Inno Setup Compiler 5.2.4-dev (ISPP 5.2.4.0) (build 090319)

Schemer
25-06-2010, 19:47
Вот еще что нашел:

///////////////////////////////////////////////////////////////////////////////
// Find given text in given file, and replace
// complete textline with given text.
// Created: March 27, 2002 by S.T.I.Bracke
// Revised: May 22, 2002 by S.T.I.Bracke
function ReplaceLine(strFilename, strFind, strNewLine: String): Boolean;
var
strTemp : String;
iLineCounter : Integer;
a_strTextfile : TArrayOfString;

begin
{ Load textfile into string array }
LoadStringsFromFile(strFilename, a_strTextfile);

{ Search trough all textlines for given text }
// old line
// for iLineCounter := 1 to High(a_strTextfile) do
// new line corrected by Nikolaus Moll
for iLineCounter := 0 to GetArrayLength(a_strTextfile)-1 do
begin
{ Overwrite textline when text searched for is part of it }
if (Pos(strFind, a_strTextfile[iLineCounter]) > 0) then
a_strTextfile[iLineCounter] := strNewLine;
end;

{ Save string array to textfile (overwrite, no append!) }
SaveStringsToFile(strFilename, a_strTextfile, False);

Result := True;

end;


Результат тот же. :cry:

cleric1985_n
28-06-2010, 01:23
Подскажите как заставить выполнятся следующее задание из секции Code, в обычном режиме все работает, а при тихой установке ни в какую, может прописать что надо..?!

[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


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;

R.i.m.s.k.y.
28-06-2010, 09:02
То как минимум должно выдать ошибку об отсутствие файла при установке »
А как Вы вызываете эту процедуру? Я из секции Files. Но можно еще через Event Function, почитайте в справке про CurStepChanged. Вашего кода я не вижу - кладу свой.


[Files]
;После копирования файлов будет запущена MeGUIavs
Components: MeGUI; Source: CodeRim\CodeRim\x264\*; DestDir: {app}\x264\; BeforeInstall: ChangeCaption('Установка MeGUI'); AfterInstall: MeGUIavs; Flags: ignoreversion uninsrestartdelete setntfscompression

[_Code]
procedure ChangeCaption(str: string);
begin
WizardForm.StatusLabel.Caption:= str;
end;

procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
S: TArrayOfString;
//str : string;
i : Integer;
begin
if not FileExists(FilePath) then begin MsgBox('Файл не найден', mbError, mb_Ok); Exit;end; // если файла нет, выходим
LoadStringsFromFile(FilePath, S); // загружаем файл
for i:= 0 to GetArrayLength(S)-1 do begin
if (Pos(AnsiUpperCase(find), AnsiUpperCase(S[i])) > 0) then begin
StringChangeEx(S[i], find, replace, True);
end;
end;
SaveStringsToFile(FilePath, S, False); // сохраняем файл
end;


procedure MeGUIavs;
var plugindir2_5 : String;

begin

RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\AviSynth','plugindir2_5', plugindir2_5);

RePlaceTextinFile(ExpandConstant('{app}\x264\Megui\allprofiles\AviSynth\AviSynth_dp_ DeBlock.xml'), 'import("', 'import("'+plugindir2_5+'\');

end;

end.


А какой инно сетап нужен »
В инно не нужны гонки за версией. У меня стоит Inno Setup Compiler 5.3.7 и ISPP 5.3.6, к примеру на 198 странице у камрада SeDmY не клеилось из-за юникод версии инно.

Подскажите как заставить выполнятся следующее задание из секции Code »
Читаем про CurStepChanged

Procedure CurStepChanged(CurStep: TSetupStep);
Begin
if CurStep = ssInstall then BackupData(ваши параметры)
End;

А вообще странно, если в тихом режиме применяется Registry, то должна отработать и BeforeInstall: BackupData('ext1'). В коде подставьте MsgBox('???', mbError, mb_Ok) - будет видно что где происходит (или не происходит).

Реестр можно бэкапить вот так, кстати если данные в реестре заковыристые вы уверены что RegWriteStringValue(HKCR, '.' + FileExt + '(backup)', '', OldValueData) правильно их выгрузит?


procedure BackupReg();
var
res, i, k: Integer;
reg0, reg, RegEdit: string;
Key: TArrayOfString;
begin
RegEdit:= ExpandConstant('{sys}\reg.exe');
reg0:= ExpandConstant('{app}\BackUp');
Key:= ['HKLM\SOFTWARE\GNU',
'HKEY_CURRENT_USER\SOFTWARE\GNU',
];
for i:= 0 to GetArrayLength(Key)-1 do begin
reg := reg0 + IntToStr(i) + '.reg';
if not FileExists(reg) then begin Exec(RegEdit, ' export ' + AddQuotes(Key[i]) + ' ' + AddQuotes(reg), ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilTerminated, res);
end;
end;

ecspertiza
28-06-2010, 13:37
Всем здрасти, Inno Setup использую относительно недавно, так что если вопрос нубский сильно не пинайте, при установки софта если он уже установлен то Inno Setup по умолчанию выдает сообщение мол такая папка уже есть, продолжить туда ставить или нет, можно ли как то изменить текст этого сообщения ?

cleric1985_n
28-06-2010, 16:05
ecspertiza,

DirExistsWarning=no

cleric1985_n
28-06-2010, 17:52
Читаем про CurStepChanged »

А зачем оно нужно, если процедура вызывается через BeforeInstall:

Реестр можно бэкапить вот так, кстати если данные в реестре заковыристые вы уверены что RegWriteStringValue(HKCR, '.' + FileExt + '(backup)', '', OldValueData) правильно их выгрузит »

В обычном режиме все корректно отрабатывает, это есть самое обычное сохранение ассоциаций..

ecspertiza
29-06-2010, 09:32
ecspertiza,
DirExistsWarning=no »

Это конечно хорошо, но насколько я понял этот флажок совсем выключит сообщение, а хотелось бы просто изменить его текст.

Habetdin
29-06-2010, 12:08
хотелось бы просто изменить его текст. »
[Messages]
DirExistsTitle=Папка существует
DirExists=Папка%n%n%1%n%nуже существует. Всё равно установить в эту папку?
Изменяйте :)

DevilisH
29-06-2010, 21:46
Здравствуйте. Помогите, пожалуйста, с 2 проблемами:
1) Как изменить цвет шрифта инсталлера на белый?
2) Как убрать белые полосы, которые образуются при загрузке своей картинки на все окно инсталлятора?




© OSzone.net 2001-2012