Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]
Okta_333
06-01-2015, 22:17
Я вам в личку брошу
palsn2000
09-01-2015, 16:16
Доброе время суток.
Опять столкнулся с трудностью:
Имеется программа, к ней прилагается библиотека для интеграции в оболочку проводника, библиотека находится в отдельной подпапке в которой расположен файл конфигурации, указывающий путь к самой программе. Файл называется config.lua и содержит запись:
--This file uses UTF8 encuding without BOM-- Path to Program = "\"C:\\Program Files\\My prog\\prog.exe\""
программу я включил в сборник и по пути "\"C:\\Program Files программа соответственно находиться не будет.
С помощью секции ini такие записи у меня не получаются.
Можно ли каким-то образом с пошью Инно внести изменения в этот файл или создать пустой и уже потом вписать в него строку с расположением пути к программе --This file uses UTF8 encuding without BOM-- Path to Program = "\"{app}\\My prog\\prog.exe\""
Причём именно в одну строку, начиная с --This file uses UTF8 encuding without BOM-- иначе (без этой записи или если запись первой строкой, а "Path to Program =" уже на следующей строке) в проводнике интеграция не отображается [пробовал редактировать в ручную]
Можно ли это реализовать в секции Code и если можно, то чтобы работало только тогда, когда выбран к примеру Components: component_1 ?
Заранее Спасибо.
sergey3695
10-01-2015, 12:51
palsn2000,
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
Source: config.ini; DestDir: {app}; Flags: ignoreversion;
[Types]
Name: full; Description: Полная установка; Flags: iscustom;
[Components]
Name: Comp1; Description: "Запись в config.lua"; Flags: checkablealone; Types: Full;
[code_]
var
s: string;
function DoubleSlash(S: String): String;
var i: Integer;
begin
Result:='';
while Length(S)>0 do begin
i:=Pos('\', S);
if i>0 then begin
Result:= Result+Copy(S, 1, i-1)+'\\';
Delete(S, 1, i);
end else begin
Result:= Result+S;
SetLength(S, 0);
end;;
end;
end;
procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
S: TStringList;
i : Integer;
begin
if FileExists(FilePath) then begin
S:=tstringlist.create;
S.LoadFromFile(FilePath);
for i := 0 to S.Count-1 do
begin
if S.Names[i]=find then
begin
S.Delete(i);
S.Insert(i,find+'='+replace);
end;
end;
S.SaveToFile(FilePath);
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
if WizardForm.ComponentsList.Checked[0] then
begin
s:= '"\"'+DoubleSlash(ExpandConstant('{app}'))+'\""';
RePlaceTextinFile(ExpandConstant('{app}\config.ini'),'Path to Program',AddQuotes(s));
end;
end;
end;
Config.ini
-This file uses UTF8 encuding without BOM--
Path to Program=
config.ini должен быть такого содержания. Как должно быть прописано сам подредактируешь и замену
RePlaceTextinFile(ExpandConstant('{app}\config.ini'),'Path to Program',AddQuotes(s));
StongCool
10-01-2015, 13:05
[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: Button.bmp; Flags: dontcopy
[Code]
procedure logoOnClick(Sender: TObject);
begin
MsgBox('RePacked by Evilboy', mbInformation, mb_Ok);
end;
procedure InitializeWizard();
var
BtnPanel: TPanel;
BtnImage: TBitmapImage;
begin
ExtractTemporaryFile('Button.bmp')
BtnPanel:=TPanel.Create(WizardForm)
with BtnPanel do begin
Left:=20
Top:=325
Width:=132
Height:=27
Cursor:=crHand
OnClick:=@logoOnClick
Parent:=WizardForm
end
BtnImage:=TBitmapImage.Create(WizardForm)
with BtnImage do begin
AutoSize:=True;
Enabled:=False;
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
Parent:=BtnPanel
end
end;
Ошибка выскакивает на этом BtnImage:=TBitmapImage.Create(WizardForm). Подскажите как исправить
sergey3695
10-01-2015, 14:21
StongCool,
Source: Button.bmp; DestDir: "{tmp}"; Flags: dontcopy
должно же быть. не проверял.
StongCool
10-01-2015, 14:27
Поменял, осталось прежней.
Dodakaedr
10-01-2015, 14:28
StongCool, отсутствие точки с запятой
procedure InitializeWizard();
var
BtnPanel: TPanel;
BtnImage: TBitmapImage;
begin
ExtractTemporaryFile('Button.bmp')
BtnPanel:=TPanel.Create(WizardForm)
with BtnPanel do begin
Left:=20
Top:=325
Width:=132
Height:=27
Cursor:=crHand
OnClick:=@logoOnClick
Parent:=WizardForm
end;
BtnImage:=TBitmapImage.Create(WizardForm)
with BtnImage do begin
AutoSize:=True;
Enabled:=False;
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
Parent:=BtnPanel
end;
end;
StongCool
10-01-2015, 14:50
Dodakaedr, Спасибо.
procedure logoOnClick(Sender: TObject);
begin
MsgBox('RePacked by Evilboy', mbInformation, mb_Ok);
end;
забыл команду, которая переходит на новую строку.
Т.е.
- Repack asfafsasf
- добавлено бла бла бла
- вырезано бла бла
sergey3695
10-01-2015, 14:57
StongCool, '+#13+'
Dodakaedr
10-01-2015, 15:02
StongCool, Через CustomMessages [Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: Button.bmp; Flags: dontcopy
[CustomMessages]
Repack=- Repack asfafsasf%n- добавлено бла бла бла%n- вырезано бла бла
[code]
procedure logoOnClick(Sender: TObject);
begin
MsgBox(CustomMessage('Repack'), mbInformation, mb_Ok);
end;
procedure InitializeWizard();
var
BtnPanel: TPanel;
BtnImage: TBitmapImage;
begin
ExtractTemporaryFile('Button.bmp')
BtnPanel:=TPanel.Create(WizardForm)
with BtnPanel do begin
Left:=20
Top:=325
Width:=132
Height:=27
Cursor:=crHand
OnClick:=@logoOnClick
Parent:=WizardForm
end;
BtnImage:=TBitmapImage.Create(WizardForm)
with BtnImage do begin
AutoSize:=True;
Enabled:=False;
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
Parent:=BtnPanel
end;
end;
Причём именно в одну строку, начиная с »
Благодаря коду sergey3695. Пробуйте...
sergey3695
10-01-2015, 15:36
Dodakaedr, да я специально не стал так делать, чтоб человек сам отредактировал, за одно разобрался бы. Ну да ладно...
StongCool
10-01-2015, 15:44
Вписал код, изменения нигде не заметил.
Мне именно в этом окошке нужно.
Давно давно, я нашел команду(уже не помню какую) строка переносилась как надо.
Примерно MsgBox('RePacked by Evilboy', mbInformation, mb_Ok); так: MsgBox('RePacked by Evilboy' ??? '- вырезано бла бла' ??? 'Блабла', mbInformation, mb_Ok);
Где вопросы там знак должен быть, почему то мне хочется вставить + но это не он.
palsn2000
10-01-2015, 15:53
sergey3695, Спасибо за
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
Source: config.ini; DestDir: {app}; Flags: ignoreversion;
[Types]
Name: full; Description: Полная установка; Flags: iscustom;
[Components]
Name: Comp1; Description: "Запись в config.lua"; Flags: checkablealone; Types: Full;
[code_]
var
s: string;
function DoubleSlash(S: String): String;
var i: Integer;
begin
Result:='';
while Length(S)>0 do begin
i:=Pos('\', S);
if i>0 then begin
Result:= Result+Copy(S, 1, i-1)+'\\';
Delete(S, 1, i);
end else begin
Result:= Result+S;
SetLength(S, 0);
end;;
end;
end;
procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
S: TStringList;
i : Integer;
begin
if FileExists(FilePath) then begin
S:=tstringlist.create;
S.LoadFromFile(FilePath);
for i := 0 to S.Count-1 do
begin
if S.Names[i]=find then
begin
S.Delete(i);
S.Insert(i,find+'='+replace);
end;
end;
S.SaveToFile(FilePath);
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
if WizardForm.ComponentsList.Checked[0] then
begin
s:= '"\"'+DoubleSlash(ExpandConstant('{app}'))+'\""';
RePlaceTextinFile(ExpandConstant('{app}\config.ini'),'Path to Program',AddQuotes(s));
end;
end;
end;
Но вот какое дело: в коде используется замена текста
s:= '"\"'+DoubleSlash(ExpandConstant('{app}'))+'\""';
RePlaceTextinFile(ExpandConstant('{app}\config.ini'),'Path to Program',AddQuotes(s));
а для моей программы вместо 'Path to Program' приходится писать '--This file uses UTF8 encuding without BOM-- Path to Program'
а вот это самое '--This file uses UTF8 encuding without BOM-- Path to Program=' в файле config.lua имеет не совсем простой текстовый формат (если скопировать в ворд то там эта одна строка распадается на три строки) и после работы скрипта Инно
мой новый файл config.lua также разваливается на три строки и ничего в путь не дописывается.
Вопрос: можно ли как нибудь заставить инно не переписывать всё вместе с --This file uses UTF8 encuding without BOM-- Path to Program=' , а только добавить к нему 'DoubleSlash(ExpandConstant('{app}'))+'\""' сам я этого сделать не могу, так как в программировании даже не 0, а наверно -1 :)
Dodakaedr
10-01-2015, 15:56
palsn2000, Вы это смотрели http://forum.oszone.net/post-2454120-2270.html
StongCool
10-01-2015, 16:03
Dodakaedr, немного покопался...
Вот это команда с которой я работал давно(Про неё я и спрашива) +#13#10+
procedure logoOnClick(Sender: TObject);
begin
MsgBox('RePacked by блабла'+#13#10+ '- ничего не вырез....', mbInformation, mb_Ok);
end;
palsn2000
10-01-2015, 16:26
sergey3695, Dodakaedr, Спасибо за потраченное время, со всем разобрался, последний вопрос снимается - всё оказалось намного проще: строка '--This file uses UTF8 encuding without BOM-- Path to Program=' в Ворде распадается не на три, а на четыре - и всё приходит в логический вид:
--This file uses UTF8 encuding without BOM
-- Path to
Program=
В итоге 1, 2(пустая) и 3 строки вообще необязательны, а библиотека работает только со строкой 'Program=' ( проверил вручную) сейчас попробую реализовать в Инно.
Ещё раз всем спасибо.
palsn2000
10-01-2015, 17:23
В итоге выложу то, что у меня получилось - может кому-то пригодится:
[_Code_]
//Дописывание произвольной информации в строку текстового файда (любого)
var
s: string;
// замена одинарного слэша \ на двойной \\ в пути к файлу
function DoubleSlash(S: String): String;
var i: Integer;
begin
Result:='';
while Length(S)>0 do begin
i:=Pos('\', S);
if i>0 then begin
Result:= Result+Copy(S, 1, i-1)+'\\';
Delete(S, 1, i);
end else begin
Result:= Result+S;
SetLength(S, 0);
end;;
end;
end;
// конец замена одинарного слэша \ на двойной \\ в пути к файлу
procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
S: TStringList;
i : Integer;
begin
if FileExists(FilePath) then begin
S:=tstringlist.create;
S.LoadFromFile(FilePath);
for i := 0 to S.Count-1 do
begin
if S.Names[i]=find then
begin
S.Delete(i);
S.Insert(i,find+'='+replace);
end;
end;
S.SaveToFile(FilePath);
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
// 'Component_5\integrate' - Это имя необходимого компонента в секции [Components]
if (IsComponentSelected('Component_5\integrate') = True) then
begin
// +'\\My Prog'+'\\Prog.exe'+'\""' - Это путь к exe программы c подпапкой и самим exe, двойной слэш и слэш с кавычками в начале и конце - необходимость в данном частном случае.
s:= '"\"'+DoubleSlash(ExpandConstant('{app}'))+'\\My Prog'+'\\Prog.exe'+'\""'
// 'Program' - это текст в строке которую надо заполнить, '{app}\My Prog\DllFolder\config.lua' - путь к файлу, который редактируем
RePlaceTextinFile(ExpandConstant('{app}\My Prog\DllFolder\config.lua'),'Program',AddQuotes(s));
end;
end;
end;
//конец Дописывание произвольной информации в строку текстового файда (любого)
На выходе получаем в файле по адресу D:\My Prog\DllFolder\config.lua из имеющегося Program=
Program="\D:\\My Prog\\Prog.exe\"" (Вместо D: будет полный путь установки {app}) и всё это будет выполняться только при выборе компонента (в данном случае Component_5\integrate).
sergey3695
10-01-2015, 18:35
StongCool, слепота :o
Здравствуйте. Подскажите пожалуйста , добавить в инстал новую страницу таких же размеров как предыдущие , и так же с возможность слайд шоу ?
Dodakaedr
11-01-2015, 22:44
ShadeUa, Создание новой странички[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
[Code]
var
Page: TWizardPage;
procedure InitializeWizard();
begin
Page := CreateCustomPage(wpWelcome, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');
end;
и так же с возможность слайд шоу ? »
В смысле? Какой слайдшоу?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.