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

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

Автор: SergeyLS
Дата сообщения: 01.10.2008 17:22
Genri

Цитата:
SergeyLS

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

Мм не совсем, там все клалось в одну папку, а тут должно в разные, причем в старом примере файлы назывались одинаково, а тут название может быть разным, да и расширение тоже разное, а нужно чтобы последовательность не прерывалась, а самое главное, мне заранее не известны имена и раширения файлов, которые ко мне придут, известна только папка где они появятся и папка куда они должны попасть, а разложиться они должны по разным поддиректориям.
Короче раскрою секрет, мне дистанционно кладут рецепты блюд, а мне нужно добавлять их в базу данных для этого нужно, чтобы создавались папки с именем блюда, а раширение должно продолжить последенее из имеющихся, тоесть если было dat, то должено быть d00, а если было уже и d00, то следущее, а в базе они потом сами объединятся в main.dbf и все лишнее удаляется, но это нужно проделать на нескольких компах.
Ничего пока не могу придумать.


Цитата:
Genri
ЗЫ. а по поводу первой части твоего поста: -"Попытка конвертировать исполняемый код в исходник, напоминает попытку конвертировать гамбургер в корову"

А насчет бифштекса и коровы это здорово! Как-раз в тему, так-как я немножечко повар.
Автор: ComradG
Дата сообщения: 01.10.2008 19:58
Если вы, товарищ, про универ (место обучения или где вас обучали), то ваши познания среднего уровня, если конечно вы не прогаете по несколько дней к ряду. Логику понять поэтому вашу можно. Но Inno Setup вовсе не язык программрования, а всего лишь его имитаия в худшем значении этого слова, поэтому здесь не о дизассамблировании речь, а псевдо бинарике, который получается на выходе при компиляции имитируещего языка. При этом по сути инсталляторы Inno ничто иное как криптованные SFX-архивы, со своей специфической структурой. Если вам мои доводы показались неубедительны, то пишите в ООН, а если просто не раскрыты, то укажите что именно, может сойдемся, попрограем вместе, а то идей много, а помощи ждать неоткуда.

Добавлено:

Цитата:
А такие программы вообще возможны?

Автор: SergeyLS
Дата сообщения: 02.10.2008 07:07
ComradG

Цитата:
Если вы, товарищ, про универ (место обучения или где вас обучали), то ваши познания среднего уровня, если конечно вы не прогаете по несколько дней к ряду.

Я не прогаю по несколько дней к ряду, я ведь уже писал выше, что я повар.
А програмированию я учился в М.И.Р.Е.А, но закончил всего два курса, ито этобыло давно (1984г.), когда и ПС - еще не было.


Цитата:

Логику понять поэтому вашу можно. Но Inno Setup вовсе не язык программрования, а всего лишь его имитаия в худшем значении этого слова, поэтому здесь не о дизассамблировании речь, а псевдо бинарике, который получается на выходе при компиляции имитируещего языка. При этом по сути инсталляторы Inno ничто иное как криптованные SFX-архивы, со своей специфической структурой. Если вам мои доводы показались неубедительны, то пишите в ООН, а если просто не раскрыты, то укажите что именно, может сойдемся, попрограем вместе, а то идей много, а помощи ждать неоткуда.


Насчет того, является ли Inno Setup языком программирования или нет, я судить не могу, так-как моих познаний для этого не достаточно, но отличить Паскаль от С++ - я в состоянии. А посильную помощь ввиде личного ФТП - я вам уже предлагал, но вместо того, чтобы написать мне по e-mail'у вы почемуто решили написать сюда, хотя я мог и не заглянуть в конференцию еще несколько дней.

