IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Скрипты для InnoSetup (http://www.imho.ws/showthread.php?t=75380)

ryfm 09.12.2004 08:23

Скрипты для InnoSetup
 
Кто разбирается в этом инсталляке помогите со скриптом, который бы выполнял следующее:

1. В инсталляк проги должен ходить .Net framework (при генерации нового инсталляка я его просто тупо добавил со всеми другими файлами)

2. Перед инсталляцией проги должна быть проверка на присутствие на компе .net framework и если его нет, то установить и только после этого ставится основная прога...

я в своем инсталляке просто добавил ключ в секцию RUN
Filename: "{app}\dotnetfx.exe"; Description: "{cm:LaunchProgram,Установить фреймворк}"; Flags: nowait postinstall skipifsilent

Тупо но работает, правда потом инсталляк остается среди файлов, и проверки на присутствие net framework не проводиться...


Жду предложений...

SwiMMeR 09.12.2004 09:30

ryfm
Я сделал также, тока dotnetfx с двумя апдейтами расспаковываю в папку {tmp} потом запускаю (сетап ждет) после завершения установки ДотНета и апдейтов завершается основная установка и файлы удаляются из временной директории.

Проверку на наличие уже установленного ДотНета можно сделать, но зачем? если он сам делает эту проверку :)

ryfm 09.12.2004 09:45

Просто нет премени разбираться с документацией к InnoSetup...
Поэтому вопрос, какие ключи нужны, чтобы net framework распаковывался в темп(сейчас он копируется в папку проги и остается там), запускался до сетапа проги, а потом удалялся (хотя наверное если он в темпе, то он удаляется автоматом?)... Или просто запости пример скрипта с этим, сам разберусь.

Да и проверку я считаю надо сделать самому, чтобы не ждать пока инсталляк net framework запуститься и сам начнет проверять...

SwiMMeR 09.12.2004 09:54

ryfm
Для проверки установленного ДотНета имхо стоит мониторить веточку
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework в реестре

вот код который я юзаю ...
Код:

[Run]

Filename: {tmp}\dotnetfx.exe;
Parameters: ;
StatusMsg: Установка .Net Framework {#ApplVersion} ...;
Components: main;
Flags: runmaximized

Filename: {tmp}\devupdate40.exe;
Parameters: ;
StatusMsg: Установка .Net Framework Device Update ...;
Components: update\update;
Flags: runmaximized

Filename: {tmp}\sp1.exe;
Parameters: ;
StatusMsg: Установка .Net Framework SP1 ...;
Components: update\sp1;
Flags: runmaximized

[Files]
Source: dotnetfx.exe;
DestDir: {tmp};
Components: main;
Attribs: hidden system;
Flags: ignoreversion

Source: devupdate40.exe;
DestDir: {tmp};
Components: update\update;
Attribs: hidden system;
Flags: ignoreversion

Source: sp1.exe;
DestDir: {tmp};
Components: update\sp1;
Attribs: hidden system;
Flags: ignoreversion

Кста ... у меня несколько программ которые юзают библиотеки ДотНета и я в свою ветку в реестре пишу, что ДотНета уже установлен. При установке следующей программы я читаю эту ветку ...

ryfm 09.12.2004 09:58

Ок. пасиба...
Цитата:

SwiMMeR:
Кста ... у меня несколько программ которые юзают библиотеки ДотНета и я в свою ветку в реестре пишу, что ДотНета уже установлен. При установке следующей программы я читаю эту ветку ...
Если мониторишь ветку, то тогда уж мониторить HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramewor, так на всякий случай...
Кстати, как в инно считать значение реестра... Надеюсь еще не заколебал :).

SwiMMeR 09.12.2004 11:08

ryfm
Цитата:

Если мониторишь ветку, то тогда уж мониторить HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework
Это еще не точно, что мониторить эту ветку поможет. Я всего лишь предположил. Проверять лень ;)

А насчет считывания значения реестра, дык ...
В секции кода пишешь
Код:

[Сode]
var vDotNet: Boolean;

function InitializeSetup(): Boolean;
var RegValue: String;
begin
 RegValue:='';
 RegQueryStringValue(HKLM,'SOFTWARE\Microsoft\.NETFramework',
'InstallRoot',RegValue);
 vDotNet:=False;
 if (Length(RegValue)>0) then
  vDotNet:=True;
  Result:=True;
end;

function DotNetInstalled(): Boolean;
begin
 Result:=vDotNet;
end;

а в секции например Files пишешь ...
Код:

[Files]
Source: dotnetfx.exe;
DestDir: {tmp};
Components: main;
Attribs: hidden system;
Flags: ignoreversion;
Check: DotNetInstalled (Если функция вернет True, то строка обработается если же Ложь, то строка не обрабатывается во время установки


ryfm 09.12.2004 11:23

Замечательно, код я переделал на следующий:
function DotNetInstalled(): Boolean;
begin
RegValue:='';
RegQueryStringValue(HKLM,'SOFTWARE\Microsoft\.NETF ramework','InstallRoot',RegValue);
if (Length(RegValue)>0) then
DotNetInstalled:=True;
else
DotNetInstalled:=False;
end;

В innosetup используется просто паскаль?

Так лаконичнее...

SwiMMeR 09.12.2004 11:56

ryfm
Сам Инно написан на Дельфи, поэтому нельзя сказать что это Паскаль или Дельфи ... скорее клон по возможностям, но паскаль по синтаксису :)

ЗЫ: ИМХО

ryfm 09.12.2004 12:09

Цитата:

DotNetInstalled:=False;
Не хочет он это компилить, говорит что identificator expected, в делфи насколько я помню это должно было проходить, как возвращаемый результат... Пришлось сделать как у тебя, работает вроде нормально...

Robert_W 01.12.2008 21:33

Есть вопросик по скриптам для инсталятора Inno - сделал выбор языков, но картинка инсталятора и название патча остались на русском - как сие можно изменить?

Volkogriz 30.11.2010 19:43

DotNetInstalled(): Boolean;
 
[Сode]
function InitializeSetup(): Boolean;
var
DotNetInstalled(): Boolean;
begin
RegValue:='';
RegQueryStringValue(HKLM,'SOFTWARE\Microsoft\.NETF ramework','InstallRoot',RegValue);
if (Length(RegValue)>0) then
DotNetInstalled:=True;
else
DotNetInstalled:=False;
end;


Часовой пояс GMT +4, время: 21:23.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.