Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
Друзья, посмотрите скрипт: 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;
Habetdin, Спасибо вам , вы как всегда помогли . Спасибо огромное
Здравствуйте. 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;
Спасибо. А как этим пользоваться? Я вставил все после затем после var дописал
[CODE] FilePath : 'C:\file.xml';
find : 'en';
replace : 'ru';
выдает ошибку. Что я сделал не так?
Пользуюсь Inno Setup первый раз.
Задаю параметры
DefaultGroupName=Программа расчета
DisableProgramGroupPage=no
Цель - создание в меню Пуск раздела с документацией и деинсталятором.
Не могу добиться чтобы в меню Пуск была создана соответствующая папка, страница с запросом на создание/изменение тоже не показывается.
Инсталирую DLL (COM-сервер) и документацию к нему.
Указал все файлы в разделе [Files], может этого не достаточно?
Что бы показывалась страница на создание/изменение папки в меню пуск, точно не помню, по моему нужно поставить 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');
...
Schemer, спасибо за подсказку!
У меня в голове Icons ни как не ассоциировалось со списком файлов в меню Пуск.
Подсказка помогла.
Наверное более уместным было бы название секции Items.
Я наверно совсем тугой. Но эти коды я не понимаю. Куда вставлять?
Если я вставляю после 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)
Вот еще что нашел:
///////////////////////////////////////////////////////////////////////////////
// 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.