Добавить сведения в реестр и не только)

Ученик_77

Участник
Приветствую.
Такой вопрос возник.
Скрипт здешний "закос под игроманов", мне его уже Сергей немного поправлял, и теоретически я знаю как сделать, но боюсь, что проведу всю ночь, в отладке.))
Одним слово надо это добавить в реестр при установке:
http://rgho.st/8tGPPW4F4
Сам скрип (инно):
http://rgho.st/8KH8WpYBn
И поскольку это установка русского интерфейса, то как прописать выбор в скрипте ?
То есть как указывается выбор добавления в реестр ?
Если нужны остальные файлы скриптосоздания, то предоставлю.
 

SBalykov

Старожил
Приветствую.
Такой вопрос возник.
Скрипт здешний "закос под игроманов", мне его уже Сергей немного поправлял, и теоретически я знаю как сделать, но боюсь, что проведу всю ночь, в отладке.))
Одним слово надо это добавить в реестр при установке:
http://rgho.st/8tGPPW4F4
Сам скрип (инно):
http://rgho.st/8KH8WpYBn
И поскольку это установка русского интерфейса, то как прописать выбор в скрипте ?
То есть как указывается выбор добавления в реестр ?
Если нужны остальные файлы скриптосоздания, то предоставлю.
Примерно так:
Код:
[Setup]
//==========
// Отображаем панель выбора языка установки.
ShowLanguageDialog = yes
// Можно и не отображать
// ShowLanguageDialog = no
// автовыбор языка ситемы
// LanguageDetectionMethod = uilanguage
//==========

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

//==========
// Записи реестра.
[Registry]
Root: HKCU; SubKey: Software\FLT; Flags: uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam; Flags: uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam\228300; ValueType: string; ValueName: ListOfInstalledDLC; ValueData: 237800; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam\228300; ValueType: string; ValueName: ListOfSubscribedApps; ValueData: 237800; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam\228300; ValueType: string; ValueName: Language; ValueData: russian; Check: russian; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam\228300; ValueType: string; ValueName: Language; ValueData: english; Check: english; Flags: uninsdeletevalue uninsdeletekeyifempty
//==========

[Code]
//===========
// Активный язык установки
//===========
function russian: boolean;
begin
if ActiveLanguage = 'russian' then
Result := True;
end;

function english: boolean;
begin
if ActiveLanguage = 'english' then
Result := True;
end;
//==========

 Вариант 2

//==========
// Записи реестра.
[Registry]
Root: HKCU; SubKey: Software\FLT; Flags: uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam; Flags: uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam\228300; ValueType: string; ValueName: ListOfInstalledDLC; ValueData: 237800; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam\228300; ValueType: string; ValueName: ListOfSubscribedApps; ValueData: 237800; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam\228300; ValueType: string; ValueName: Language; ValueData: russian; Check: russian; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam\228300; ValueType: string; ValueName: Language; ValueData: english; Check: not russian; Flags: uninsdeletevalue uninsdeletekeyifempty
//==========

[Code]
//===========
// Активный язык установки
//===========
function russian: boolean;
begin
if ActiveLanguage = 'russian' then
Result := True else Result := False;
end;
 
Последнее редактирование:

Ученик_77

Участник
А как сделать в этом же скрипте такой вариант.
Есть (помимо основой папки игры) две папки, условно назовём их ENG и RUS, можно прописать, чтобы при выборе того или иного языка установки (русский, английский) установились файлы английской или русской локализации ?
А запаковку примерно так прописывать ?
Код:
Source: "RUS\*"; DestDir: {app}; Permissions: users-modify; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "ENG\*"; DestDir: {app}; Permissions: users-modify; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
 
Последнее редактирование:

SBalykov

Старожил
А как сделать в этом же скрипте такой вариант.
Есть (помимо основой папки игры) две папки, условно назовём их ENG и RUS, можно прописать, чтобы при выборе того или иного языка установки (русский, английский) установились файлы английской или русской локализации ?
А запаковку примерно так прописывать ?
Код:
Source: "RUS\*"; DestDir: {app}; Permissions: users-modify; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "ENG\*"; DestDir: {app}; Permissions: users-modify; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Как-то так ...
Код:
[Setup]
//==========
// Отображаем панель выбора языка установки.
ShowLanguageDialog = yes
// Можно и не отображать
// ShowLanguageDialog = no
// автовыбор языка ситемы
// LanguageDetectionMethod = uilanguage
//==========

