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

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

Автор: Sampron
Дата сообщения: 19.12.2007 22:12
GnomS
Добавь в секции Files флаг dontcopy или deleteafterinstall
Автор: Victor_Dobrov
Дата сообщения: 20.12.2007 00:15
Chuvakstepan, в InnoSetup Upgrade тоже есть расширенный деинсталлятор.
Автор: GnomS
Дата сообщения: 20.12.2007 01:25
Все. Нашел. Извините за беспокойство.
Автор: WWWLOM
Дата сообщения: 20.12.2007 07:34
привет всем, подскажите что делать: сделал к игре инстолятор, а когда через пуск хочу удалить свою игру, пишет вот такую ошибку:

Формат файла "D:\Games\Farcry\unins000.dat" не поддерживается этой версией деинстолятора.
Деинстоляция не может быть произведена.
Автор: maxdddca123
Дата сообщения: 20.12.2007 11:45
Такой вопрос: а можно ли средствами инно узнать так называемый Device ID компа ? Типа уникальный идентификационный номер ПК.
Автор: geranik
Дата сообщения: 20.12.2007 12:09
maxdddca123

Думаю можно из реестра, нашел productID в
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
Это номер в свойствах системы.
Конкретно Device ID у меня нет.
Автор: maxdddca123
Дата сообщения: 20.12.2007 12:17
geranik
Супер, а тогда не подскажете как можно сделать генерацию серийника по одному из значений реестра, которые вы привели. Для защиты инсталлятора - типа пользователь говорит мне ИД, а я ему код ответа, который он вводит и установка продолжается дальше.

Добавлено:
geranik
Хотя не супер Посмотрел ключи на разных машинах - они совпадают. Видимо винды одинаковые... Так что не потянет на уникальный идентификатор компа к сожалению Может ещё что ?

Добавлено:
Правда если гора не идёт к Магомеду.... А подскажите как сделать тогда самому серийник: например по маске ХХХХ-ХХХХ-ХХХХ-ХХХХ что бы были букыв и цифры латинского алфавите, но случайные. Во

Добавлено:
И нужно, что бы из этого серийника по какому то алгоритму генерировался второй серийник, который будет вводиться пользователем как ключ активации. Ну сейчас многие герераторы серийников так работают, но я к сожаления алгоритм не знаю. Кто нибудь знает как это можно реализовать в инно ?
Автор: vserd
Дата сообщения: 20.12.2007 13:47
maxdddca123

Цитата:
И нужно, что бы из этого серийника по какому то алгоритму генерировался второй серийник, который будет вводиться пользователем как ключ активации. Ну сейчас многие герераторы серийников так работают, но я к сожаления алгоритм не знаю. Кто нибудь знает как это можно реализовать в инно ?

Ну так определись с алгоритмом, а потом его закодировать не проблема. Какие бывают алгоритмы ищи на крякерских сайтах с образовательными статьями. www.google.com приличный, посмотри там.
Автор: maxdddca123
Дата сообщения: 20.12.2007 14:04
vserd
Читать можно до бесконечности, просто наверняка есть уже готовые варианты для инно. Или хотя бы может кто знает какая ф-ция в инно генерирует случайный символ (аналог RND)
Автор: kpblc
Дата сообщения: 20.12.2007 14:48
Доброго всем, уважаемые!
Подскажите решение проблемы - у меня после установки должен быть запущен сторонний exe-шник, и, пока он не будет завершен, окно InnoSetup'a надо блокировать. Сейчас пробую в секции [Run] использовать флаг waituntilidle. Полное ощущение, что флаг не срабатывает - inno запускает ехе и тут же уходит на следующую (финальную) страницу (попутно перехватывая фокус на себя). Каким образом можно это предотвратить? Спасибо.
---
Добавлено: Parameters: {app} либо пропущенный ситуацию не меняет.
---
Добавлено 2: все, проблему решил. thnx. Что значит документацию почитать
Автор: maxdddca123
Дата сообщения: 20.12.2007 16:33
А кто то сталкивался с функцией скачивания файлов из инета:
[_ISToolDownload]
Source: http://ya.ru; DestDir: {pf}; DestName: logo.gif
Code]
// Function generated by ISTool.
function NextButtonClick(CurPage: Integer): Boolean;
begin
    Result := istool_download(CurPage);
end;

