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

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

Автор: Kindly
Дата сообщения: 28.09.2008 19:13
Genri
Цитата:
ExtractFilePath - подозреваю, это то, что тебе надо.
Спасибо! Самое оно.
Автор: putes
Дата сообщения: 29.09.2008 09:12
найдутся ли умельцы, кто сделает инсталляционный пакет для автоматической установке и удаления данного драйвера?
_http://www.antistarforce.com/forum/6-1610-1

Автор: Genri
Дата сообщения: 29.09.2008 20:53
putes -- [more]
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DirExistsWarning=no
DefaultDirName={pf}\My Program

[Files]
Source: Files\FStarForce.sys; DestDir: "{tmp}";
Source: Files\dev000.inf; DestDir: "{tmp}";
Source: Files\devcon.exe; DestDir: "{app}";

[Run]
Filename: "{app}\devcon.exe"; Parameters: "-r install {tmp}\dev000.inf 0"; Flags: runhidden waituntilterminated

[UninstallRun]
Filename: "{app}\devcon.exe"; Parameters: " remove 0"; Flags: runhidden waituntilterminated
[/more]
devcon.exe найдешь в инете
Автор: putes
Дата сообщения: 29.09.2008 21:49
Genri
благодарствую
всё работает
Автор: An4eus
Дата сообщения: 29.09.2008 21:59
Народ, хотел ещё кое-что спросить!

Код: ;setup
AppVerName=Прога № {code:ReturnAppVer}
;code
function ReturnAppVer(param : String): String;
var
st : TStringlist;
begin
st:=TStringlist.create;
st.loadfromfile('d:\Release\ver.id');
Result := st.strings[0];

end;
Автор: SotM
Дата сообщения: 30.09.2008 10:35
An4eus
Посмотри в хелпе раздел Константы (Constants).
Автор: An4eus
Дата сообщения: 30.09.2008 11:17
SotM
так там есть, откуда приложение запускается, куда устанавливается и тд.
а мне нужно откуда скрипт запускается, т.к. файл ver.id в установке не нужен
Автор: Genri
Дата сообщения: 30.09.2008 11:48
An4eus

Цитата:
мне нужно откуда скрипт запускается, т.к. файл ver.id в установке не нужен
-- в том примере, который ты привел, при каждом запуске инсталлятора на компе пользователя, будет осуществлятся поиск ver.id. И если файл не найден, будет ошибка.
Для примера можешь скомпилить у себя екзешник, потом удалить файл ver.id и попробовать запустить инсталляцию.
Не совсем понятно, какого эффекта ты хочешь добиться.
Автор: An4eus
Дата сообщения: 30.09.2008 12:24
Genri
хочу сделать неизменяемый скрипт...
прога постоянно меняется => меняется версия её
для этого в секции setup и написал AppVerName=Прога № {code:ReturnAppVer}
Автор: SotM
Дата сообщения: 30.09.2008 13:14

Цитата:
для этого в секции setup и написал AppVerName=Прога № {code:ReturnAppVer}

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

Автор: An4eus
Дата сообщения: 30.09.2008 13:31
SotM
код нужно отдать.. кому отдам - ни в чём не шарит!
вообще я понял, нужно ver.id поместить в setup, но распаковывать из temp'a...
Как это тогда релазизовать?

можно ли в секции setup для OutputDir сделать переменную папку (в зависимости от ver.id)?
Автор: Genri
Дата сообщения: 30.09.2008 13:45
An4eus -- что из себя представляет ver.id ? Приведи пример содержимого. Можно ли поменять формат содержимого файла ver.id ?
Автор: An4eus
Дата сообщения: 30.09.2008 14:28
Genri
текстовый файл:

Код: 23.1/1.2367
Автор: Genri
Дата сообщения: 30.09.2008 19:14
An4eus -- Судя по тому, что ты не ответил на вопрос можно или нет поменять содержимое файла ver.id, будем считать что нельзя. Так же, судя по приведенному тобой примеру скрипта, будем считать, что версией является вся строка - 23.1/1.2367, а не ее часть. Так как путь должен быть относительным по отношению к файлу скрипта, но где именно (относительно файла скрипта) находится файл ver.id не указано, будем предполагать, что файл ver.id находится рядом с файлом скрипта.
С учетом вышеизложенных предположений, реализовать требуемую задачу, можно примерно [more=таким образом]
Код:
[Setup]
#define FileHandle
#define FileLine