[Files]
Source: "RUS\*"; DestDir: {app}; Permissions: users-modify; Check: russian; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "ENG\*"; DestDir: {app}; Permissions: users-modify; Check: english;  Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

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

//==========
// Записи реестра.
[Registry]
Root: HKCU; SubKey: Software\FLT; Flags: uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam; Flags: uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam\228300; ValueType: string; ValueName: ListOfInstalledDLC; ValueData: 237800; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam\228300; ValueType: string; ValueName: ListOfSubscribedApps; ValueData: 237800; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam\228300; ValueType: string; ValueName: Language; ValueData: russian; Check: russian; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam\228300; ValueType: string; ValueName: Language; ValueData: english; Check: english; Flags: uninsdeletevalue uninsdeletekeyifempty
//==========

[Code]
//===========
// Активный язык установки
//===========
function russian: boolean;
begin
if ActiveLanguage = 'russian' then
Result := True;
end;

function english: boolean;
begin
if ActiveLanguage = 'english' then
Result := True;
end;
//==========

Вариант 2

[Files]
Source: "RUS\*"; DestDir: {app}; Permissions: users-modify; Check: russian; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "ENG\*"; DestDir: {app}; Permissions: users-modify; Check: not russian;  Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

//==========
// Записи реестра.
[Registry]
Root: HKCU; SubKey: Software\FLT; Flags: uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam; Flags: uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam\228300; ValueType: string; ValueName: ListOfInstalledDLC; ValueData: 237800; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam\228300; ValueType: string; ValueName: ListOfSubscribedApps; ValueData: 237800; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam\228300; ValueType: string; ValueName: Language; ValueData: russian; Check: russian; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\FLT\Steam\228300; ValueType: string; ValueName: Language; ValueData: english; Check: not russian; Flags: uninsdeletevalue uninsdeletekeyifempty
//==========

[Code]
//===========
// Активный язык установки
//===========
function russian: boolean;
begin
if ActiveLanguage = 'russian' then
Result := True else Result := False;
end;
 

Ученик_77

Участник
Сергей, спасибо.
Я не очень точно объяснил, но в данном случае не требуется добавлять в реестр сведений.
Просто "заставить" установиться в зависимости от выбора языка установки те (RUS) или иные (ENG) файлы.
Или в вашем примере это учтено, а реестр просто так остался...
Проверить просто времени уже нет (только вечером смогу), извините, если туплю.))
 

vint56

Ветеран
Проверенный
Ученик_77, ты средствами inno setup или через freearc и архивы будеш делать
 

vint56

Ветеран
Проверенный
Ученик_77,
Код:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

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

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive
Name: text\eng; Description: Английский; Flags: exclusive

[Files]
Source: C:\tmp\rus.txt; DestDir: {app}; Flags: ignoreversion; Components: text\rus
Source: C:\tmp\eng.txt; DestDir: {app}; Flags: ignoreversion; Components: text\eng
Source: "C:\tmp\rus\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: text\rus
Source: "C:\tmp\eng\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: text\eng
 

Ученик_77

