Вопрос по скрипту

Socolino

Новичок
@Socolino,
Код:
DiskSliceSize=2100000000
DiskClusterSize=4096
ReserveBytes=0
Compression=lzma2/ultra64
InternalCompressLevel=ultra64
Полную инфу можно получить тут: https://leserg73.github.io/InnoHelp/ishelp/index.htm
Секция [Setup]
Спасибо!
А можно сделать так, чтобы например софт типа directx не копировался в папку с игрой, а просто запускался при выборе дополнительные файлы установить ?
 

tihiy_don

Старожил
@Socolino, да. На ванильном инно давно не делал, примерно вот так:

code_language.pascal:
[Tasks]
Name: "install_directx"; Description: "Установить DirectX"; GroupDescription: "Дополнительные компоненты"; Flags: unchecked
[Run]
Filename: "{src}\Redist\dxsetup.exe"; Parameters: "/q"; WorkingDir: "{src}\Redist"; Flags: postinstall skipifsilent
Почитайте про эти секции подробнее в справке для более точного понимания. Пишу по памяти, не факт что пример рабочий.
/q тут означает, что установку производить в "тихом" режиме.
 
Последнее редактирование:

Socolino

Новичок
@Socolino, да. На ванильном инно давно не делал, примерно вот так:

code_language.pascal:
[Tasks]
Name: "install_directx"; Description: "Установить DirectX"; GroupDescription: "Дополнительные компоненты"; Flags: unchecked
[Run]
Filename: "{src}\Redist\dxsetup.exe"; Parameters: "/q"; WorkingDir: "{src}\Redist"; Flags: postinstall skipifsilent
Почитайте про эти секции подробнее в справке для более точного понимания. Пишу по памяти, не факт что пример рабочий.
/q тут означает, что установку производить в "тихом" режиме.
Спасибо
 

Socolino

Новичок
Ещё подскажите пожалуйста. Как написать ключ реестра, делаю для игры Call of Duty 4 Modern Warfare 1.8 .
[HKEY_CURRENT_USER\SOFTWARE\Activision\Call of Duty 4]
"codkey"="Ключ"
Как это добавить в Inno Setup ? Я с реестрами не работал ещё , может даст кто - нибудь совета?
Мне бы ещё чтобы ключ генерировался.
 
Последнее редактирование:

Socolino

Новичок
Подскажите как сделать установщик например, чтобы если игра уже установлена при следующей установки установщик нашел её и удалил желательно с предупреждением о том, что игра уже установлена , желаете удалить ? )
 

tihiy_don

Старожил
Ещё подскажите пожалуйста. Как написать ключ реестра, делаю для игры Call of Duty 4 Modern Warfare 1.8 .
[HKEY_CURRENT_USER\SOFTWARE\Activision\Call of Duty 4]
"codkey"="Ключ"
Как это добавить в Inno Setup ? Я с реестрами не работал ещё , может даст кто - нибудь совета?
Мне бы ещё чтобы ключ генерировался.
Примерно так:
code_language.pascal:
[code]
var
  GameKey: array of String = (
    'ключ1',
    'ключ2',
    'ключ3',
    'ключ4',
    'ключ5'
  );

function GetRandomKey(Param: String): String;                     
var                                                                
  Count: Integer;                                                 
begin                                                              
  //Randomize;                                                        
  Count:=GetArrayLength(GameKey);                                 
  Result:=GameKey[Random(Count)];                                 
end;

procedure InitializeWizard();
begin
  Randomize;
end;

[Registry]
Root: HKCU; SubKey: "Software\Electronic Arts\Electronic Arts\The Lord of the Rings, The Rise of the Witch-king\ergc"; ValueType: string; ValueName: ""; ValueData: "{code:GetRandomKey}";
 

tihiy_don

Старожил
Подскажите как сделать установщик например, чтобы если игра уже установлена при следующей установки установщик нашел её и удалил желательно с предупреждением о том, что игра уже установлена , желаете удалить ? )
code_language.pascal:
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#StringChange(SetupSetting("AppId"), "{{", "{")}_is1', 'UninstallString', UninstallExe) and FileExists(RemoveQuotes(UninstallExe)) then
begin
  if not Exec(RemoveQuotes(UninstallExe), '', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode) then
      ShowMessage('Не удалось запустить деинсталлятор', 'Возможно, unins000.exe поврежден');
