PDA

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


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

Shkutu
25-02-2014, 14:57
Доброго времени суток! Подскажите плиз, как можно у страницы типа TInputDirWizardPage отключить ворнинг о том, что папка не выбрана?

Dodakaedr
25-02-2014, 20:19
Nordek, спс

Johny777
27-02-2014, 02:23
Shkutu, перехват функции WinApi (хук). В данном случае MessageBox(W/A). Думаю по другому никак если так уж надо скрыть.

но на мой взгляд самое простое - создать пустую страницу и на ней в ручную эдит и остальное и не извращаться с вышесказанным

Debugger
27-02-2014, 07:26
Покурил мануал и нашел все описания встроенных функций в паскаль-коде. Получается для того, чтобы научиться писать паскаль-код для Inno Setup, вполне достаточно знать эти функции, описанные в хелпе и знать синтаксис языка? Сначала думал что придется учить Паскаль с нуля... Поправьте если не прав!

Shkutu
27-02-2014, 13:05
Johny777, спасиб. В общем-то, так и сделала - свою страницу с нужными конторолами, когда поняла, что просто так скрыть ворнинг нельзя.
Debugger, для каких-то стандартных вещей вполне хватает мануала и основ паскаля. Иногда конечно требуется что-то более сложное, вроде того же WinApi, но на мой вкус это скорее исключение (не знаю, как у других).