Участник
Приветствую всех.
Речь об Inno.
Значит так).
Код:
[Files]
Source: C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}\32; Check: not IsWin64
Source: C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}\64; Check: IsWin64
Это проверится какая версия виндовс.
А как потом указать создание ярлыка на 32 или 64 ?
Ярлыки типа:
Код:
[Icons]
Name: {group}\{#GameName}; Filename: {app}\Bin32\{#ExeName}; WorkingDir: {app}\Bin32; IconFilename: {app}\Bin32\{#ExeName}; Check: NoStartIcon;
Name: {group}\{cm:UninstallProgram,{#GameName}}; Filename: {uninstallexe}; WorkingDir: {app}; IconFilename: {app}\unins000.exe; IconIndex: 0; Check: NoStartIcon;
Name: {userdesktop}\{#GameName} ; Filename: {app}\Bin32\{#ExeName}; WorkingDir: {app}\Bin32; Check: desktopicon;

Name: {group}\{#GameName}; Filename: {app}\Bin64\Crysis64.exe; WorkingDir: {app}\Bin64; IconFilename: {app}\Bin64\Crysis64.exe; Check: NoStartIcon;
Name: {group}\{cm:UninstallProgram,{#GameName}}; Filename: {uninstallexe}; WorkingDir: {app}; IconFilename: {app}\unins000.exe; IconIndex: 0; Check: NoStartIcon;
Name: {userdesktop}\{#GameName} ; Filename: {app}\Bin64\Crysis64.exe; WorkingDir: {app}\Bin64; Check: desktopicon;
 

vint56

Ветеран
Проверенный
Ученик_77,
Код:
#define MyAppName "Crysis"
#define MyAppVersion "1.5"
#define MyAppExeName32 "Bin32\32.exe"
#define MyAppExeName64 "Bin64\64.exe"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}

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

[Files]
Source: "C:\Новая папка\32.exe"; DestDir: "{app}\Bin32"; Flags: ignoreversion
Source: "C:\Новая папка\64.exe"; DestDir: "{app}\Bin64"; Flags: ignoreversion

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName32}"; WorkingDir: {app}\Bin32; Check: not IsWin64
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName64}"; WorkingDir: {app}\Bin64; Check: IsWin64
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}";
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName32}"; WorkingDir: {app}\Bin32; Check: not IsWin64
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName64}"; WorkingDir: {app}\Bin64; Check: IsWin64
 

SBalykov

Старожил
Мне создать папки и положить туда екзешники ?
Или так и прописать в скрипте...
Чтобы было понятнее:
Код:
[Files]
Source: C:\Program Files (x86)\"Папка программы"\MyProg_32.exe; DestDir: {app}\Bin32; Flags: ignoreversion
Source: C:\Program Files (x86)\"Папка программы"\MyProg_64.exe; DestDir: {app}\Bin64; Flags: ignoreversion

[Icons]
Name: {group}\{#GameName}; Filename: {app}\Bin32\MyProg_32.exe; WorkingDir: {app}\Bin32; IconFilename: {app}\Bin32\MyProg_32.exe,0; Check: NoStartIcon and not IsWin64;
Name: {group}\{#GameName}; Filename: {app}\Bin64\MyProg_64.exe; WorkingDir: {app}\Bin64; IconFilename: {app}\Bin64\MyProg_64.exe,0; Check: NoStartIcon and IsWin64;
Name: {group}\{cm:UninstallProgram,{#GameName}}; Filename: {uninstallexe}; WorkingDir: {app}; IconFilename: {app}\unins000.exe; IconIndex: 0; Check: NoStartIcon;

Name: {userdesktop}\{#GameName} ; Filename: {app}\Bin32\MyProg_32.exe; WorkingDir: {app}\Bin32; Check: desktopicon and not IsWin64;
Name: {userdesktop}\{#GameName} ; Filename: {app}\Bin64\MyProg_64.exe; WorkingDir: {app}\Bin64; Check: desktopicon and IsWin64;
Есть немного ...
 
Последнее редактирование:

Ученик_77

Участник
Приветствую всех.
Опять вопросик.
Речь об Inno, этот же самый скрипт "Закос под Игроманов", правленый, про который спрашиваю в этой теме.
Итак.
Есть папка RUS.
Код:
Source: "RUS\*"; DestDir: {app}; Permissions: users-modify; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Можно ли сделать, чтобы при выборе русского языка интерфейса инталлятора её содержимое сначала установилось в директорию игры, а потом файл из этой папки RU.bat запустился и начинал процесс установки русификатора, по завершению которого (процесса установки русифткатора) завершилась бы и установка игры.
Просто файлы меняются при русификации более чем на 100%, нет смысла паковать их отдельно, по сути два размера игры будет.
Если получится то, о чём спрашиваю, думаю, так удобнее будет...
 

Вложения

vint56

Ветеран
Проверенный
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
Compression=none

[Components]
Name: rus; Description: Русская верися игры; Types: full;

[Files]
Source: "wav\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "oggenc2.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: rus
[code]
Function CreateBAT():Boolean;
var
  List: TStringList;
  bat: string;
begin
  bat:= ExpandConstant('{app}\ru.bat');
  List:= TStringList.Create;
  List.Add('for /r %%i in (*.wav) do (');
  List.Add('oggenc2 "%%i" -q 5');
  List.Add('del "%%i"');
  List.Add(') 2>>log.txt');
  List.SaveToFile(bat);
  List.Free;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  ResultCode: integer;
  begin
  if CurStep = ssPostInstall then begin
  if IsComponentSelected('rus') then
  begin
  CreateBAT;
  Exec(ExpandConstant('{app}\ru.bat'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
  DeleteFile(ExpandConstant('{app}\oggenc2.exe'));
  DeleteFile(ExpandConstant('{app}\ru.bat'));
  end;
end;
end;
Ученик_77
, попробуй так
Код:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
Compression=none

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

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 100000000
Name: text\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 200000000

[Files]
Source: "wav\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "oggenc2.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: text\rus
Source: "wav_to_ogg.bat"; DestDir: "{app}"; Flags: ignoreversion; Components: text\rus
Source: "ogg_to_wav.bat"; DestDir: "{app}"; Flags: ignoreversion;Components: text\eng
Source: "oggdec.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: text\eng

[code]
procedure CurStepChanged(CurStep: TSetupStep);
var
  ResultCode: integer;
begin
  if CurStep = ssPostInstall then begin
  if IsComponentSelected('text\rus') then
  begin
  Exec(ExpandConstant('{app}\wav_to_ogg.bat'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
  DeleteFile(ExpandConstant('{app}\oggenc2.exe'));
  DeleteFile(ExpandConstant('{app}\wav_to_ogg.bat'));
  end;
  if IsComponentSelected('text\eng') then
  begin
  Exec(ExpandConstant('{app}\ogg_to_wav.bat'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
  DeleteFile(ExpandConstant('{app}\oggdec.exe'));
  DeleteFile(ExpandConstant('{app}\ogg_to_wav.bat'));
  end;
end;
end;

Код:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
Compression=none

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

[Components]
Name: text; Description: Локализовать игру; Types: full;
Name: text\rus; Description: Русская версия; Types: full;

[Files]
Source: "wav\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "oggenc2.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: text\rus
Source: "wav_to_ogg.bat"; DestDir: "{app}"; Flags: ignoreversion; Components: text\rus

[code]
procedure CurStepChanged(CurStep: TSetupStep);
var
  ResultCode: integer;
begin
  if CurStep = ssPostInstall then begin
  if IsComponentSelected('text\rus') then
  begin
  Exec(ExpandConstant('{app}\wav_to_ogg.bat'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
  DeleteFile(ExpandConstant('{app}\oggenc2.exe'));
  DeleteFile(ExpandConstant('{app}\wav_to_ogg.bat'));
  end;
end;
end;
 
Последнее редактирование:

Ученик_77

Участник
Спасибо, Виталий, попробую вечером.
Любое имя написать можно, или название игры надо ?
И ещё
[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 100000000
Name: text\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 200000000
У меня только одна папка RUS, там и язык и интерфейс сразу.
 
Последнее редактирование:

vint56

Ветеран
Проверенный
Ученик_77, это я у себя проверял батник все ли работает потому можеш не писать
[Files]
Source: "wav\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "oggenc2.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: rus
 

Ученик_77

Участник
Я понял, значит вместо wav пишу Game (там у меня файлы игры), а oggenc2.exe это что будет в моём случае ?
А можно сделать выбор установки локализации русской за счёт выбора языка самого установщика, а то не отображается выбор в рамках этого скрипта.
Просто пустое окно и "установить" и "назад".
======================================
Виталий, спасибо огромное за помощь, но я придумал попроще вариант.
Через секцию Run сделал.
Там батник запускается легко.
Ещё раз спасибо за отклик.
 
Последнее редактирование:

vint56

Ветеран
Проверенный
Ученик_77, я у себя проверял нормально ли работает батник а что бы проверить добавил все файлы тебе не чего не надо только свой батник и все
[Files]
Source: "Game\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "и свой батник.bat"; DestDir: "{app}"; Flags: ignoreversion; Components: text\rus
 

Вложения

Сверху