end;
 

Socolino

Новичок
code_language.pascal:
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#StringChange(SetupSetting("AppId"), "{{", "{")}_is1', 'UninstallString', UninstallExe) and FileExists(RemoveQuotes(UninstallExe)) then
begin
  if not Exec(RemoveQuotes(UninstallExe), '', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode) then
      ShowMessage('Не удалось запустить деинсталлятор', 'Возможно, unins000.exe поврежден');
end;
Спасибо


У меня ошибку выдаёт
Снимок.PNG
 
Последнее редактирование:

Socolino

Новичок
Примерно так:
code_language.pascal:
[code]
var
  GameKey: array of String = (
    'ключ1',
    'ключ2',
    'ключ3',
    'ключ4',
    'ключ5'
  );

function GetRandomKey(Param: String): String;                    
var                                                               
  Count: Integer;                                                
begin                                                             
  //Randomize;                                                       
  Count:=GetArrayLength(GameKey);                                
  Result:=GameKey[Random(Count)];                                
end;

procedure InitializeWizard();
begin
  Randomize;
end;

[Registry]
Root: HKCU; SubKey: "Software\Electronic Arts\Electronic Arts\The Lord of the Rings, The Rise of the Witch-king\ergc"; ValueType: string; ValueName: ""; ValueData: "{code:GetRandomKey}";
Снимок.PNG
 

Вложения

tihiy_don

Старожил
@Socolino,попробуйте так:

code_language.pascal:
const
  GameKey: array[0..4] of string = (
    'ключ1',
    'ключ2',
    'ключ3',
    'ключ4',
    'ключ5'
  );
 

hitman797

Новичок
@Socolino , you can use this function to manipulate Registry.
Код:
// Registry functions

function RegKeyExists(const RootKey: Integer; const SubKeyName: String): Boolean;
function RegValueExists(const RootKey: Integer; const SubKeyName, ValueName: String): Boolean;

function RegGetSubkeyNames(const RootKey: Integer; const SubKeyName: String; var Names: TArrayOfString): Boolean;
function RegGetValueNames(const RootKey: Integer; const SubKeyName: String; var Names: TArrayOfString): Boolean;

function RegQueryStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;
function RegQueryMultiStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;
function RegQueryDWordValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultDWord: Cardinal): Boolean;
function RegQueryBinaryValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;

function RegWriteStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;
function RegWriteExpandStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;
function RegWriteMultiStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;
function RegWriteDWordValue(const RootKey: Integer; const SubKeyName, ValueName: String; const Data: Cardinal): Boolean;
function RegWriteBinaryValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;

function RegDeleteKeyIncludingSubkeys(const RootKey: Integer; const SubkeyName: String): Boolean;
function RegDeleteKeyIfEmpty(const RootKey: Integer; const SubkeyName: String): Boolean;
function RegDeleteValue(const RootKey: Integer; const SubKeyName, ValueName: String): Boolean;
 

Socolino

Новичок
@Socolino , you can use this function to manipulate Registry.
Код:
// Registry functions

function RegKeyExists(const RootKey: Integer; const SubKeyName: String): Boolean;
function RegValueExists(const RootKey: Integer; const SubKeyName, ValueName: String): Boolean;

function RegGetSubkeyNames(const RootKey: Integer; const SubKeyName: String; var Names: TArrayOfString): Boolean;
function RegGetValueNames(const RootKey: Integer; const SubKeyName: String; var Names: TArrayOfString): Boolean;

function RegQueryStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;
function RegQueryMultiStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;
function RegQueryDWordValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultDWord: Cardinal): Boolean;
function RegQueryBinaryValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;

function RegWriteStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;
function RegWriteExpandStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;
function RegWriteMultiStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;
function RegWriteDWordValue(const RootKey: Integer; const SubKeyName, ValueName: String; const Data: Cardinal): Boolean;
function RegWriteBinaryValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;

function RegDeleteKeyIncludingSubkeys(const RootKey: Integer; const SubkeyName: String): Boolean;
function RegDeleteKeyIfEmpty(const RootKey: Integer; const SubkeyName: String): Boolean;
function RegDeleteValue(const RootKey: Integer; const SubKeyName, ValueName: String): Boolean;
Это в секцию code ?
Добавил, но ошибкаСнимок.PNG
 
