Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: Evil_User
Дата сообщения: 29.07.2008 18:27
Народ, подскажите пжлста, как сделать, что бы инсталятор при установке программы поверял установлена она или нет. И в случае положительного результата, предлагал удалить или обновить.
Наверняка это уже затрагивалось, но не могу найти.
Автор: ComradG
Дата сообщения: 29.07.2008 21:14

Цитата:
("и я не в танке!!!!!")

Увы, но как раз наоборот. В самой винде даже при отсутсвии определенного скина можно рисовать умопомрачительные интерфейсы как для инсталлеров, так для приложений. Если ты не сталкивался с С++, наверное, с моей стороны это будет литьем воды и рассказывать тебе че к чему, так что хочешь подробностей пиши в личку. Отвечу. Тем более, что уже в сентябре-октябре я выложу свою программку написанную для инно - очень смахивает на визуальную среду разработки с базой данных. Но так как мне все наотрез отказались (исключая Dobrov и Kindly) помогать, то... сам понимаешь.

Добавлено:

Цитата:
И в случае положительного результата, предлагал удалить или обновить.


function InitializeSetup(): Boolean;
var
ResultCode: Integer;
ResultStr:string;
begin
Result:=True;
begin
If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My program_is1', 'UninstallString', ResultStr)
then
begin
If ResultStr<>''
then
begin
ResultStr:=RemoveQuotes(ResultStr);
if MsgBox('Setup has detected that this program is already installed.' #13#13 'Would you like to uninstall the existing copy before continuing?', mbConfirmation, MB_YESNO) = idYes
then
if not Exec(ResultStr, '/silent', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
then
MsgBox('Uninstall Error. ' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Probably, uninstall files was moved, removed or renamed.', mbError, MB_OK);
end;
end;
end;
end;
Автор: QIPIC
Дата сообщения: 29.07.2008 22:55
braunberg
СПС что ткнул носом, а не через реестр мона сделать както?(спортивный интерес)
Автор: ComradG
Дата сообщения: 29.07.2008 23:04
А смысл?

Добавлено:
Не, я конечно могу подкинуть идею дрюкать параметры коммандной строки или, скажем, написать код относительно сигнатуры файлов проги, но смысла не нахожу.
Автор: Genri
Дата сообщения: 29.07.2008 23:44
Artem_Butenko

Цитата:
О каких ресурсах ОС (которые можно использовать в качестве скина для Inno) Вы говорите?
-- забудь. Просто очередной бред от человека, который плохо знает инно и плохо разбирается в программировании, но считает себя крутым програмером и крутым, ну очень крутым хакером.
Конечно, это мое имхо. Но оно имеет под собой вполне реальные основания. А переубедить меня очень просто - достаточно выложить в общий доступ хоть что-то из этих хваленых реализаций для инно.
Автор: Victor_Dobrov
Дата сообщения: 30.07.2008 01:25
ComradG
Цитата:
уже в сентябре-октябре я выложу свою программку написанную для инно - очень смахивает на визуальную среду разработки с базой данных.

ComradG - Какого года? 2020-го? Обещаниями можете разбрасываться в парламенте, а здесь это не проходит. Кроме того, вы явно не знакомы с правилами форума, так как большинство ваших сообщений не информативны и адресуются неизвестно кому.
Автор: ExpeditorR
Дата сообщения: 30.07.2008 09:39
Бывает так, что либо при максимальной компрессии инсталлятора или множестве файлов больших размеров извлекаемых во временную папку, процесс старта инсталлятора сильно затягивается, а на экране ничего не происходит и пользователь начинает пугаться, что всё зависло или ещё что, и чтобы этого избежать я написал пару крохотных ехе программ: одна показывает прогресс-бар(17кб.), а другая закрывает первую(14кб.). Может оно и нафиг никому ненадо, а можт кому и пригодится, вобщем скачать можно по ссылке. http://narod.ru/disk/1739174000/prog.rar.html


ComradG

Цитата:
Но так как мне все наотрез отказались (исключая Dobrov и Kindly) помогать, то....

О какой ещё помощи идёт речь, примеров скриптов итак выше крыши, работай не хочу. И вообще странно читать возвание о помощи от крутого программера на Цэ пилюс пилюс, который сперва всех облил грязью едва появившись на форуме, а потом еще почти в каждом посте хамски общается. И вообще сперва показывают свои достижения, а потом выёживаются, а не наоборот. Эх, тщеславие не даёт тебе покоя, уж оч. тебе хочется быть VIP персоной, гы
Автор: SotM
Дата сообщения: 30.07.2008 10:57
ExpeditorR

Цитата:
Бывает так, что либо при максимальной компрессии инсталлятора или множестве файлов больших размеров извлекаемых во временную папку, процесс сильно затягивается а на экране ничего не происходит и пользователь начинает пугаться

Как-то подобный вопрос проскакивал в newsgroup'ах: http://www.jrsoftware.org/newsgroups.php
Можешь поискать там если интересно.
Автор: braunberg
Дата сообщения: 30.07.2008 11:55
SotM
Подобный вопрос проскакивал не раз и на этой ветке, развернутый ответ на него можно здесь получить, если этого не достаточно то можно набрать в поиске ключевое слово - solidbreak.
ExpeditorR, если возникнет ситуация когда ничто не помогает, - обязательно воспользуюсь твоей прогой, - спасибо!
Автор: ExpeditorR
Дата сообщения: 30.07.2008 11:55
SotM
Да, я вобщем-то только хотел выложить те программульки на которые выше я дал ссылку, может кому пригодится, кто хочет отображать прогресс-бар во время инициализации инсталлятора.
Автор: VikLabel
Дата сообщения: 30.07.2008 12:04
Artem_Butenko
Для редактирования и создания msstyles смотри (ищи) StyleBuilder, может это то что тебе надо! Если оно могу скинуть.
Автор: Artem_Butenko
Дата сообщения: 30.07.2008 13:12
Здравствуйте товарищи. Огромное Вам VikLabel спасибо (за информацию о данной утилите). С подобной утилитой, только для скинирования msi-инсталляций я работал ранее ("SkinBuilder"). Если Вам не сложно и позволяет интернет-соединение, поделитесь предлагаемой Вами программой.
Автор: Sampron
Дата сообщения: 30.07.2008 13:38
Artem_Butenko
Скачай с оффсайта ToolkitPro http://www.codejock.com/downloads/ в нём есть SkinBuilder.
Автор: QIPIC
Дата сообщения: 30.07.2008 13:39
ExpeditorR
а можно посмотреть как ты используеш эти проги в скрипте?
Автор: VikLabel
Дата сообщения: 30.07.2008 14:12
Artem_Butenko
Сейчас скинуть не могу, только завтра.
Посмотрел, оказывается и здесь есть
Если там ^ не разберешься пиши в ПМ.
Автор: Genri
Дата сообщения: 30.07.2008 15:23
ExpeditorR

Цитата:
я написал пару крохотных ехе программ: одна показывает прогресс-бар(17кб.), а другая закрывает первую(14кб.)
-- по поводу "нафиг не надо" - это ты погорячился Иногда проще запустить внешний файл, чем прописывать весь интерфейс в коде.
Есть ли возможность увидеть исходники? Хотелось бы иметь возможность менять надпись или переделать на один ехешник, который для закрытия можно повторно запустить с параметром. ИМХО общий размер будет еще меньше. Самому написать близкий по размеру - знаний не хватает
Автор: Evil_User
Дата сообщения: 30.07.2008 15:54
ComradG
Спасибо.
Автор: ExpeditorR
Дата сообщения: 30.07.2008 16:20
Genri
Ок, все подробности по поводу моих программулин + исходники, смотри в личных сообщениях, либо сегодня ближе к вечеру, либо завтра.
Автор: Diawer
Дата сообщения: 30.07.2008 16:37
Есть вариант, как сменить иконку в левом-верхнем углу деисталлятора используя *.ico файл, подскажите как использовать иконку из *.exe находящийся в папке с программой или игрой
[Files-]
Source: icon.ico; DestDir: {app}; Flags: ignoreversion

[Code-]
procedure InitializeUninstallProgressForm();
begin
SendMessage(UninstallProgressForm.Handle, $0080, 1, LoadImage(0,ExpandConstant('{app}')+'\icon.ico',1,16,16,$1010));
end;


Добавлено:
Есть вопрос по теме из Коллекция скриптов - SelectAndCopyKey.iss подправил [more=его] под себя но не получается, что бы выбранный файл копировался в {app} с замещением (переписать) уже существующегося (которй копируется в числе общих)

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

[Tasks]
Name: askini; Description: Укажите расположение ключа; GroupDescription: Configuration:

[Code]
var
Page: TInputFileWizardPage;

procedure InitializeWizard();
begin
Page := CreateInputFilePage(wpSelectTasks,
'Select Key File Location', 'Where is Key located?',
'Select where Key is located, then click Next.');

Page.Add('Select Key File', // caption
'Key Files (*.reg)|*.reg|All Files|*.*', // filters
'.reg'); // default extension

end;

function NextButtonClick(CurPage: Integer): Boolean;
begin
Result:= True;
if CurPage = Page.ID then
begin
if FileExists(Page.Values[0]) then
begin
ForceDirectories('C:\123\');
Result:= FileCopy(Page.Values[0], 'C:\123\'+ ExtractFileName(Page.Values[0]), False);
end
else Result:= False;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = Page.ID) and Not IsTaskSelected('askini') then
Result:= True;
end;
[/more]
Автор: abasov
Дата сообщения: 30.07.2008 21:22

Код: If FindWindowbyWindowName(Copy(SetupMessage(msgSetupWindowTitle), 1, Length(SetupMessage(msgSetupWindowTitle))-2) + '{#SetupSetting("AppName")}') > 0
then begin
MsgBox('Мастер установки данной программы "{#MyAppName}" уже запущено' #13#13 +
'Перейдите к установке используя сочетание клавиш Alt+Tab', mbInformation, MB_OK)
Автор: htuos
Дата сообщения: 30.07.2008 21:23
ExpeditorR
интересное решение, но разве такой прогрессбар нельзя в инно нарисовать?
Автор: ComradG
Дата сообщения: 30.07.2008 21:37
Victor_Dobrov

Цитата:
Какого года? 2020-го?

Не ерничай. У меня основная работа хоть и связана с программингом, но это одно. Совсем другое поднимать большой проект в одну харю. Причем по времени приходится все писать ночью. Так что если это тебя не устраивает, то могу вообще прекратить разработку.
ExpeditorR
Философствуй в другом месте.
Автор: Genri
Дата сообщения: 30.07.2008 21:40
htuos

Цитата:
разве такой прогрессбар нельзя в инно нарисовать?
-- разумеется можно. Но писанины уж очень много. Дело даже не в самом интерфейсе, а в алгоритме. Чтоб отрисовывать изменение прогрессбара, инсталлятор должен периодически прерывать выполняемое действие. А это в инно не предусмотрено. Поэтому приходится использовать либо таймер, либо хук. Таймер это опять-таки дополнительный файл (так как инно напрямую не поддерживает обратный вызов); а ставить хук - это уже приличный кусок кода.
Так что в некоторых случаях, такое решение выглядит более предпочтительным с точки зрения трудозатрат (по одному событию запустил, по другому выгрузил)
Автор: htuos
Дата сообщения: 30.07.2008 22:05
Genri
возможно я ошибаюсь, но вот это

Цитата:
Чтоб отрисовывать изменение прогрессбара, инсталлятор должен периодически прерывать выполняемое действие. А это в инно не предусмотрено. Поэтому приходится использовать либо таймер, либо хук. Таймер это опять-таки дополнительный файл (так как инно напрямую не поддерживает обратный вызов); а ставить хук - это уже приличный кусок кода.

помоему в данном случае не нужно. достаточно создать форму, положить на нее прогрессбар и запустить его (отправить ему SendMessage). если бы можно было подключать диалоги, то вообще строк в 30 кода уложилось бы. будет время попробую как-нибудь.

PS хотя, если рисовать в инно, то в этом случае все равно нужен будет innocallback.dll (т.е. сторонний файл), так что лучше вариант ExpeditorR реализовать в dll с 2-мя процедурками - показать/убрать прогрессбар. естественно показ сделать с параметрами
Автор: Genri
Дата сообщения: 30.07.2008 22:52
htuos

Цитата:
достаточно создать форму, положить на нее прогрессбар и запустить его (отправить ему SendMessage).
-- я не совсем понял - SendMessage отправить прогрессбару? Или самой форме? Хм, для открытия формы SendMessage как-бы и не нужен. А прогрессбар по идее должен стартовать при открытии формы. И так как речь идет о создании прогрессбара в инно, то тут опять упираемся в вопрос визуализации (без внешнего файла практически никак).
Так что вариант ExpeditorR-а имхо вполне жизнеспособен. А переделать на длл - оно конечно удобней. Но надо смотреть на размер файла.
Автор: KurtWagner
Дата сообщения: 31.07.2008 00:38
Помогите плиз!!! У меня 3-ри вопроса как при деинстализации высвечивать список удаляемых файлов 1? = http://kurtwagner.wen.ru/Kak.jpg 2?= как поменять цвет сдесь http://kurtwagner.wen.ru/Kak2.jpg и последний вопрос 3?= http://kurtwagner.wen.ru/Kak3.jpg как заставить не высвечивать ощибку сходства а просто пропустить!!! ЗАРАНЕЕ СПАСИБО...

Добавлено:
+ еще 1-ин как сделать чтоб было как и в Inno Setup Quickstartpack 5.2.2 пример...
вообщем как сделать такую загрузку с иНЕТа... заранее спасибо!!! http://kurtwagner.wen.ru/Kak4.jpg
Автор: Victor_Dobrov
Дата сообщения: 31.07.2008 04:01
ExpeditorR, Genri, htuos - прогрессбар, который не прерывает выполнение скрипта, проще реализовать через mciSendString.

Вот полный комплект (скрипт с авишкой, всего 6 Кб), а вот только [more=пример кода]
[Setup]
AppName=WaitProgress
AppVerName=WaitProgress
CreateAppDir=false
OutputDir=.

[Files]
Source: Waiting.avi; DestDir: {tmp}; DestName: WaitProgress.avi; Flags: dontcopy

[Code]
type
    TagMonitorInfo = record cbSize: DWord; Monitor, Work: TRect; dwFlags: DWord; end;
var
    WaitForm: TForm; n: Integer; MonitorInfo: TagMonitorInfo;
const
    AviFrameWidth=272; AviFrameHeight=60; FormLeft=100; FormTop=100;

function GetMonitorInfo(hMonitor: Integer; var lpMonitorInfo: TagMonitorInfo): Boolean; external 'GetMonitorInfoA@user32';
function mciSendString(lpstrCommand, lpstrReturnString: PChar; uReturnLength, hWndCallback: Integer): Integer; external 'mciSendStringA@winmm stdcall delayload';

Function InitializeSetup: Boolean;
Begin
    ExtractTemporaryFile('WaitProgress.avi')
    MonitorInfo.cbSize:= SizeOf(MonitorInfo); GetMonitorInfo(1, MonitorInfo)
WaitForm:= TForm.Create(nil);
    WaitForm.ClientWidth:= AviFrameWidth; WaitForm.ClientHeight:= 60
    WaitForm.Left:= trunc((MonitorInfo.Work.Right - WaitForm.Width)/100* FormLeft)
    WaitForm.Top:= trunc((MonitorInfo.Work.Bottom - WaitForm.Height)/100 * FormTop)
    WaitForm.Caption:= 'Please wait...';
    WaitForm.Show
mciSendString('open '+ ExpandConstant('{tmp}\WaitProgress.avi') +' type AVIVideo alias Background parent '+ IntToStr(WaitForm.Handle) +' style child','',0,0)
    mciSendString('put Background window at 0 0 '+ IntToStr(WaitForm.ClientWidth) +' '+ IntToStr(WaitForm.ClientHeight),'',0,0)
    mciSendString('play Background repeat','',0,0)    { проигрывание анимации не останавливает выполнение скрипта}
for n:= 1 to 4 do begin    { цикл дан для примера, вставьте здесь свой код}
    Sleep(2000)
    WaitForm.Caption:= 'Extracting file '+IntToStr(n);
end;
    mciSendString('Close Background','',0,0)
    WaitForm.Free;
    Result:= true;
End;
[/more] (для которого необходим AVI-файл)
Автор: Genri
Дата сообщения: 31.07.2008 09:25
Victor_Dobrov

Цитата:
прогрессбар, который не прерывает выполнение скрипта
-- так в этом-то и проблема. Инно однопоточный. Поэтому либо обязательно прерывать, либо форма с прогрессбаром в отдельном приложении (потоке). Разницу видно при попытке перемещения окна.
Автор: AlexandP
Дата сообщения: 31.07.2008 09:54
Ребята, приветствую. Подскажите плиз.. Установил эту программу, для перекидывания игрушки (с жесткого диска) на двухсторонний диск, т.е. она 8,6Гб и мне нужно ее разбить на 2 ДВД диска(никаких изменений ни где не нужно делать, она запускается без всяких записей реестра). С разделением впринцыпе разобрался кое-как, но... Есть ли реальная возможность увеличить размер создаваемого файла более 2-х гигов? Ну никак не хочет, а кусками никак не "попаду" в размер ДВД... Где-то здесь проскакивал у кого-то код, где было указано discSlice(?)=7 с лишним гигов, но при попутке установить более 2,1 выдается какое-то сообщение, что типа вроде в настройках что-то нужно разрешать..
Видел ранее сообщение, что это невозможно, но может это в предыдущих версиях? Кстати, скачал и установил версию 5.2.0, может надо было последнюю?

Пробовал и смартинсталл, но она вылетает при запуске готового инсталлятора с ошибкой ("...не является приложением Win32"), короче не делает нормально.

п.с. понакачал всяких вкусностей (огромное спасибо всем, кто трудился над этим!) типа корона чего-то, квик старт и т.п... но никакой красоты не произошло, эти фишки меняют интерфейс программы или это просто какие-то дополнения и программа так и остается как была(всмысле для реальных програмистов )? Нет ли дополнений, которые "визуализируют" все действия типа того же визарда, только по-подробнее? Ну или для сравнения тот же смартинсталл...

п.с.2 Забыл спросить.. А где подсмотреть, какие ключи реестра нужно дописывать или переписывать при установке игры если захочется сделать инсталлятор "по-взрослому" (может пример? или всегда по-разному?), или не стОит забивать голову? Просто природная упертость гонит меня вперед.. установил программу на один раз, а теперь пытаюсь лезть вглубь...


Спасибо.
Автор: SotM
Дата сообщения: 31.07.2008 10:10
AlexandP
Ограничение стоит в 2 гига, с этим ничего не поделаешь.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

Предыдущая тема: Презентация


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.