PDA

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


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

SatHan
30-09-2012, 08:15
R.i.m.s.k.y., Johny777, Спасибо.
R.i.m.s.k.y., ничево себе сколько кода :o. хотелось как лучше а получилось как всегда :sorry:.
ладно я тада сам попробую что нибудь скумекать.

R.i.m.s.k.y.
30-09-2012, 08:23
SatHan, CTRL+C CTRL+V

SatHan
30-09-2012, 08:44
CTRL+C CTRL+V »Спасибо. я имел введу не копировать вставить. наоборот сам код упростить и уменьшить.

сделать тоже самое
[Files]
Source: ISTask.dll; DestDir: {app}; Flags: dontcopy

[#Code]
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

function InitializeSetup(): Boolean;
begin
If RunTask('notepad.exe', false) then
begin
MsgBox('блокнот запущен. пожалуйста закройте блокнот и запустите установку заново.', mbInformation, MB_OK);
Exit;
end;
Result:=True;
end;но без использования ISTask.dll.

R.i.m.s.k.y.
30-09-2012, 08:47
сделать тоже самое
но без использования ISTask.dll. »
а) делается тоже самое
б) без использования ISTask.dll
шонитаг?
А ты думал одной строчкой все сделать хорошо?

Nasedkin Nikita
30-09-2012, 10:20
панель нужна?
взято отсюда то что в первом посте.
в вложении прикрутил. »

Спасибо, помогло. А картинки в инстал через botva2 ставить?

Mailchik
30-09-2012, 11:56
SatHan, поменьше, от El Sanchez'а вроде:[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
function IsProcessRunning(FileName: String): Boolean;
var
objSWbemLocator, objSWbemServices: Variant;
begin
try
objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
except
ShowExceptionMessage;
Exit;
end;
objSWbemServices := objSWbemLocator.ConnectServer();
objSWbemServices.Security_.ImpersonationLevel := 3;
Result := (objSWbemServices.ExecQuery('SELECT * FROM Win32_Process WHERE Name="' + FileName + '"').Count > 0);
end;

procedure InitializeWizard();
begin
if IsProcessRunning('notepad.exe') then
MsgBox('yes', mbInformation, MB_OK)
else
MsgBox('no', mbError, MB_OK);
end;

R.i.m.s.k.y.
30-09-2012, 12:00
Mailchik SatHan, пример хороший только как пример работы с WMI
На затвиканных вендах и говносборках этот вариант не работает тк в них убит наглухо WMI. Ошибка SwbemLocator: not found. Плавали, знаем

SatHan
30-09-2012, 14:14
Mailchik, Спасибо.
много чего уж перепробовал, но оставил этот (http://forum.oszone.net/post-1996880-1081.html), так как код короче всех. потому шансов на ошибки мизерный.

R.i.m.s.k.y.
30-09-2012, 14:24
SatHan
код короче всех. потому шансов на ошибки мизерный. »
бред. »
+1024
C использованием IsTask можно нарваться на параноидальный антивирь который блокирует вызов сторонних неизвестных неподписанных библиотек и dll (IsTask в их числе, ога), как следствие получить в инсталлере "Ошибка вызова xxx.dll" и краш инсталлера.
Самый рабочий вариант в моем посте. Не помню кто его мне накидал, или Serega или El Sanchez

R.i.m.s.k.y.
30-09-2012, 14:32
тк подумал что пусть он делает что хочет »
дадад, главное потом на руторе не скачать ;)

SatHan
30-09-2012, 14:55
C использованием IsTask можно нарваться на параноидальный антивирь который блокирует »мне друг так и сказал. чтоб я избавился от любых длл-ок которые обращаются к процессу. ещё он совет дал чтоб я очень не навешивал инсталятор всякими картинками так как часто происходят проблемы при антивирусных программах. в частности касается антивируса касперского. говорит что касперский привередлевее остальных и может случится что касперский запретит инициализацию инсталятора не говоря о левых исполнениях.