Последнее редактирование:

hitman797

Новичок
Is it in the code section?
I added, but there was a mistake
you can use this in the Button OnClick Event or Form OnCreate Event
Код:
procedure ButtonOnClick(Sender: TObject);
begin
  RegWriteStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String);
end;
Код:
procedure FormOnCreate(Sender: TObject);
begin
  RegWriteStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String);
end;
Код:
  HKCR   = HKEY_CLASSES_ROOT;
  HKCR32 = HKEY_CLASSES_ROOT or CodeRootKeyFlag32Bit;
  HKCR64 = HKEY_CLASSES_ROOT or CodeRootKeyFlag64Bit;
  HKCU   = HKEY_CURRENT_USER;
  HKCU32 = HKEY_CURRENT_USER or CodeRootKeyFlag32Bit;
  HKCU64 = HKEY_CURRENT_USER or CodeRootKeyFlag64Bit;
  HKLM   = HKEY_LOCAL_MACHINE;
  HKLM32 = HKEY_LOCAL_MACHINE or CodeRootKeyFlag32Bit;
  HKLM64 = HKEY_LOCAL_MACHINE or CodeRootKeyFlag64Bit;
  HKU    = HKEY_USERS;
  HKU32  = HKEY_USERS or CodeRootKeyFlag32Bit;
  HKU64  = HKEY_USERS or CodeRootKeyFlag64Bit;
  HKCC   = HKEY_CURRENT_CONFIG;
  HKCC32 = HKEY_CURRENT_CONFIG or CodeRootKeyFlag32Bit;
 HKCC64 = HKEY_CURRENT_CONFIG or CodeRootKeyFlag64Bit;
RootKey= HKLM
SubKeyName = 'SOFTWARE\7-Zip'
ValueName = 'Path'
Data = 'C:\Program Files\7-Zip\'
Код:
RegWriteStringValue(HKLM, 'SOFTWARE\7-Zip', 'Path', 'C:\Program Files\7-Zip\');
 

tihiy_don

Старожил
Даю полный рабочий пример с вашей веткой реестра.

code_language.pascal:
[code]
var
  GameKey: array[0..4] of string;

procedure InitializeGameKeys;
begin
  GameKey[0] := 'ключ1';
  GameKey[1] := 'ключ2';
  GameKey[2] := 'ключ3';
  GameKey[3] := 'ключ4';
  GameKey[4] := 'ключ5';
end;

function GetRandomKey(Param: String): String;                    
var                                                               
  Count: Integer;                                                
begin                                                             
  Randomize;                                                       
  Count:=GetArrayLength(GameKey);                                
  Result:=GameKey[Random(Count)];                                
end;


procedure InitializeWizard();
  InitializeGameKeys;
end;

[Registry]
Root: HKCU; SubKey: "Software\Activision\Call of Duty 4"; ValueType: string; ValueName: "codkey"; ValueData: "{code:GetRandomKey}";
 
Последнее редактирование:

Crachlow

Старожил
@Socolino,попробуйте так:

code_language.pascal:
const
  GameKey: array[0..4] of string = (
    'ключ1',
    'ключ2',
    'ключ3',
    'ключ4',
    'ключ5'
  );
это же не чистый делфи
code_language.pascal:
[code]
var
  GameKey: array[0..4] of string;

procedure InitializeGameKeys;
begin
  GameKey[0] := 'ключ1';
  GameKey[1] := 'ключ2';
  GameKey[2] := 'ключ3';
  GameKey[3] := 'ключ4';
  GameKey[4] := 'ключ5';
end;

procedure InitializeWizard();
  InitializeGameKeys;
end;

[Registry]
Root: HKCU; SubKey: "Software\Activision\Call of Duty 4"; ValueType: string; ValueName: "codkey"; ValueData: "{code:GetRandomKey}";
Код:
[Code]
var
 GameKey: TArrayOfstring;

function GetRandomKey(Param: String): String;
var
  Count: Integer;
begin
  GameKey:=['key1','key2','key3','key4'];
  Count:=GetArrayLength(GameKey);
  Randomize;
  Result:=GameKey[Random(Count)];
end;
 

Shegorat

Lord of Madness
Администратор
Не нужно спрашивать отвлечённые вопросы в специализированной теме. Там обсуждается только ISDone, и все проблему по нему.
 
Сверху