Хотелось бы разобраться как она работает и настроить её под себя. Например сейчас после скачивания файла инсталлятор сразу переходит на след страницу, а хотелось бы что бы для этого надо было нажать Далее. Может кто нить помочь ?
Или например как сделать возможность продолжить установку если запрашиваемый файл недоступен ? Как написать свои диалоговые тексты в данном случае - типа Данный файл в настоящее время недоступен - Продолжить установку ?
Автор: Unc1e
Дата сообщения: 20.12.2007 20:12
Всем привет. Возник такой вопрос: как сделать так, чтобы PageNameLabel и PageDescriptionLabel не перекрывали WizardSmallBitmapImage растянутую на всю MainPanel? И еще: как менять WizardSmallBitmapImage на каждой странице (т.е. на wpLicense одна WizardSmallBitmapImage, на wpPassword - другая, и т.д.)? Надеюсь на вашу помощь! Заранее СПАСИБО.
Автор: serg_aka_lain
Дата сообщения: 20.12.2007 21:16
Unc1e

procedure InitializeWizard();
begin
WizardForm.PageNameLabel.Visible:= False; {или Hide}
WizardForm.PageDescriptionLabel.Visible:= False;
end;

А чтоб скозь картинку текст этих переменных (PageNameLabel, PageDescriptionLabel) транспарентить нужно создать новые переменные
PageNameLabel, PageDescriptionLabel : TLabel;


Цитата:
как менять WizardSmallBitmapImage на каждой странице (т.е. на wpLicense одна WizardSmallBitmapImage, на wpPassword - другая, и т.д.)? Надеюсь на вашу помощь! Заранее СПАСИБО.

- для каждой страницы через использование CurPageChanged
Автор: maxdddca123
Дата сообщения: 21.12.2007 15:44
А кто знает как можно узнать серийник ХДД ?
Автор: Alex Zaguzin
Дата сообщения: 21.12.2007 18:32
maxdddca123 - яснее, пожайлуста. Твой пост ни о чём неговорит.
Автор: Angel_Smerti
Дата сообщения: 21.12.2007 23:21
Люди подскажите, пожалуйста, я нашел скрипт [more=для сохранения строки в host и ее резервное копирование]
[Code]
//О сохранении бэкапа пользователя уведомлять не будем
//Создаем резервную копию в начале установки
procedure CurPageChanged(CurPageID: Integer);
var
//определяемые строки для сохранения резервных файлов
s1, s2:string;
begin
If CurPageID=wpInstalling then
begin
s1:=ExpandConstant('{sys}')+'\drivers\etc\host';
s2:=ExpandConstant('{sys}')+'\drivers\etc\Backup_Host_File';
If FileExists(s1)
then
begin
CreateDir(s2);
FileCopy(s1, s2+'\host', True);
end;
end;
end;
//Если программа устанавливается повторно, и был зарезервирован файл 'host', то перезапись файла в резервной папке не осуществится