посоветовал собрать на этом коде
[#code]
Function InitializeSetup: Boolean;
var
res : integer;
begin
Result := True;
Exec('ping.exe ', ' 2ip.ru ', ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilTerminated, res);
if res = 0 then begin
MsgBox('Найдено подключение к интернету. Установка будет прекращена!', mbInformation, MB_OK);
Result := False;
end;
end;
говорит можно но помогать не будет. хочет чтоб я сам разобрал и посоветовал мне внимательно справку почитать.

SARATOVSKY
30-09-2012, 19:29
Johny777, Да не надо, сделал уже по-другому!

R.i.m.s.k.y.
30-09-2012, 19:33
в частности касается антивируса касперского. говорит что касперский привередлевее остальных и может случится что касперский запретит инициализацию инсталятора не говоря о левых исполнениях. »
Ты еще Comodo File Antivirus не щупал, этот кусок гадости не дает почту принять, не пускает к дисковым шарам и блокирует реестр одмину.
хочет чтоб я сам разобрал и посоветовал мне внимательно справку почитать. »
читай, да, чтение справки еще никого не убило :read:

SARATOVSKY
01-10-2012, 02:18
И последний (я надеюсь) вопрос! У меня есть много файлов которые извлекаются в папку {tmp}, естественно они имеют размер и когда на странице выбора компонентов сняты все галочки с компонетов (устанавливать нечего), то ComponentsDiskSpaceLabel выдаёт размер временных файлов, так как мне обнулить это, когда невыбран ни один компонент?

Gnom_aka_Lexander
01-10-2012, 08:20
SARATOVSKY, не распаковывать эти файлы из секции [Files]. Тоесть, убрать с этих файлов Destdir : {tmp};, оставив Flags : dontcopy; Это нормальное явление, даже зубры программирования допускают эту ошибку. Единственное - нужно не забыть распковать эти файлы в коде, с помощью ExtractTemporaryFile, перед использованием. И неплохо удалять их после использования самостоятельно, с помощью DeleteFile поштучно, либо с помощью DelTree(ExpandConstant('{tmp}', True, True, True); всю временную папку инсталятора целиком на выходе, поскольку я начал замечать за инсталлом на инно косяк с неудалением временной папки время от времени.

R.i.m.s.k.y.
01-10-2012, 09:01
SARATOVSKY, Gnom_aka_Lexander,
Есть антибаг: к строчке с Check вычисление места не применяется
[Files]
Source: ..\SVP.Distr\ffdshow\; DestDir: {tmp}; Check: (True_function);

[CODE]
function True_function(): Boolean;
begin
Result := True;
end;

Gnom_aka_Lexander
01-10-2012, 09:07
R.i.m.s.k.y., неправильное решение в данном случае. файлы которые нужны инсталлу - они нужны ему сразу. Destdir : {tmp}; - распаковывает их на этапе установки, однако, поскольку они уже распакованы, поскольку инсталл-то работает, ведь? то это действие уже в корне неверно, и писалось об этом неоднократно, и люди тупо продолжают совершать эту ошибку.

R.i.m.s.k.y.
01-10-2012, 09:12
Gnom_aka_Lexander, Не понял последовательности твоих мыслей и в чем ошибка.
Речь шла о том чтобы место не подсчитывалось для определенного файла, если файл нужен раньше секции Files - тогда да флаг dontcopy + ExtractTemporaryFile.
И в CurStep=ssDone дежурный DelTree(ExpandConstant('{tmp}', True, True, True);

Gnom_aka_Lexander
01-10-2012, 09:16
R.i.m.s.k.y., может, конечно, зря я включил свою телепатию, но почемуто кажется мне, что не зря. файлы, которые нужны ему в темпе - файлы оформления инсталла, просто исходя из предидущих вопросов заключаю (да-да, телепатия - не более, чем логика) и нужны они сразу, посему - никаких DestDir : {tmp};, строго flags : dontcopy плюс ExtractTemporaryFile.
P.S. и да, сочетание DestDir : {tmp}; flags : dontcopy я видел у людей очень авторитетных, из чего могу заключить, что это можно не считать постыдной ошибкой для новичка :teeth:
P.P.S.И в CurStep=ssDone дежурный DelTree(ExpandConstant('{tmp}', True, True, True); »
а что делать, если выход из инсталла был произведен до ssDone ? наверное нужно еще и в DeinitializeSetup добавить такую строчку?

SARATOVSKY
01-10-2012, 11:34
Теперь всё, :) всем спасибо!




© OSzone.net 2001-2012