#sub ProcessFileLine
#expr FileLine = FileRead(FileHandle)
AppVerName=Прога № {#FileLine}
OutputDir=.\{#FileLine}
#endsub

#for {FileHandle = FileOpen(".\ver.id"); FileHandle && !FileEof(FileHandle); FileLine = FileRead(FileHandle)} ProcessFileLine
#if FileHandle
#expr FileClose(FileHandle)
#endif

AppName=My Program
DirExistsWarning=no
DefaultDirName={pf}\My Program
Автор: LOGANXFI
Дата сообщения: 30.09.2008 20:49
Привет всем !

Ребята подскажите пожалуйста как добавить в скрипт такие функции:

Мне нужно чтобы инсталятор можно было использовать один раз , при попытке повторного использовании инсталятор выдавал сообщение "1111111111111" и закрывал инсталятор.

А лучше всего такую функцию - после окончания установки приложения , инсталятор и все файлы .bin принадлежащие инсталятору автоматически удалялись с винчестера напрочь.


Вот сам скрипт.


Код: [Setup]
AppId={{F56C23C4-B56E-45A3-9ED2-145060A2E545}
AppName=InfinityWards
AppVerName=Call of Duty 4 Multiplayer Pack
AppPublisher=InfinityWards, Inc.
AppPublisherURL=http://callofduty.tomsk.ru
AppSupportURL=http://callofduty.tomsk.ru
AppUpdatesURL=http://callofduty.tomsk.ru
DefaultDirName={reg:HKLM\Software\Activision\Call of Duty 4,InstallPath}
DisableDirPage=yes
DefaultGroupName=Call of Duty 4 Pack
DisableProgramGroupPage=yes
LicenseFile=C:\Documents and Settings\licence.txt
InfoBeforeFile=C:\Documents and Settings\info.txt
InfoAfterFile=C:\Documents and Settings\info after.txt
OutputDir=G:\COD4
OutputBaseFilename=Setup_COD4Pack
SetupIconFile=E:\GAMES\COD4 Mod Tools\cod4.ico
Compression=lzma
SolidCompression=yes
DiskSpanning=yes
SlicesPerDisk=1
DiskSliceSize=1728760320

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: "G:\COD4\*"; DestDir: {app}; AfterInstall: ExtLog; Flags: recursesubdirs

[Messages]
BeveledLabel=http://callofduty.tomsk.ru

[Icons]
Name: "{group}\{cm:UninstallProgram,Call of Duty 4 Pack}"; Filename: "{uninstallexe}"

[Code]
var
ResultStr:string;
ResultCode: Integer;

function InitializeSetup(): Boolean;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{F56C23C4-B56E-45A3-9ED2-145060A2E545}_is1', 'UninstallString', ResultStr)
if ResultStr='' then
begin
Result := True;
end
else
ResultStr:=RemoveQuotes(ResultStr);
Exec(ResultStr, '', '', SW_SHOWNORMAL, ewNoWait, ResultCode)
end;

var
ProgressLabel: TLabel;

procedure ExtLog();
begin
WizardForm.FileNameLabel.Visible:= False;
with WizardForm.ProgressGauge do begin
ProgressLabel.Caption:= IntToStr((Position-Min)/((Max - Min)/100)) + '%';
end;
end;

procedure InitializeWizard;
begin
ProgressLabel := TLabel.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressLabel.Top:= Top + Height + ScaleY(8)
ProgressLabel.Left:= Left + Width/2 - ScaleX(8)
ProgressLabel.Caption:= '0%'
ProgressLabel.AutoSize:= True
ProgressLabel.Transparent:= True;
ProgressLabel.Parent:= WizardForm.InstallingPage
end;
end;
Автор: LinkX
Дата сообщения: 30.09.2008 21:17
Как можно убрать окно с сообщением (когда произведена деинсталляция, но не все файлы удалились) "Деинсталляция %1 завершена.%n%nЧасть элементов не удалось удалить. Вы можете удалить их самостоятельно.". Если это возможно, очень надо.
Автор: An4eus
Дата сообщения: 30.09.2008 22:06
Genri
спасмбо.. помогло..
Но папку такого вида 23.1/1.2367 нельзя создать, т.к. / - нельзя использвать в имени!
как сделать замену "/" и "." на "" ?
Автор: serg_aka_lain
Дата сообщения: 30.09.2008 22:43
LOGANXFI

Цитата:
А лучше всего такую функцию - после окончания установки приложения , инсталятор и все файлы .bin принадлежащие инсталятору автоматически удалялись с винчестера напрочь.

Интесесная задачка, может так [more=Код]

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
DelTree(ExpandConstant('{src}\*.bin'), False, True, False);
end;
end;

[/more]
А вот "Setup.exe" как удалить?, может через перезагрузку., т.к. инсталлятор сам себя стереть не сможет.

Или вот [more=пример]

[Setup]
AppName=Proga
AppVerName=Proga v 1.0
DefaultDirName={pf32}\Proga
OutputDir=.
DiskSpanning=True


[Code]


procedure CurStepChanged(CurStep: TSetupStep);
var
ErrorCode: Integer;
begin
if CurStep = ssDone then
begin
SaveStringToFile(ExpandConstant('{src}\delete.bat'), 'del /q setup-1.bin' #13#10, True);
SaveStringToFile(ExpandConstant('{src}\delete.bat'), 'del /q setup.exe' #13#10, True);
SaveStringToFile(ExpandConstant('{src}\delete.bat'), 'del /q delete.bat' #13#10, True);
Exec(ExpandConstant('{src}\delete.bat'), '', '', SW_HIDE, ewNoWait, ErrorCode);
end;
end;

[/more] с батником, должно сработать.

Автор: Genri
Дата сообщения: 01.10.2008 00:04
An4eus

Цитата:
Но папку такого вида 23.1/1.2367 нельзя создать, т.к. / - нельзя использвать в имени!
-- а это для тебя новость? Я почему-то решил что ты это знаешь и создание вложенной папки подразумевается само собой. А замену символов реализовать можно. Только хлопотное это дело. Я бы оставил так как есть. Но если есть желание, почитай в хелпе раздел препроцессора.

LOGANXFI

Цитата:
после окончания установки приложения , инсталятор и все файлы .bin принадлежащие инсталятору автоматически удалялись с винчестера напрочь.
-- а смысл? Ну скопирую я на винт инсталлятор, запущу его, он по окончании сам себя удалит.... А при необходимости, я его еще раз скопирую и опять запущу А если буду запускать с компакт-диска, то удаление в принципе не возможно. Я уже не раз говорил - защиту должна обеспечивать сама программа, а не ее инсталлятор.
Автор: An4eus
Дата сообщения: 01.10.2008 00:49
Genri
я так понимаю, что код приведенный выше мне написан почти на си!
как вообще кодируется в препроцессах? можно пример несложного алгоритма?
Автор: GRom V
Дата сообщения: 01.10.2008 03:54

Цитата:
LOGANXFI

Если ты хочешь использавать инсталлятор в качестве защиты - можно привязать его например к серийнику винта, или сделать запуск до конкретной даты....
Автор: SergeyLS
Дата сообщения: 01.10.2008 07:36
ComradG

Цитата:
Мое долгое молчание обусловлено тем, что я поднимаю ща свой ftp, куда и выложу программы для прямого скачивания. Прошу прощения за задержку.

А такие программы вообще возможны?
[more]
Меня всегда учили, что после компиляции на языках высокого уровня в получившемся резутльтирующем коде настолько мало от исходного синтаксиса, что возможно только примерное дезасемблирование, но невозможно восстановить из дезасемблированного кода исходный текст высокого уровня. Ведь разными путями разные програмисты могут получать похожий код после компиляции, если логика программы - одинаковая.
Восстановление алгоритма программы, при хорошем знании ассемблера, вполне возможно, но затраты времени на такое восстановление будут гораздо больше, чем на написание своей собственной программы.
Но если я ошибаюсь, то вы можете написать мне на diego_ag<здесь сами знаете, что>mail.ru и я с удовольствием прочитаю ваши доводы и дам вам доступ на свой личный фтп сервер.
[/more]

All
А возможно ли средствами Inno Setup при инсталляции проверить существование в папке назначения программы, наличие вложеной папки и существование в ней нескольких файлов с индексированным расширением (.*00, .*01 и т.д.)
И в случае если папка с подкталогом и файлами существуют, создать дополнительный подкаталог и положить в него файлы с расширениями которые продолжат эту последовательность (.*02, .*03 и т.д.)?
Нечто подобное было реализовано в тоссерах эхо процессоров для сети фидонет (Например: Сквиш, Фаст-ехо), но исходники этих программ наверное уже не достать за давностью, да и не все они были открытыми.
Я конечно немного понимаю объектный паскаль, но не на столько хорошо, чтобы самому разобраться в данной задаче!
Автор: Genri
Дата сообщения: 01.10.2008 09:34
An4eus

Цитата:
код приведенный выше мне написан почти на си
-- хм, не прослеживаю параллелей В двух словах - команды препроцессора выполняются в момент компиляции. А подробнее - читай в хелпе раздел Inno Setup Preprocessor и смотри пример из состава инсталляции инно (ISPPExample1.iss)

SergeyLS

Цитата:
создать дополнительный подкаталог и положить в него файлы с расширениями которые продолжат эту последовательность
-- если не ошибаюсь, что-то подобное ты уже спрашивал. Попробуй использовать алгоритмы из того примера.
ЗЫ. а по поводу первой части твоего поста: -"Попытка конвертировать исполняемый код в исходник, напоминает попытку конвертировать гамбургер в корову"
Автор: SotM
Дата сообщения: 01.10.2008 10:00

Цитата:
напоминает попытку конвертировать гамбургер в корову"

Хоть это и оффтопик, но это напомнило мне: "купи три беляша и собери собаку"...
Риторический вопрос: и почему людей всегда тянет декомпилировать чьи-то программы и еще чтоб код был удобочитаем...
Автор: LinkX
Дата сообщения: 01.10.2008 11:04

Цитата:
Как можно убрать окно с сообщением (когда произведена деинсталляция, но не все файлы удалились) "Деинсталляция %1 завершена.%n%nЧасть элементов не удалось удалить. Вы можете удалить их самостоятельно.". Если это возможно, очень надо.


Если это не реально сделать, то скажите.
Автор: An4eus
Дата сообщения: 01.10.2008 11:15
Genri
ну а вид цикла это не си?
Код: for(...;...;...) {...}
Автор: Genri
Дата сообщения: 01.10.2008 12:15
An4eus
for(...;...;...) {...} - это си
for(...;...;...) {...} - это Perl
for(...;...;...) {...} - это PHP
for{...;...;...} (...) - а вот это препроцессор
Автор: An4eus
Дата сообщения: 01.10.2008 12:26
Genri
ха... неточно напсал, а perl и PHP сразу же откинул!
кстати, я так и не понял какую книжку-то скачать?
P.s. я правильно понимаю, что без процессора это не сделать?
Автор: Genri
Дата сообщения: 01.10.2008 14:35
An4eus -- без процессора не сделать (без препроцессора тоже)
Что скачать - я не знаю (каких-то книжек по этой теме не встречал). А по поводу почитать хелп и посмотреть пример - я уже говорил.
Автор: ReeV
Дата сообщения: 01.10.2008 15:58
Всем привет.. хелп плиз.. к примеру у меня уже есть старый билд - но я вот решил "сверху" поставить новый но мне нужно что бы тот каталог где установлен старый билд.. перед началом установки затерся( если я подтвердил инсталяцияю нового билда...) как мне очистить папку в которую я буду устанавливать..???

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

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


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