Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]


Страниц : 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

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

ShadeUa
11-01-2015, 16:41
Здравствуйте. Подскажите пожалуйста , добавить в инстал новую страницу таких же размеров как предыдущие , и так же с возможность слайд шоу ?

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