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

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

Автор: Alex 17
Дата сообщения: 18.11.2015 17:40
Здравствуйте уважаемие форумчане!

Как мне указать в секции [Run] куда устанавливаться программе, при том, что я использую "/Q" ?

WorkingDir??

Спасибо!
Автор: AlexALSP
Дата сообщения: 19.11.2015 14:21

Цитата:
Здравствуйте уважаемие форумчане!
 
Как мне указать в секции [Run] куда устанавливаться программе, при том, что я использую "/Q" ?
 
WorkingDir??
 
Спасибо!


Пример:


Код: Filename: "{app}\_CommonRedist\vcredist\2010\vcredist_x86.exe"; Parameters: "/quiet /norestart"; Components: "software\Vc_2010"; StatusMsg: "Идет установка Microsoft Visual C++ 2010";
Автор: Alex 17
Дата сообщения: 19.11.2015 15:16
AlexALSP, а без пересборки никак? в самом инсталяторе (создан тоже в Inno) не прописан дефолтный путь для установки. Я был уверен, что как-то через параметри или WorkingDir или DestDir можно указать куда устанавливаться программе =(
Автор: AlexALSP
Дата сообщения: 19.11.2015 18:47
В секции [Run] перечисляются файлы, которые инсталлятор должен выполнить после удачной установки приложения (перед появлением страницы Установка завершена).

А) В любом случае

Два следующих примера приведут к одному и тому же результату: после удачной установки программы запустится файл Program.exe.

[Run]


Код: FileName: "Program.exe"; WorkingDir: "{app}"; Flags: nowait
Автор: Alex 17
Дата сообщения: 19.11.2015 19:24
AlexALSP, спасибо большое!
Автор: Tima182
Дата сообщения: 20.11.2015 12:05
Как в скрипте прописать что бы всегда стояла галка ярлык на рабочий стол? Во многих установках игр галочка всегда стоит. Я создал скрипт а там надо вручную ставить галочку.
Автор: AlexALSP
Дата сообщения: 24.11.2015 20:38
Со снятыми птичками


Код:

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Автор: Alex 17
Дата сообщения: 28.11.2015 16:11
Привет!

Как изменить размер и расположение box'а для выбора компонентов?

Спасибо большое!
Автор: ultimo
Дата сообщения: 28.11.2015 16:29

Код:
[ code]

procedure InitializeWizard();
begin
WizardForm.ComponentsList.Left:=
WizardForm.ComponentsList.Top:=
WizardForm.ComponentsList.Width:=
WizardForm.ComponentsList.Height:=
end;
Автор: Alex 17
Дата сообщения: 28.11.2015 19:53
Спасибо большое! И еще:

После деинсталляции остается пустая папка с игрой, как ее удалить? Боюсь что если через Type: filesandordirs; Name: "{app}" в [UninstallDelete] то удалится вся папка Games. Там кажется есть такой риск.
Автор: ultimo
Дата сообщения: 29.11.2015 08:56
Вот так попробуй

Код:
[UninstallDelete]
Type: dirifempty; Name: {app};
Автор: Alex 17
Дата сообщения: 29.11.2015 12:55
оо.. то что я искал! Спасибо большое! Добра вам! ^^
Автор: Angel_Smerti
Дата сообщения: 03.12.2015 23:07
В "Corona Skin & Check System Requirements от Victor_Dobrov" Слайд-шоу не качает, говорит - ошибка 404.
Автор: DMITRIY18111985
Дата сообщения: 05.12.2015 13:26
Помогите разобраться со скриптом Need for Speed™ Undercover. Как мне добавить в скрипт файлы отвечающие за русскую и английскую локализации игры, чтобы после установки - при выборе языка игры, устанавливалась русская или английская версия?
Автор: sjwrec
Дата сообщения: 11.12.2015 06:48
Angel_Smerti

Цитата:
В "Corona Skin & Check System Requirements от Victor_Dobrov" Слайд-шоу не качает, говорит - ошибка 404.


Зачем тревожить мёртвый скрипт. Уже есть более лучшее решение, использовать библиотеку isSlideShow.dll
Автор: DMITRIY18111985
Дата сообщения: 14.12.2015 18:14
Всем привет. Подскажите пожалуйста какой командой в скрипте запретить изменять путь установки приложения, но выбор диска для установки оставить?
Автор: ultimo
Дата сообщения: 14.12.2015 18:23
DMITRIY18111985,
Взял с StackOverflow:

Код:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName=My Program

[Messages]
SelectDirBrowseLabel=To continue, click Next.