Мне кажется, что конференция вообще - не место для личной переписки
Так-что я завязываю с флудом.
Автор: nOobCrafter
Дата сообщения: 02.10.2008 16:58
Господа такая трабла, в инсталяторе непашет анинстал((
При запуске "unins000.exe" выдает - Runtime error (at 45:64): Could not call proc. С чем это может быть связано?.. Или в какой секции могут быть косяги, вот то что у меня в секции сетупа


Код: function InitializeUninstall(): Boolean;
begin
If RunTask('builder.exe', false) then
    begin
if MsgBox('123 '#13#13' 123?'#13#13 +
'"Да" - 133' #13#13 +
'"Нет" - 123, mbError, mb_YesNo) = idYes then
        begin
KillTask('builder.exe');
KillTask('Browser.exe');
KillTask('asod.exe');
KillTask('SetAccess.exe');
Result := True;
        end else
            Exit;
    end;
Result := True;

If RunTask('Browser.exe', false) then
begin
if MsgBox('123 '#13#13' 123?'#13#13 +
'"Да" - 133' #13#13 +
'"Нет" - 123, mbError, mb_YesNo) = idYes then
begin
KillTask('builder.exe');
KillTask('Browser.exe');
KillTask('asod.exe');
KillTask('SetAccess.exe');
Result := True;
    end else
            Exit;
    end;

If RunTask('Asod.exe', false) then
begin
if MsgBox('123 '#13#13' 123?'#13#13 +
'"Да" - 133' #13#13 +
'"Нет" - 123, mbError, mb_YesNo) = idYes then
begin
KillTask('builder.exe');
KillTask('Browser.exe');
KillTask('asod.exe');
KillTask('SetAccess.exe');
Result := True;
end else
            Exit;
    end;

If RunTask('SetAccess.exe', false) then
begin
if MsgBox('123 '#13#13' 123?'#13#13 +
'"Да" - 133' #13#13 +
'"Нет" - 123, mbError, mb_YesNo) = idYes then
begin
KillTask('builder.exe');
KillTask('Browser.exe');
KillTask('asod.exe');
KillTask('SetAccess.exe');
Result := True;
end else
            Exit;
    end;    
end;
Автор: ComradG
Дата сообщения: 02.10.2008 21:55

Цитата:
Так-что я завязываю с флудом.

Если флудом называется интересная многим тема распаковки, то я курю бамбук. А относительно ftp чего-то я его я не обнаружил. Ну а если никого не интересует проганье в чистом виде с послеюющей инсталляцией Инно, думаю мне вообще пора вернуться к фрилансу.
Автор: Ph9M2
Дата сообщения: 02.10.2008 22:26
ComradG

Так выкладывай свои программы. Уже сколько время всё обещаниями кормишь...
Автор: nOobCrafter
Дата сообщения: 03.10.2008 09:21
Господа такая трабла, в инсталяторе непашет анинстал((
При запуске "unins000.exe" выдает - Runtime error (at 45:64): Could not call proc. С чем это может быть связано?.. Или в какой секции могут быть косяги, вот то что у меня в секции сетупа


Код: function InitializeUninstall(): Boolean;
begin
If RunTask('builder.exe', false) then
    begin
if MsgBox('123 '#13#13' 123?'#13#13 +
'"Да" - 133' #13#13 +
'"Нет" - 123, mbError, mb_YesNo) = idYes then
        begin
KillTask('builder.exe');
KillTask('Browser.exe');
KillTask('asod.exe');
KillTask('SetAccess.exe');
Result := True;
        end else
            Exit;
    end;
Result := True;

If RunTask('Browser.exe', false) then
begin
if MsgBox('123 '#13#13' 123?'#13#13 +
'"Да" - 133' #13#13 +
'"Нет" - 123, mbError, mb_YesNo) = idYes then
begin
KillTask('builder.exe');
KillTask('Browser.exe');
KillTask('asod.exe');
KillTask('SetAccess.exe');
Result := True;
    end else
            Exit;
    end;

If RunTask('Asod.exe', false) then
begin
if MsgBox('123 '#13#13' 123?'#13#13 +
'"Да" - 133' #13#13 +
'"Нет" - 123, mbError, mb_YesNo) = idYes then
begin
KillTask('builder.exe');
KillTask('Browser.exe');
KillTask('asod.exe');
KillTask('SetAccess.exe');
Result := True;
end else
            Exit;
    end;

If RunTask('SetAccess.exe', false) then
begin
if MsgBox('123 '#13#13' 123?'#13#13 +
'"Да" - 133' #13#13 +
'"Нет" - 123, mbError, mb_YesNo) = idYes then
begin
KillTask('builder.exe');
KillTask('Browser.exe');
KillTask('asod.exe');
KillTask('SetAccess.exe');
Result := True;
end else
            Exit;
    end;    
end;
Автор: SergeyLS
Дата сообщения: 03.10.2008 10:08
ComradG

Цитата:
Цитата:Так-что я завязываю с флудом.

Если флудом называется интересная многим тема распаковки, то я курю бамбук. А относительно ftp чего-то я его я не обнаружил. Ну а если никого не интересует проганье в чистом виде с послеюющей инсталляцией Инно, думаю мне вообще пора вернуться к фрилансу.

Дык я у себя в почте - не нашел твоего запроса на получение адреса фтп.
Может я не ясно свое мыло написал? diego_ag<тут поставить известно-что>mail.ru
А насчет флуда, я имею ввиду мои бесполезные сообщения, это уже точно - последнее.
P.S.
В письме нужно указать желаемое имя пользователя, на английском языке, пароль вышлю вам ответным письмом.
Автор: SotM
Дата сообщения: 03.10.2008 10:45
nOobCrafter
Всё ты можешь отредактировать свои сообщения, удали второе сообщение (просто очисти весь текст)!
Автор: Genri
Дата сообщения: 03.10.2008 12:08
nOobCrafter

Цитата:
Вот изз этого куска происходит ошибка
-- не совсем так. Проблема возникает из-за некорректного определения функций RunTask и KillTask. К сожалению, эту часть ты не привел. Подозреваю, что в момент деинсталляции, ISTask.dll по указанному пути отсутствует
Автор: Sig666
Дата сообщения: 03.10.2008 14:01
Я нашел тут скрипт, загружающий изображение определенного размера в зависимости от разрешения экрана. http://forum.ru-board.com/topic.cgi?forum=5&topic=23235&start=606&limit=1&m=1#1
Как достичь, чтобы проверялось соотношение сторон - стандартное или широкоформатное, и в зависимости от этого грузить нужную картинку?
Автор: SergeyLS
Дата сообщения: 03.10.2008 14:42
nOobCrafter

Цитата:
Господа такая трабла, в инсталяторе непашет анинстал((
При запуске "unins000.exe" выдает - Runtime error (at 45:64): Could not call proc. С чем это может быть связано?.. Или в какой секции могут быть косяги, вот то что у меня в секции сетупа

Попробуй так:
[more]
[Files]
Source: {src}\ISTask.dll; DestDir: {app}; Flags: ignoreversion // Где {src} папка где лежит ISTask.dll


Код:
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload setuponly';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload setuponly';

function KillTaskU(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

function RunTaskU(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';

// здессь то, что у тебя при установке
----------------------------------------------------

// а здесь то, что у тебя при деинсталляции

function InitializeUninstall(): Boolean;
begin
If RunTaskU('builder.exe', false) then
begin
if MsgBox('123 '#13#13' 123?'#13#13 +
'"Да" - 133' #13#13 +
'"Нет" - 123, mbError, mb_YesNo) = idYes then
begin
KillTaskU('builder.exe');
KillTaskU('Browser.exe');
KillTaskU('asod.exe');
KillTaskU('SetAccess.exe');
Result := True;
end else
Exit;
end;
Result := True;

If RunTaskU('Browser.exe', false) then
begin
if MsgBox('123 '#13#13' 123?'#13#13 +
'"Да" - 133' #13#13 +
'"Нет" - 123, mbError, mb_YesNo) = idYes then
begin
KillTaskU('builder.exe');
KillTaskU('Browser.exe');
KillTaskU('asod.exe');
KillTaskU('SetAccess.exe');
Result := True;
end else
Exit;
end;

If RunTaskU('Asod.exe', false) then
begin
if MsgBox('123 '#13#13' 123?'#13#13 +
'"Да" - 133' #13#13 +
'"Нет" - 123, mbError, mb_YesNo) = idYes then
begin
KillTaskU('builder.exe');
KillTaskU('Browser.exe');
KillTaskU('asod.exe');
KillTaskU('SetAccess.exe');
Result := True;
end else
Exit;
end;

If RunTaskU('SetAccess.exe', false) then
begin
if MsgBox('123 '#13#13' 123?'#13#13 +
'"Да" - 133' #13#13 +
'"Нет" - 123, mbError, mb_YesNo) = idYes then
begin
KillTaskU('builder.exe');
KillTaskU('Browser.exe');
KillTaskU('asod.exe');
KillTaskU('SetAccess.exe');
Result := True;
end else
Exit;
end;
end;
Автор: Genri
Дата сообщения: 03.10.2008 14:47
SergeyLS
If RunTaskA('builder.exe', false) then ... - исправь


Добавлено:
и почему не так:

Код:
If RunTaskU('Browser.exe', false) or
RunTaskU('builder.exe', false) or
RunTaskU('Asod.exe', false) or
RunTaskU('SetAccess.exe', false) then
begin
if MsgBox('123 '#13#13' 123?'#13#13 +
'"Да" - 133' #13#13 +
'"Нет" - 123, mbError, mb_YesNo) = idYes then
begin
KillTaskU('builder.exe');
KillTaskU('Browser.exe');
KillTaskU('asod.exe');
KillTaskU('SetAccess.exe');
Result := True;
end else
Exit;
end;
Автор: nOobCrafter
Дата сообщения: 03.10.2008 15:21

Код: Source: ISTask.dll; DestDir: {app}; Flags: dontcopy
Автор: SergeyLS
Дата сообщения: 03.10.2008 15:21
Genri

Цитата:
SergeyLS
If RunTaskA('builder.exe', false) then ... - исправь

Исправил.

Цитата:

Добавлено:
и почему не так:

Код:
If RunTaskU('Browser.exe', false) or
RunTaskU('builder.exe', false) or
RunTaskU('Asod.exe', false) or
RunTaskU('SetAccess.exe', false) then
begin
if MsgBox('123 '#13#13' 123?'#13#13 +
'"Да" - 133' #13#13 +
'"Нет" - 123, mbError, mb_YesNo) = idYes then
begin
KillTaskU('builder.exe');
KillTaskU('Browser.exe');
KillTaskU('asod.exe');
KillTaskU('SetAccess.exe');
Result := True;
end else
Exit;
end;

Да так будет лучше и короче, просто в торопях не подумал

Добавлено:
nOobCrafter

Цитата:
Так он у меня добавляется в инстал. Опять же мне казалось что елси донткопи то в инстле он есть и скрипт запоминается. ? О_о Или надо что бы этот файл лежал вместе в деинсталятором?

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

Цитата:
RunTaskU('Browser.exe', false) - а что здесь играет U или А? О_о

А ничего, просто для того, чтобы различались то, что для инсталяции, а что для деинсталляции. Главное чтобы в одинаковых секциях - одинаково было. А в разных - отличалось и вот это важно: setuponly и uninstallonly.
Но все-равно Genri лучше предложил, я ведь не програмист, а повар!



Автор: nOobCrafter
Дата сообщения: 03.10.2008 15:46
Угу, спс за инфу, я тогда вобще молчу кто я))
Ксатити вспомнил чиво у меня так много кода, просто на каждый запущенный процесс ругается по своей табличке, а не одна на всех. Отсюда и стока "лишних" букавак
Автор: Genri
Дата сообщения: 03.10.2008 16:05
SergeyLS

Цитата:
Думаю, что нужно, чтобы он лежал там откуда запускается деинсталлятор.
-- не совсем так. Файл должен лежать там, где указано в определении. Например, если указано:
function RunTaskA(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
... то при вызове функции RunTaskA, деинсталлятор будет искать {app}\ISTask.dll
ЗЫ. А ты в ПМ заглядываешь?
Автор: nOobCrafter
Дата сообщения: 03.10.2008 16:27
Переделал на:


Код: function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload setuponly';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload setuponly';

function KillTaskA(ExeFileName: string): Integer;
external 'KillTask@C:\123\ISTask.dll stdcall delayload uninstallonly';

function RunTaskA(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@C:\123t\ISTask.dll stdcall delayload uninstallonly';
Автор: Genri
Дата сообщения: 03.10.2008 16:33
nOobCrafter

Цитата:
'RunTask@C:\123t\ISTask.dll
-- это ошибка или в коде так и есть?


Добавлено:

Цитата:
C:\123\USTask.dll
-- это ошибка или в коде так и есть?
Автор: nOobCrafter
Дата сообщения: 03.10.2008 17:05
Все ошибки, в коде все ок
Автор: Genri
Дата сообщения: 03.10.2008 17:08
[more]
Код: [no]
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[Files]
Source: ISTask.dll; DestDir: {app}

[Code]
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload setuponly';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload setuponly';

function KillTaskU(ExeFileName: string): Integer;
external 'KillTask@{tmp}\ISTask.dll stdcall delayload uninstallonly';

function RunTaskU(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{tmp}\ISTask.dll stdcall delayload uninstallonly';

function InitializeSetup: Boolean;
begin
Result := True;
if RunTask('calc.exe', false) then
begin
if MsgBox('123 '#13#13' 123?'#13#13 +
'"Да" - 133' #13#13 +
'"Нет" - 123', mbError, mb_YesNo) = idYes then
begin
KillTask('calc.exe');
end
else
Result := False;
end;
end;

function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\ISTask.dll'), ExpandConstant('{tmp}\ISTask.dll'), False);
Result := True;
if RunTaskU('calc.exe', false) then
begin
if MsgBox('123 '#13#13' 123?'#13#13 +
'"Да" - 133' #13#13 +
'"Нет" - 123', mbError, mb_YesNo) = idYes then
begin
KillTaskU('calc.exe');
end
else
Result := False;
end;
end;
[/no]
Автор: SergeyLS
Дата сообщения: 03.10.2008 17:51
nOobCrafter
Такие штуки на системном диске, меня несколько шокируют:

Цитата:
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
DelTree(ExpandConstant('C:\123'), True, True, True);
end;

Хотел дать совет, как можно обойтись без этого, да не успел.
Genri
Уже дал!

Добавлено:
Genri

Цитата:

Думаю, что нужно, чтобы он лежал там откуда запускается деинсталлятор.
-- не совсем так. Файл должен лежать там, где указано в определении. Например, если указано:
function RunTaskA(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
... то при вызове функции RunTaskA, деинсталлятор будет искать {app}\ISTask.dll
ЗЫ. А ты в ПМ заглядываешь?


Просто наверно немного неправильно выразился, конечно туда где указано.
А в ПМ иногда заглядываю. Просто сейчас бегаю от компа к духовому шкафу и назад.
Вот косяки иногда и выходят.
Автор: LinkX
Дата сообщения: 03.10.2008 21:07
Как можно убрать окно с сообщением (когда произведена деинсталляция, но не все файлы удалились) "Деинсталляция %1 завершена.%n%nЧасть элементов не удалось удалить. Вы можете удалить их самостоятельно.".
Автор: Forslay
Дата сообщения: 04.10.2008 12:57
Можно ведь использовать выбор удаления файлов при деинсталляции...
Автор: Artem_Butenko
Дата сообщения: 04.10.2008 16:42
Ребята, помоему я задавал подобный вопрос, но только конкретному человеку, теперь пытаюсь вынести его на всеобщее рассмотрение. Наверное все замечали, что текстуры кнопок (при применении любого варианта скинирования) обновляются с одинаковой скоростью, а можно ли в паскаль скрипте "обозначить" скорость обновления текстур кнопок инсталлятора? Понимаю, пользы от этого мало, но зато красиво!
Автор: Kindly
Дата сообщения: 05.10.2008 11:37
А как в Inno можно сделать так, чтобы в панели задач не было меню по щелчку правой кнопки мыши, а также при щелчке левой кнопки мыши инсталлятор не сворачивался?
Автор: Medissn
Дата сообщения: 05.10.2008 22:35
Inno Setup 5.2.2 [Русская версия] (Версия перевода от 31.12.2007)
http://medissn.narod.ru/files/isetup-5.2.2-ru.exe
Автор: Artem_Butenko
Дата сообщения: 05.10.2008 23:17
Товарищи, извините меня за столь стремительную генерацию вопросов, просто я все еще не познал до конца Inno Setup. Пожалуйста, напомните, как задается цвет страниц и компонентов страницы в Inno Setup. И еще хотелось бы вернуться к теме озвучивания действий инсталлятора. В вопросах создания .dll у меня мало опыта, но м.б. есть готовое решение (т.е. сторонняя .dll) позволяющее организовать озвучивание действий инсталлятора (особенно те, которые невозможно организовать через код, например, клик по кнопкам диалогового окна).
Автор: boss911
Дата сообщения: 06.10.2008 04:43

Код: [Run]
Filename: {app}\Prog1.exe; Flags: waituntilterminated skipifsilent
Filename: {app}\Prog2.exe; Flags: postinstall skipifsilent nowait
Filename: {app}\Prog3.exe; Flags: postinstall skipifsilent nowait
Автор: nOobCrafter
Дата сообщения: 06.10.2008 09:16
SergeyLS


Цитата:
Такие штуки на системном диске, меня несколько шокируют:

Цитата:procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
DelTree(ExpandConstant('C:\123'), True, True, True);
end;


Хотел дать совет, как можно обойтись без этого, да не успел.
Genri
Уже дал!


Ммм... А можно посмотреть ответ?...А то я то то немного непонял альтернативы?..
Или обьсню ситуацию, программа может работать только из определенной папки, при переносее ее в другую папку она просто небудет пахать (программно заданы конкретные пути к файлам внутри самой проги), поэтому имеет смысл удалять именно эту папку, ибо при обычно анинстале, удаляются елси неошиаюсь лишь те файлы которые были в оригинальной установке, все логи\журналы созраня.тся, в данном случае, при удалении проги оставлять что либо ненадо, для этого есть функция бэкапа.

Genri

Код: begin
KillTaskU('calc.exe');
end
else
Result := False;
end;

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

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


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