//Дописываем строку в 'host' на завершающем этапе установки
procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall
then
begin
//Строка будет дописываться под последней существующей
SaveStringToFile(ExpandConstant('{sys}')+'\drivers\etc\host', #13 + 'требуемая строка', True);
end;
end;

//Деинсталляция. В процессе удаления происходит восстановление требуемого файла и полное удаление резервной папки
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
s1, s2, s3:string;
begin
case CurUninstallStep of
usPostUninstall:
begin
s1:=ExpandConstant('{sys}')+'\drivers\etc\Backup_Host_File\host';
s2:=ExpandConstant('{sys}')+'\drivers\etc';
If FileExists(s1)
then
begin
FileCopy(s1, s2+'\host', False);
begin
s3:=ExpandConstant('{sys}')+'\drivers\etc\Backup_Host_File';
If DirExists(s3)
then
begin
//Очень опасная функция! Удаляет беспощадно файлы в указанной папке вместе с папкой!!!
DelTree(ExpandConstant('{sys}')+'\drivers\etc\Backup_Host_File', True, True, True);
end;
end;
end;
end;
end;
end;
[/more].
Попробовал исправить на свои значения для бэкапа папок, [more=вот что из этого получилось]
[Code]
//О сохранении бэкапа пользователя уведомлять не будем
//Создаем резервную копию в начале установки
procedure CurPageChanged(CurPageID: Integer);
var
//определяемые строки для сохранения резервных файлов
s1, s2:string;
begin
If CurPageID=wpInstalling then
begin
s1:=ExpandConstant('{userdocs}')+'\EA Games\The Sims 2';
s2:=ExpandConstant('{userdocs}')+'\EA Games\The Sims 2_old';
If FileExists(s1)
then
begin
CreateDir(s2);
FileCopy(s1, s2+'\The Sims 2', True);
end;
end;
end;
//Если программа устанавливается повторно, и был зарезервирован файл 'host', то перезапись файла в резервной папке не осуществится

//Дописываем строку в 'host' на завершающем этапе установки
procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall
then
begin
//Строка будет дописываться под последней существующей
SaveStringToFile(ExpandConstant('{userdocs}')+'\EA Games\The Sims 2', #13 + 'требуемая строка', True);
end;
end;

//Деинсталляция. В процессе удаления происходит восстановление требуемого файла и полное удаление резервной папки
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
s1, s2, s3:string;
begin
case CurUninstallStep of
usPostUninstall:
begin
s1:=ExpandConstant('{userdocs}')+'\EA Games\The Sims 2_old';
s2:=ExpandConstant('{userdocs}')+'\EA Games';
If FileExists(s1)
then
begin
FileCopy(s1, s2+'\The Sims 2', False);
begin
s3:=ExpandConstant('{userdocs}')+'\EA Games\The Sims 2_old';
If DirExists(s3)
then
begin
//Очень опасная функция! Удаляет беспощадно файлы в указанной папке вместе с папкой!!!
DelTree(ExpandConstant('{userdocs}')+'\EA Games\The Sims 2_old
', True, True, True);
end;
end;
end;
end;
end;
end;
[/more].
Где {userdocs}\EA Games\The Sims 2_old - это должно быть бэкап папки с сохранениями от игры в Моих Документах, а {userdocs}\EA Games\The Sims 2 - это сама папка с сохранениями. Значения то в скипте я поменял, но при запуске инсталлятора не происходит резервного копирования папки The Sims 2. Подскажите, где я ошибся, и вообще можно ли переделать этот скрипт под мои цели (мне нужно, чтобы при запуске инсталлятора он проверил, присутствует ли в Моих Документах эти папки \EA Games\The Sims 2 и если они присутствуют, то сделал бы бэкап такого типа \EA Games\The Sims 2_old, и это все необходимо делать без участия пользователя. При деинсталляции желательно чтобы все вернулось к первоначальному состоянию, т. е. как было до установки игры).
Автор: maxdddca123
Дата сообщения: 22.12.2007 01:27
Alex Zaguzin
Есть такая прога Everest, дак вот в ней показывается подробная инфа о компе, в том числе и серийный номер каждого жёсткого диска. Вот меня и интересует как можно этот номер узнать в инно ?
Автор: Victor_Dobrov
Дата сообщения: 22.12.2007 13:18
Corona Skin & Check System Requirements (441 Кб в архиве) - обновление скрипта.

Прогрессбар: отображается подсчёт времени, оставшегося до конца извлечения файлов, возможен перехват этапов установки. Если убрать Copy.avi, на wpInstalling появится список файлов.
Плейлист: добавлен формат MO3. Мини-справка вызывается по Ctrl+A. Доработаны страницы wpPassword, wpUserInfo, wpLicense.
Добавлен общий логотип для скриптов, порядок поиска: Личный: '{#SourcePath}{#AppName} Logo.bmp', Общий: '{#SourcePath}Logo.bmp', Базовый: '{#SkinPath}Logo.bmp'.
Если программа уже установлена, в режиме SILENT деинсталлятор не запускается, а происходит перезапись. Второй RadioButton на UnInstallPage теперь блокирует переход на след. страницу.
Если NeedMB не указывать, значение берётся из ComponentsDiskSpaceLabel. Звук нажатия на клавиши/кнопки мыши встроенный (удалите ClickSound.wav, чтобы использовать системный).
Прочие незначительные, но многочисленные изменения. Тестируйте...

maxdddca123, по серийнику HDD смотри Corona_kernel.iss, функцию GetVolumeInformation.
Автор: GRom V
Дата сообщения: 22.12.2007 15:18
подскажите кто нить.....
запуск exe кодом производится таким образом:
Exec(ExpandConstant('{src}\support\DirectX') + '\DXSETUP.exe', '/silent ', sLocation, SW_SHOW, ewWaitUntilTerminated, iErrorCode);

а как запустить файл с расширением msi и нужным пораметром?
Автор: serg_aka_lain
Дата сообщения: 22.12.2007 17:41
GRom V

Можно так попробывать

/quiet тихий режим
/passive - только пргресс
/norestart - не будет инициализировать перезагрузку

ShellExec('', ExpandConstant('{src}\Package.msi'),'/qn', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode)

Тихий режим, без инициализации перезагрузки
Автор: maxdddca123
Дата сообщения: 22.12.2007 18:21
Victor_Dobrov
Помогите плиз. Мне нужно показывать серийник ХДД юзеру:
Сделал вот так

function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';

Procedure CheckRequirements(Sender: TObject); var Version: TWindowsVersion; CpuMHZ: Cardinal;
Begin
GetVolumeInformation(ExpandConstant('{sd}\'), VolumeName, BufferLen-1, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, BufferLen-1);
end;

function InitializeSetup():boolean;

begin
s:= IntToStr(VolumeSerialNo);
MsgBox(s, mbInformation, MB_OK);
result:=true;
end;

в итоге S получается равным нулю.. Непойму почему. Помогите разобраться плиз !
Автор: Victor_Dobrov
Дата сообщения: 22.12.2007 23:01
maxdddca123, вот [more=рабочий скрипт]
[Setup]
AppName=VolumeSerialNo
AppVerName=VolumeSerialNo
CreateAppDir=false

[Code]
var VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint; VolumeName, FileSystemName: String;

function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize: Longint; var VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Integer; external 'GetVolumeInformationA@kernel32.dll stdcall';

Function DelSP(String: String): String;    Begin    while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function InitializeSetup: Boolean;
Begin
    FileSystemName:= StringOfChar(' ',32) VolumeName:= StringOfChar(' ',255) GetVolumeInformation(ExpandConstant('{sd}\'),VolumeName,255,VolumeSerialNo,MaxComponentLength,FileSystemFlags,FileSystemName,31) FileSystemName:= DelSp(FileSystemName) VolumeName:= DelSp(VolumeName)
    MsgBox('Disk: '#9 + ExpandConstant('{sd}\') + #13 + 'Serial'#9 + IntToStr(VolumeSerialNo), mbError, MB_OK)
End;
[/more] получения серийника диска.
Автор: GRom V
Дата сообщения: 23.12.2007 01:14
serg_aka_lain

Цитата:
ShellExec('', ExpandConstant('{src}\Package.msi'),'/qn', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode)


В этом случае открывается папка {src} - вместо запуска Package.msi
Еще есть предложения?
Автор: serg_aka_lain
Дата сообщения: 23.12.2007 02:16
GRom V

Не верю! , сам проверил только что и код работает,
запускается в тихом режиме.

function InitializeSetup(): Boolean;
var ErrorCode : Integer;

begin
ShellExec('', ExpandConstant('{src}\vcredist.msi'),'/qn', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);
Result:= True;
end;


Из секции Run разве не проще?

Filename: "msiexec.exe"; Parameters: "-i ""{src}\vcredist.msi"" -qn"; WorkingDir: "{src}";
Автор: GRom V
Дата сообщения: 23.12.2007 04:50
Все...работает - просто я ошибся. Спасибочки!

Цитата:
Из секции Run разве не проще?


Мне нужно было чтоб файл запускался до инсталлятора. Из Run не вкатит
Автор: Victor_Dobrov
Дата сообщения: 23.12.2007 05:39
Немного изменил Шапку - переписал описание Inno Script Generator и Corona Skin.
Автор: elchupakabra
Дата сообщения: 23.12.2007 10:46
Подскажите пожалуйста
Есть значение реестра которое надо интегрировать инсталляторомю Вот кусок секции получившегося скрипта:
ValueData: "slz~{X|aLvgG\\nWJT"
При компиляции ругается на символ { и не хочет компилировать инсталлятор... можно ли как-то избежать этих граблей, чтобы синтаксис игнорировался...
Заренее спасибо.
Автор: maxdddca123
Дата сообщения: 23.12.2007 13:07
Victor_Dobrov
Спасибо, но как то некорректно определяется сейрийник. Я смотрю его в программе Everest (диагностическая утилита), вот там отображается серийник что то типа 7GRHD0465RT, а с тем скриптом который вы дали получается -35453245 (именно со знаком минус почему то). Можно ещё как то доработать пожалуйста?
Автор: serg_aka_lain
Дата сообщения: 23.12.2007 13:08
elchupakabra

Цитата:
При компиляции ругается на символ { и не хочет компилировать инсталлятор...


Ну так напиши так - ValueData: "slz~{{X|aLvgG\\nWJT"
Автор: Victor_Dobrov
Дата сообщения: 23.12.2007 14:21
maxdddca123
Этот код показывает серийный номер тома файловой системы, который задаётся при форматировании. Только непонятно, откуда взялся минус, у меня для всех дисков числа положительные. Больше ничем помочь не могу...

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Поиск в WinDjView


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