[ Code]
#ifdef UNICODE
#define AW "W"
#else
#define AW "A"
#endif
type
TDriveType = (
dtUnknown,
dtNoRootDir,
dtRemovable,
dtFixed,
dtRemote,
dtCDROM,
dtRAMDisk
);
TDriveTypes = set of TDriveType;

function GetDriveType(lpRootPathName: string): UINT;
external 'GetDriveType{#AW}@kernel32.dll stdcall';
function GetLogicalDriveStrings(nBufferLength: DWORD; lpBuffer: string): DWORD;
external 'GetLogicalDriveStrings{#AW}@kernel32.dll stdcall';

var
DirCombo: TNewComboBox;

#ifndef UNICODE
function IntToDriveType(Value: UINT): TDriveType;
begin
Result := dtUnknown;
case Value of
1: Result := dtNoRootDir;
2: Result := dtRemovable;
3: Result := dtFixed;
4: Result := dtRemote;
5: Result := dtCDROM;
6: Result := dtRAMDisk;
end;
end;
#endif

function GetLogicalDrives(Filter: TDriveTypes; Drives: TStrings): Integer;
var
S: string;
I: Integer;
DriveRoot: string;
begin
Result := 0;

I := GetLogicalDriveStrings(0, #0);
if I > 0 then
begin
SetLength(S, I);
if GetLogicalDriveStrings(Length(S), S) > 0 then
begin
S := TrimRight(S) + #0;
I := Pos(#0, S);
while I > 0 do
begin
DriveRoot := Copy(S, 1, I - 1);
#ifdef UNICODE
if (Filter = []) or
(TDriveType(GetDriveType(DriveRoot)) in Filter) then
#else
if (Filter = []) or
(IntToDriveType(GetDriveType(DriveRoot)) in Filter) then
#endif
begin
Drives.Add(DriveRoot);
end;
Delete(S, 1, I);
I := Pos(#0, S);
end;
Result := Drives.Count;
end;
end;
end;

procedure DriveComboChange(Sender: TObject);
begin
WizardForm.DirEdit.Text := DirCombo.Text;
end;

procedure InitializeWizard;
var
I: Integer;
StringList: TStringList;
begin
StringList := TStringList.Create;
try
if GetLogicalDrives([dtFixed], StringList) > 0 then
begin
WizardForm.DirEdit.Visible := False;
WizardForm.DirBrowseButton.Visible := False;

DirCombo := TNewComboBox.Create(WizardForm);
DirCombo.Parent := WizardForm.DirEdit.Parent;
DirCombo.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top,
WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width -
WizardForm.DirEdit.Left, WizardForm.DirEdit.Height);
DirCombo.Style := csDropDownList;
DirCombo.OnChange := @DriveComboChange;

for I := 0 to StringList.Count - 1 do
DirCombo.Items.Add(StringList[I] + '{#SetupSetting('DefaultDirName')}');

DirCombo.ItemIndex := 0;
DirCombo.OnChange(nil);
end;
finally
StringList.Free;
end;
end;
Автор: DMITRIY18111985
Дата сообщения: 14.12.2015 18:53
[q][/q]
Где здесь команда запрета, что то не разберусь?
Автор: ultimo
Дата сообщения: 15.12.2015 14:08
DMITRIY18111985
Это не просто "команда запрета". Это определенный алгоритм, вариант решения вашей задачи.
Автор: hansleo
Дата сообщения: 18.12.2015 16:12
Привет всем!
Подскажите что может быть с отладкой?
После компиляции при старте пакета зависает студия а также при запуске собранного пакета
В диспетчере задач появляется сразу три задачи на запуск пакета инсталляции ..., которые нельзя завершить обычными способами. Только после перегрузки системы они уходят ...
Что может быть причиной зависания инсталлера?
Спасибо!

Система Вин 7 32 бит
Автор: TimKray
Дата сообщения: 24.12.2015 16:54
Подскажите пожалуйста, как совместить эти скрипты:
https://drive.google.com/file/d/0B2jNSpVLZApHNjRZYnRjcUh0X3c/view
и этот: https://drive.google.com/file/d/0B2jNSpVLZApHNHFyQlVrSjdlSGc/edit
Автор: taba555
Дата сообщения: 26.12.2015 10:36
records.inf как убрать из репака или прятать

Добавлено:
Как вообще убрать из репака или прятать records.inf при создании инсталлятора . Вот скрипт https://yadi.sk/d/OhIz64EUmVsk4 За ранее спасибо.
Автор: innonewbie
Дата сообщения: 26.12.2015 13:37
taba555, records.inf создаётся автоматически для корректной расстановки процентов при распаковке Isdone. Чтоб убрать - можешь проценты расставить вручную, как это сделать описано в справке к Isdone. Чтоб скрыть, возможно, поможет Attribs: hidden system;
Автор: sjwrec
Дата сообщения: 27.12.2015 18:06
taba555


Цитата:
Как вообще убрать из репака   или прятать records.inf при создании инсталлятора

Не нужно его прятать. Нужно просто файл переместить в папку со скриптом, раскоментировать строку #define records
И снова скомпилировать ваш скрипт. После этого records.inf, будет появляться только при запуске инсталла и находится по пути AppData\Temp короче куда обычные пользователи не лазят. Так что ничего прятать не нужно, нужно лишь внимательно читать справку по isDone и таких вопросов не возникнет.
Автор: tempMISHANCHYK
Дата сообщения: 03.01.2016 02:22
Подскажите пожалуйста. Бывает что при деинсталяции программ некоторые .dll заблокированны системными процессами(или программами) и не удаляются. Можно как-то задать условие для их разблокировки при деинсталяции?
Автор: TimKray
Дата сообщения: 04.01.2016 11:52
[more] #define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"
//---Сюда вставлять include---\\
#include "SHFileOperation.iss";



[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppId={{FD7CFF3B-3C19-4FAE-A164-CA3A90B2C135}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "D:\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

[Code]
//---Сюда вставлять скрипт---\\
var
BackupPage: TWizardPage;
DeleteRadioButton, MoveRadioButton, NoneRadioButton: TNewRadioButton;

const
BackupDescText =
'Во избежание проблем совместимости и конфликтов между модификациями рекомендуется удалить уже установленные на данный момент в игровом клиенте.' #13#13 'Выберите необходимый пункт из представленных. При этом будет очищено содержимое папки "res_mods\0.8.11", удалена папка "res_mods\xvm" или созданы резервные копии Ваших файлов.';
DeleteDescText =
'Установщик удалит все файлы в папках.';
MoveDescText =
'Установщик сделает резервную копию всех файлов в папках.';
NoneDescText =
'Установщик оставит всё как есть.';

function BackupCheck_1(): Boolean;
var
BackupDescLabel, DeleteDescLabel, MoveDescLabel, NoneDescLabel: TLabel;
begin
BackupPage:=CreateCustomPage(wpWelcome, 'Создание резервных копий файлов перед установкой', 'Пожалуйста, прочтите следующую важную информацию перед тем, как продолжить.');
BackupDescLabel:=TLabel.Create(WizardForm);
BackupDescLabel.Parent:=BackupPage.Surface;
BackupDescLabel.Left:=0;
BackupDescLabel.Top:=0;
BackupDescLabel.Width:=BackupPage.SurfaceWidth;
BackupDescLabel.Height:=90;
BackupDescLabel.AutoSize:=False;
BackupDescLabel.Wordwrap:=True;
BackupDescLabel.Caption:=BackupDescText;

DeleteRadioButton:=TNewRadioButton.Create(WizardForm);
DeleteRadioButton.Parent:=BackupPage.Surface;
DeleteRadioButton.Checked:=False;
DeleteRadioButton.Top:=95;
DeleteRadioButton.Width:=BackupPage.SurfaceWidth;
DeleteRadioButton.Font.Style:=[fsBold];
DeleteRadioButton.Font.Size:=9;
DeleteRadioButton.Caption:='Удалить файлы'
DeleteDescLabel:=TLabel.Create(WizardForm);
DeleteDescLabel.Parent:=BackupPage.Surface;
DeleteDescLabel.Left:=18;
DeleteDescLabel.Top:=DeleteRadioButton.Top + DeleteRadioButton.Height + 4;
DeleteDescLabel.Width:=BackupPage.SurfaceWidth;
DeleteDescLabel.Height:=40;
DeleteDescLabel.AutoSize:=False;
DeleteDescLabel.Wordwrap:=True;
DeleteDescLabel.Caption:=DeleteDescText;

MoveRadioButton:=TNewRadioButton.Create(WizardForm);
MoveRadioButton.Parent:=BackupPage.Surface;
MoveRadioButton.Checked:=True;
MoveRadioButton.Top:=140;
MoveRadioButton.Width:=BackupPage.SurfaceWidth;
MoveRadioButton.Font.Style:=[fsBold];
MoveRadioButton.Font.Size:=9;
MoveRadioButton.Caption:='Сделать резервную копию файлов'
MoveDescLabel:=TLabel.Create(WizardForm);
MoveDescLabel.Parent:=BackupPage.Surface;
MoveDescLabel.Left:=18;
MoveDescLabel.Top:=MoveRadioButton.Top + MoveRadioButton.Height + 4;
MoveDescLabel.Width:=BackupPage.SurfaceWidth;
MoveDescLabel.Height:=40;
MoveDescLabel.AutoSize:=False;
MoveDescLabel.Wordwrap:=True;
MoveDescLabel.Caption:=MoveDescText;

NoneRadioButton:=TNewRadioButton.Create(WizardForm);
NoneRadioButton.Parent:=BackupPage.Surface;
NoneRadioButton.Checked:=False;
NoneRadioButton.Top:=185;
NoneRadioButton.Width:=BackupPage.SurfaceWidth;
NoneRadioButton.Font.Style:=[fsBold];
NoneRadioButton.Font.Size:=9;
NoneRadioButton.Caption:='Ничего не трогать'
NoneDescLabel:=TLabel.Create(WizardForm);
NoneDescLabel.Parent:=BackupPage.Surface;
NoneDescLabel.Left:=18;
NoneDescLabel.Top:=NoneRadioButton.Top + NoneRadioButton.Height + 4;
NoneDescLabel.Width:=BackupPage.SurfaceWidth;
NoneDescLabel.Height:=40;
NoneDescLabel.AutoSize:=False;
NoneDescLabel.Wordwrap:=True;
NoneDescLabel.Caption:=NoneDescText;
end;

function BackupCheck_2(): Boolean;
begin
If DeleteRadioButton.Checked then
begin
DelTree(ExpandConstant('{app}\res_mods\0.8.11'), True, True, True);
DelTree(ExpandConstant('{app}\res_mods\xvm'), True, True, True);
CreateDir(ExpandConstant('{app}\res_mods\0.8.11'));
end;
end;

function BackupCheck_3(): Boolean;
begin
If MoveRadioButton.Checked then
begin
MoveDir(ExpandConstant('{app}\res_mods\0.8.11\'),ExpandConstant('{app}\res_mods\backup\0.8.11'));
MoveDir(ExpandConstant('{app}\res_mods\xvm\'),ExpandConstant('{app}\res_mods\backup\xvm'));
CreateDir(ExpandConstant('{app}\res_mods\0.8.11'));
DelTree(ExpandConstant('{app}\res_mods\xvm'), True, True, True);
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssInstall then
begin
BackupCheck_2();
BackupCheck_3();
end;
end;

procedure InitializeWizard();
begin
BackupCheck_1();
end; [/more]

Добавлено:
https://drive.google.com/open?id=0B5Zm-Ecbpn_gal9DUEdWTDFWM28

Добавлено:
как эти два скрипта соединить?????Заранее спасибо
Автор: dragon1000
Дата сообщения: 04.01.2016 14:05

Всех с наступившим новым годом !!!

Автор: MihailM
Дата сообщения: 05.01.2016 00:26
Всех с Наступившим Новым Годом !
Есть, вопросик как прочитать определенную ветку реестра и подставить вместо пути на распаковку . То есть пропустить уже выбор каталога куда распаковывать .
Подскажите пожалуйста , а лучше выложите уже готовый код .
Заранее благодарен !
Автор: ultimo
Дата сообщения: 05.01.2016 08:44
MihailM

Код:
#define RegistryKey     "Тут нужный ключ"
#define RegistryValueInstall "Строковый параметр-путь"

[Setup]
DefaultDirName={code:GetInstallDir}
DisableDirPage=yes

[_code]
function GetInstallDir(Param: String): String;
begin
RegQueryStringValue(HKLM, '{#RegistryKey}', '{#RegistryValueInstall}', Result);
end;
Автор: sjwrec
Дата сообщения: 05.01.2016 13:52
MihailM
Вот так проще и нагляднее

[more]

[Setup]
DefaultDirName={code:AvPatch}

[_code]
var
AvRes: String;

// Начало Процедура "Определение местонахождения"
function AvPatch(Default: String): String;
begin
// Ищем ключ
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 264710','InstallLocation', AvRes);
// Если не удалось найти ключ Wow6432Node (для 64 битных систем), то пробуем искать ключ для 32 битных систем.
if AvRes = '' then RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 264710','InstallLocation', AvRes);
if AvRes = '' then Result:= 'C:\Games\Subnautica'; // Если ни один ключ не найден то используем альтернативный путь
if AvRes <> '' then Result:= AvRes; // Если путь найден то записываем его результат.
end;
// Конец Процедура "Определение местонахождения"

[/more]

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758

Предыдущая тема: Только инсталлятор


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