Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]
R.i.m.s.k.y.
14-08-2011, 17:02
Devils Night,
//**проверка наличия фреймворка 3.5
function netfw35(): Boolean;
begin
if ( RegKeyExists(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5') )
then Result := True else Result := False;
end;
//** проверка на установку MS Visual C++ 2008
Function isvcredist():boolean;
var b1,b2,b3 : boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\DevDiv\VC\Servicing\9.0\RED') then b1 := True;
if IsWin64 then begin
if RegKeyExists(HKLM64, 'SOFTWARE\Microsoft\DevDiv\VC\Servicing\9.0\RED') then b2 := True;
if RegKeyExists(HKLM32, 'SOFTWARE\Microsoft\DevDiv\VC\Servicing\9.0\RED') then b3 := True;
end;
if (b1 or b2 or b3) then Result := True else Result := False;
end;
Function InitializeSetup: Boolean;
begin
...
if (not isvcredist) then MsgBox('Не установлен Microsoft Visual C++ 2008', mbInformation, MB_OK);
if (not netfw35) then MsgBox('Не установлен FrameWork 3.5', mbInformation, MB_OK);
...
end;
R.i.m.s.k.y., я думаю ещё можно привязать к Check, было бы удобнее
R.i.m.s.k.y.
14-08-2011, 17:13
я думаю ещё можно привязать к Check, было бы удобнее »
такой вариант можно использовать, к примеру, чтобы сделат неснимаемые галки если компонента не хватает
пример неснимаемых галок давал Serega
VASYAKRN
14-08-2011, 17:35
прикрутите к моему скрипту .png иконку папки на странице папки и меню пуск через ботву
скрипт (http://inno.at.ua/TMP/undercover_bratherhood_lite.7z)
иконка (http://inno.at.ua/TMP/2.png)
VASYAKRN, неблагодарное быдло
прикрутите к моему скрипту .png иконку папки на странице папки и меню пуск через ботву »
не имеешь уважения к форумчанам, никто не поможет, это весь скрипт переписывать.
El Sanchez
14-08-2011, 19:13
нужно чтобы сам инсталятор проверял на наличие установленных компонентов »
Devils Night, и это правильно.
Может будут, какие другие варианты? »
dotnetfx3_x86, vcredist_x86, xliveredist - сердцем этих установщиков является msi-документ, а значит используем возможности API системы, а именно функцию MsiQueryProductState.
[code]
const
INSTALLSTATE_DEFAULT = 5;
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
function MsiQueryProductState(szProduct: String): Integer;
external 'MsiQueryProductState{#A}@msi.dll stdcall';
function IsMsiProductInstall(ProductCode: String): Boolean;
begin
Result := MsiQueryProductState(ProductCode) = INSTALLSTATE_DEFAULT;
end;
//к примеру определяем установлен ли Microsoft Visual C++ 2010 x86 Redistributable, ProductCode которого {196BB40D-1578-3D01-B289-BEFC77A11A1E}
procedure InitializeWizard();
begin
if IsMsiProductInstall('{196BB40D-1578-3D01-B289-BEFC77A11A1E}') then
MsgBox('vcredist 2010 installed for current user', mbInformation, MB_OK)
else
MsgBox('vcredist 2010 not installed', mbInformation, MB_OK);
end;
ProductCode можно посмотреть в msi-документе с помощью Orca (таблица Property, свойство ProductCode)
El Sanchez, помнишь мы говорили про appmutex, можно ли сделать так, чтобы на деинсталлятор правило не действовало, например если у меня ошибка распаковки вызывается деинсталлятор, и выдаётся сообщение "вы уже запустили одну копию этой программы"
VASYAKRN
14-08-2011, 23:10
обєдините Install И PostInstall на одной странице или просто удалите Install
troyan90 зарание спасиба.Етот скрипт я делал по ево Hitman - Blood Money весии непомню
скрипт (http://inno.at.ua/TMP/Fenixx_Dead_Spase_2_ISdone0.6.7z)
Доброго времени суток!
Гуру, подскажите пожалуйста, как получить информацию о всех сетевых интерфейсах установленных на локальном ПК?
Никак не могу разобраться с этим.
insombia
15-08-2011, 10:35
Подскажите как сделать чтобы весь текст был только белом фоне http://images.bcm.net.ua/images/70456503070116723403.jpg?
P.S. Копирование файлов не в счет
insombia, ну придется почти всю страницу переписывать, и потом уже двигать текст, пример из старого скрипта злого деда вот :
[Setup]
AppName=Mirror's Edge
AppVerName=Mirror's Edge
DefaultDirName={pf}\EA Games\Mirror's Edge
WizardImageFile=WizardImg.bmp
WizardSmallImageFile=WizardSmallImg.bmp
[code]
var
WLabel1, WLabel2,
FLabel1, FLabel2: TLabel;
PageNameLabel, PageDescriptionLabel: TLabel;
procedure InitializeWizard();
//WizardImageFile
begin
WizardForm.Caption:='Программа установки игры "Mirrors Edge"';
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.WizardBitmapImage.Width := 497;
WizardForm.WizardBitmapImage.Height := 313;
WizardForm.WizardSmallBitmapImage.Left:=0;
WizardForm.WizardSmallBitmapImage.Width:=497;
WizardForm.WizardSmallBitmapImage.Height:=58;
WizardForm.PageDescriptionLabel.Width:=300;
WizardForm.PageNameLabel.Width:=300;
WizardForm.FileNameLabel.Visible:=False;
WizardForm.ProgressGauge.Top:=ScaleY(100);
WizardForm.StatusLabel.Top:=ScaleY(80);
WLabel1 := TLabel.Create(WizardForm);
WLabel1.Left := ScaleX(176);
WLabel1.Top := ScaleY(16);
WLabel1.Width := ScaleX(301);
WLabel1.Height := ScaleY(54);
WLabel1.AutoSize := False;
WLabel1.WordWrap := True;
WLabel1.Font.Size := 11;
WLabel1.Font.Style := [fsBold];
WLabel1.Font.Color:= clBlack;
WLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WLabel1.Transparent := True;
WLabel1.Parent := WizardForm.WelcomePage;
WLabel2 :=TLabel.Create(WizardForm);
WLabel2.Top := ScaleY(76);
WLabel2.Left := ScaleX(176);
WLabel2.Width := ScaleX(301);
WLabel2.Height := ScaleY(234);
WLabel2.AutoSize := False;
WLabel2.WordWrap := True;
WLabel2.Font.Color:= clBlack;
WLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
WLabel2.Transparent := True;
WLabel2.Parent := WizardForm.WelcomePage;
WizardForm.WizardBitmapImage2.Width := 497;
WizardForm.WizardBitmapImage2.Height := 313;
FLabel1 := TLabel.Create(WizardForm);
FLabel1.Left := ScaleX(176);
FLabel1.Top := ScaleY(16);
FLabel1.Width := ScaleX(301);
FLabel1.Height := ScaleY(54);
FLabel1.AutoSize := False;
FLabel1.WordWrap := True;
FLabel1.Font.Size := 11;
FLabel1.Font.Style := [fsBold];
FLabel1.Font.Color:= clBlack;
FLabel1.Caption := WizardForm.FinishedHeadingLabel.Caption;
FLabel1.Transparent := True;
FLabel1.Parent := WizardForm.FinishedPage;
FLabel2 :=TLabel.Create(WizardForm);
FLabel2.Top := ScaleY(76);
FLabel2.Left := ScaleX(176);
FLabel2.Width := ScaleX(301);
FLabel2.Height := ScaleY(53);
FLabel2.AutoSize := False;
FLabel2.WordWrap := True;
FLabel2.Font.Color:= clBlack;
FLabel2.Caption := 'Программа установлена на Ваш компьютер.' #13#13
'Нажмите «Завершить», чтобы выйти из программы установки.';
FLabel2.Transparent := True;
FLabel2.Parent := WizardForm.FinishedPage;
begin
PageNameLabel := TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left := ScaleX(10);
Top := ScaleY(10);
Width := ScaleX(300);
Height := ScaleY(14);
AutoSize := False;
WordWrap := True;
Font.Color := clBlack;
Font.Style := [fsBold];
Transparent := True;
Parent := WizardForm.MainPanel;
end;
PageDescriptionLabel := TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left := ScaleX(15);
Top := ScaleY(25);
Width := ScaleX(400);
Height := ScaleY(30);
AutoSize := False;
WordWrap := True;
Font.Color := clBlack;
Transparent := True;
Parent := WizardForm.MainPanel;
end;
with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
with MainPanel do
begin
with WizardSmallBitmapImage do
begin
Left := ScaleX(0);
Top := ScaleY(0);
Width := Mainpanel.Width;
Height := MainPanel.Height;
end;
end;
end;
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
begin
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
end;
end;
если не разберешься, задавай вопросы подскажу =)
to all кто нибудь может проверить на 64х разрядной системе программу? ссылка вот (http://rghost.ru/users/imitri7/releases/GreyLinkDC-049x86-i-048x64-RePack) (желательно скинуть скрин папки программы)
insombia
15-08-2011, 11:12
ну придется почти всю страницу переписывать, и потом уже двигать текст, пример из старого скрипта злого деда вот :
читать дальше » »
Жаль не пашет только текст весь стал корявый
insombia, скинь скрин, можт я подскажу че сделать чтоб все пучком было )
insombia
15-08-2011, 12:01
Imitri7 вот именно что скрипта у меня нету я хочу сделать что-то похожее
El Sanchez
15-08-2011, 12:13
помнишь мы говорили про appmutex, можно ли сделать так, чтобы на деинсталлятор правило не действовало, например если у меня ошибка распаковки вызывается деинсталлятор, и выдаётся сообщение "вы уже запустили одну копию этой программы" »
Rikill, не совсем понял, что требуется. При ошибке распаковки на этапе установки и так выводится соответствующее сообщение и производится откат.
как получить информацию о всех сетевых интерфейсах установленных на локальном ПК? »
Gugle, может какую конкретную инфу, типа MAC, IP, название? Всех - это с минипортами, ассинхронными адаптерами и т.д.?
El Sanchez, мне нужны MAC, IP, Description всех ethernet адаптеров установленных на ПК.
Пока, все что нашел это работа с "cmd.exe", через команду "ipconfig /all". Оттуда, конечно, можно вытащить информацию, но я предполагаю, что это можно сделать более изящно, чем парсить вывод cmd.exe.
El Sanchez
15-08-2011, 13:30
Gugle, добавил MAC в этот код, еще и ошибку исправил:
[Code]
type
IP_ADDR_INFO = array of record
Description: String;
IPv4: String;
IPv6: String;
MAC: String;
end;
function GetLocalIP(var IPAddrInfo: IP_ADDR_INFO): Boolean;
var
objSWbemLocator, objSWbemServices, objSWbemObjectSet, objRegExp, objRegExpMatches: Variant;
IndexCount, i: Byte;
strBuf, ptrnIPv4, ptrnIPv6: String;
begin
try
objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
objRegExp := CreateOleObject('VBScript.RegExp');
except
ShowExceptionMessage;
Exit;
end;
ptrnIPv4 := '(\d{1,3}[.]){3}\d{1,3}'; //IPv4 regexp
ptrnIPv6 := //IPv6 regexp
'(([0-9a-fA-F]{1,4}:){1,1}(:[0-9a-fA-F]{1,4}){1,6})|(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5})|' +
'(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4})|//(([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3})|' +
'(([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2})|(([0-9a-fA-F]{1,4}:){1,6}(:[0-9a-fA-F]{1,4}){1,1})|' +
'((([0-9a-fA-F]{1,4}:){1,7}|:):)|(:(:[0-9a-fA-F]{1,4}){1,7})|(((([0-9a-fA-F]{1,4}:){6})(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))|' +
'((([0-9a-fA-F]{1,4}:){5}[0-9a-fA-F]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))|' +
'(([0-9a-fA-F]{1,4}:){5}:[0-9a-fA-F]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
'(([0-9a-fA-F]{1,4}:){1,1}(:[0-9a-fA-F]{1,4}){1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
'(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,3}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
'(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,2}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})';
objSWbemServices := objSWbemLocator.ConnectServer();
objSWbemServices.Security_.ImpersonationLevel := 3;
IndexCount := objSWbemServices.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration').Count;
objSWbemObjectSet := objSWbemServices.ExecQuery('SELECT Description,IPAddress,MACAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE');
for i := 1 to IndexCount do
try
SetArrayLength(IPAddrInfo, GetArrayLength(IPAddrInfo)+1);
strBuf := objSWbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(i)).GetObjectText_;
IPAddrInfo[GetArrayLength(IPAddrInfo)-1].Description := objSWbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(i)).Properties_.Item('Description').Value;
objRegExp.Pattern := ptrnIPv4;
if objRegExp.Test(strBuf) then
begin
objRegExpMatches := objRegExp.Execute(strBuf);
IPAddrInfo[GetArrayLength(IPAddrInfo)-1].IPv4 := objRegExpMatches.Item[0].Value;
end;
objRegExp.Pattern := ptrnIPv6;
if objRegExp.Test(strBuf) then
begin
objRegExpMatches := objRegExp.Execute(strBuf);
IPAddrInfo[GetArrayLength(IPAddrInfo)-1].IPv6 := objRegExpMatches.Item[0].Value;
end;
IPAddrInfo[GetArrayLength(IPAddrInfo)-1].MAC := objSWbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(i)).Properties_.Item('MACAddress').Value;
except
GetExceptionMessage;
SetArrayLength(IPAddrInfo, GetArrayLength(IPAddrInfo)-1);
end;
Result := (GetArrayLength(IPAddrInfo) > 0);
end;
procedure InitializeWizard();
var
i: Byte;
arr: IP_ADDR_INFO;
begin
if GetLocalIP(arr) then for i := 0 to GetArrayLength(arr)-1 do
MsgBox(
'Description: ' + arr[i].Description + #13#10 +
'IPv4: ' + arr[i].IPv4 + #13#10 +
'IPv6: ' + arr[i].IPv6 + #13#10 +
'MAC: ' + arr[i].MAC, mbInformation, MB_OK);
end;
El Sanchez, спасибо. Пошел разбиться со скриптом.
Появились вопросы:
1. На строке:
strBuf := objSWbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(i)).GetObjectText_;
Вываливается с ошибкой:
SWbemObjectSet: Не найден.
2. Где и/или как можно посмотреть весь список столбцов ... (что такое ту мы используем?) для формирования своего запроса типа:
objSWbemObjectSet := objSWbemServices.ExecQuery('SELECT Description,IPAddress,MACAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE');
Все понятно откуда это! Пояснять не надо. )))
3. А можно еще и DeviceID вытащить?
Начал поиск, но если знаешь название в скрипте, то напиши плз. Я пока очень медленно в этом разбираюсь.
El Sanchez, отката не происходит, ибо выводится сообщение что уже запущен один вариант установки из-за AppMutex нужно сделать исключение для деинсталлятора, чтобы можно было запустить setup.exe один раз, но чтобы можно было вместе запускать setup.exe/unins000.exe
insombia, не так уж и сложно сделать такой инстал, есть примеры даже, просто переделывай под себя)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.