dr.alexa2000@vk
27-02-2014, 15:48
Не могу запаковать папку с названием {Original}, ругается на знак { , что делать?

Nordek
27-02-2014, 16:58
Не могу запаковать папку с названием {Original}, ругается на знак { , что делать? »Ни слова не понял из того что ты написал. Нужно писать более развёрнуто. Что делал, какой код. Учти, могут предоставить тебе пример, но он окажется не таким какой тебе необходим - всё потому: что ты изначально не предоставил необходимую информацию для того, чтоб визуально поняли те, кто может тебе помочь.

Всё пакуется нормально:
[Files]
Source: {Original}\*; DestDir: {app}\; Flags: ignoreversion recursesubdirs createallsubdirs

[Files]
Source: {Original}\*; DestDir: {app}\{{Original}; Flags: ignoreversion recursesubdirs createallsubdirs

Dodakaedr
27-02-2014, 17:08
Как добавить программу в исключения брандмауэра windows?

Nordek
27-02-2014, 17:18
Как добавить программу в исключения брандмауэра windows? »Смотри здесь (http://news.jrsoftware.org/news/innosetup/msg43799.html).

Dodakaedr
27-02-2014, 17:36
Nordek, как это оформить в секции tasks?

Shkutu
27-02-2014, 18:03
добавить программу в исключения брандмауэра windows? »
вот так можно

[CustomMessages]
ru.FireWallAllow=Программа установки добавит %1 в исключения брандмауэра Windows на текущем профиле (%2). Хотите продолжить?
en.FireWallAllow=Setup will now add %1 to Windows Firewall as an authorized application for the current profile (%2). Do you want to continue?

ru.FireWallAllowOk=Программа установки добавила %1 в исключения брандмауэра Windows на текущем профиле.
en.FireWallAllowOk=Setup is now an authorized application %1 for the current profile

[Code]
const
NET_FW_IP_VERSION_ANY = 2;
NET_FW_SCOPE_ALL = 0;

procedure AddFirewall(Name,AppName:string);
var
Firewall, Application: Variant;
begin

if MsgBox(ExpandConstant('{cm:FireWallAllow,'+AppName+','+GetUserNameString+'}'), mbInformation, mb_YesNo) = idNo then
Exit;

{ Create the main Windows Firewall COM Automation object }

try
Firewall := CreateOleObject('HNetCfg.FwMgr');
except
RaiseException('Please install Windows Firewall first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)');
end;

{ Add the authorization }

Application := CreateOleObject('HNetCfg.FwAuthorizedApplication');
Application.Name := Name; //Название записи о разрешении
Application.IPVersion := NET_FW_IP_VERSION_ANY;
Application.ProcessImageFileName := AppName;//ExpandConstant('{srcexe}'); //Собственно программа
Application.Scope := NET_FW_SCOPE_ALL;
Application.Enabled := True;

Firewall.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(Application);
MsgBox(ExpandConstant('{cm:FireWallAllowOk,'+AppName+'}'), mbInformation, mb_Ok);

end;

function AddToFireWall(param:string):boolean;
begin
result:=false;
if IsComponentSelected('app1') then
AddFirewall('App 1', ExpandConstant('{app}\app1.exe'));
end;

[Run]
Filename:'';Flags: nowait; Check: AddToFireWall('setup')

Dodakaedr
27-02-2014, 18:10
Shkutu, что-то ваш код не работает. Не выскакивает окошко и не добавляет.

Shkutu
27-02-2014, 19:07
Dodakaedr, у меня работает, выковыривала из рабочего скрипта. Может криво скопипастила, но что у вас не работает, надо смотреть уже на вашем коде.
А вообще посмотрите стандартный пример CodeAutomation.iis (в обычном инно входят в стандартный комплект, лежит в папке Examples).

diman_21Ru
27-02-2014, 21:25
Всем привет , как можно наложить на кнопки звуки , за ответ заранее благодарю .

Ivan_009
27-02-2014, 22:01
Покажите пожалуйста пример блокировки наложенной через ботву кнопки при нехватке места на диске...

Заранее спасибо...

saurn
27-02-2014, 22:03
Как добавить программу в исключения брандмауэра windows? »
как это оформить в секции tasks? »
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program


[Files]
Source: MyProg.exe; DestDir: {app};


[Tasks]
Name: frexp; Description: Добавить исключение в брандмауэр Windows;


[code]
const
NET_FW_SCOPE_ALL = 0;
NET_FW_IP_VERSION_ANY = 2;


procedure SetFirewallException(const AppName, FileName: String);
var
FirewallObject: Variant;
FirewallManager: Variant;
FirewallProfile: Variant;
begin
try
FirewallObject := CreateOleObject('HNetCfg.FwAuthorizedApplication');
FirewallObject.ProcessImageFileName := FileName;
FirewallObject.Name := AppName;
FirewallObject.Scope := NET_FW_SCOPE_ALL;
FirewallObject.IpVersion := NET_FW_IP_VERSION_ANY;
FirewallObject.Enabled := True;
FirewallManager := CreateOleObject('HNetCfg.FwMgr');
FirewallProfile := FirewallManager.LocalPolicy.CurrentProfile;
FirewallProfile.AuthorizedApplications.Add(FirewallObject);
except end;
end;


procedure RemoveFirewallException(const FileName: String );
var
FirewallManager: Variant;
FirewallProfile: Variant;
begin
try
FirewallManager := CreateOleObject('HNetCfg.FwMgr');
FirewallProfile := FirewallManager.LocalPolicy.CurrentProfile;
FireWallProfile.AuthorizedApplications.Remove(FileName);
except end;
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssPostInstall: if IsTaskSelected('frexp') then SetFirewallException('My Program', ExpandConstant('{app}') + '\MyProg.exe');
end;
end;


procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
case CurUninstallStep of
usPostUninstall: RemoveFirewallException(ExpandConstant('{app}') + '\MyProg.exe');
end;
end;

Ivan_009
27-02-2014, 22:04
diman_21Ru, Так:

Dodakaedr
27-02-2014, 22:26
saurn, Огромное спасибо!!!

dr.alexa2000@vk
28-02-2014, 11:46
Всё пакуется нормально »
Странно.У меня нет.
Source: "{app}\HD3_Data\Templates\{{Original}\patcher_x86 dump.txt"; DestDir: {app}\HD3_Data\Templates\{{Original}; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\HD3_Data\Templates\{{Original}\patcher_x86 log.txt"; DestDir: {app}\HD3_Data\Templates\{{Original}; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\HD3_Data\Templates\{{Original}\rmg.txt"; DestDir: {app}\HD3_Data\Templates\{{Original}; MinVersion: 0.0,5.0; Flags: ignoreversion
Объясняю ситуацию:есть Герои 3 HD их надо запаковать, но есть папка в которой хранятся оригинальные файлы , называется она {Original}.Выходит ошибка, т.к. эти скобки {} мешают правильно понять название папки.

Debugger
28-02-2014, 12:11
Подскажите, а можно ли передать в функцию какой-либо параметр?
Чтото типа наподобие этого:
[Components]
Name: "plugin"; Description: "plugin";
Name: "plugin\32-bit"; Description: "Plugin for productname v1.0"; Check: "checkversion32(10)"
Name: "plugin\64-bit"; Description: "plugin for productname v1.0"; Check: "checkversion64(10)"
Name: "plugin\32-bit"; Description: "Plugin for productname v2.0"; Check: "checkversion32(20)"
Name: "plugin\64-bit"; Description: "plugin for productname v2.0"; Check: "checkversion64(20)"
Name: "plugin\32-bit"; Description: "Plugin for productname v3.0"; Check: "checkversion32(30)"
Name: "plugin\64-bit"; Description: "plugin for productname v3.0"; Check: "checkversion64(30)"

[code]
function checkversion32(параметр): Boolean;
begin
Result := RegValueExists(HKLM, 'SOFTWARE\параметр\productname', 'version')
end;

function checkversion64(параметр): Boolean;
begin
Result := RegValueExists(HKLM64, 'SOFTWARE\параметр\productname', 'version')
end;




© OSzone.net 2001-2012