PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 9]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [18] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

vk_k14m@vk
14-06-2019, 10:24
ой, не все скопировал у себя, когда пост оформлял. Добавить в [Files] пустышку config.ksc: »
Теперь файл создается. Это уже хорошо. Но ошибка все еще есть.

Создается файл с таким содержимым
%["saveDataLocation" => "file://./D/Games/Fate/Stay Night [Realta Nua] - Ultimate Edition/fateavedata"]
А должно быть такое
(const) %[
"saveDataLocation" => "file://./D/Games/Fate/Stay Night [Realta Nua] - Ultimate Edition/fateavedata"
]
Из-за чего игра крашится после первого запуска. А при втором запуске крашится моментально...

El Sanchez
14-06-2019, 14:39
Из-за чего игра крашится после первого запуска. А при втором запуске крашится моментально »
vk_k14m@vk, а (const) добавить к S1 := '(const) %["saveDataLocation" => "file://./' + S1 + '"]';?

Dodakaedr
14-06-2019, 19:25
А должно быть такое »
S1 := '(const) %['+#13' "saveDataLocation" => "file://./' + S1 + '"'+#13+']';
и добавьте еще это if not DirExists(s1) then ForceDirectories(s1); после S1 := SaveDataLocationPage.Values[0]; в процедуре SetSaveDataLocation.

Bio_Hazard
07-07-2019, 22:36
Здравствуйте!
Есть небольшой простой скрипт для установки мода в игру. Он делает бекап оригинальных файлов, копирует новые и создает деинсталлятор.
Его необходимо немного усовершенствовать:
1. Создать резервную копию файлов Game.dll и Game_DX11.dll.
2. Скопировать в корень игры 4 файла XVI32 .cmd/.exe/.ini/.xsc
3. Выполнить XVI32.cmd
4. Удалить эти 4 файла.
5. При деинсталляции вернуть исходные Game.dll и Game_DX11.dll.
Можете помочь с такой задачей?
P.S. с Inno Setup (да и в принципе с программированием) не дружу совсем.
158063

El Sanchez
09-07-2019, 11:01
Bio_Hazard, а пункты 2-4 это и есть усовершенствования по сравнению с "копирует новые"?

#define AppName "Game Name"

[Setup]
AppName={#AppName} Mod
AppVersion=1.0
DefaultDirName={pf}\{#AppName}
DirExistsWarning=no

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

[Files]
Source: {app}\Game.dll; DestDir: {app}; DestName: Game.dll.bkp; Flags: external skipifsourcedoesntexist
Source: {app}\Game_DX11.dll; DestDir: {app}; DestName: Game_DX11.dll.bkp; Flags: external skipifsourcedoesntexist
Source: xvi32.*; DestDir: {app}; Flags: deleteafterinstall

[Run]
Filename: {app}\xvi32.cmd; Flags: runhidden shellexec skipifdoesntexist

[UninstallDelete]
Type: files; Name: {app}\Game.dll.bkp
Type: files; Name: {app}\Game_DX11.dll.bkp

[Code]
procedure RestoreFromBackup(const AFileName: string);
var
LFileName: string;
begin
LFileName := ChangeFileExt(AFileName, '');
if FileExists(LFileName) then
FileCopy(AFileName, ChangeFileExt(AFileName, ''), False);
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
case CurUninstallStep of
usUninstall:
begin
RestoreFromBackup(ExpandConstant('{app}\Game.dll.bkp'));
RestoreFromBackup(ExpandConstant('{app}\Game_DX11.dll.bkp'));
end;
end;
end;

Bio_Hazard
09-07-2019, 15:37
Есть небольшой простой скрипт для установки мода в игру. Он делает бекап оригинальных файлов, копирует новые и создает деинсталлятор. »
Это делает текущий скрипт.

Я не знаю, почему мой архив не подгрузился (Файл 158063), но взяв большую часть Вашего кода, совместил его со "своим" и немного доработав XVI32.cmd, я получил рабочий, полностью удовлетворяющий мои цели скрипт. Может получилось немного топорно, но работает.

#define ModName "TQRagnarökMod by BioHazardN7"
#define ModVersion "2.3.27"
#define ModShortDescription "Модификация для Titan Quest"

[Setup]
AppId={{70653654-6624-42B4-B9A4-CAE370D75364}
AppName={#ModName} {#ModVersion}
AppVerName={#ModName} {#ModVersion}
// AppPublisher=http://tqrm.zzz.com.ua
// AppPublisherURL=http://tqrm.zzz.com.ua
// AppSupportURL=http://tqrm.zzz.com.ua
// AppUpdatesURL=http://tqrm.zzz.com.ua
DefaultDirName={code:GetInstallationPath}
DefaultGroupName={#ModName}
DirExistsWarning=no
DisableWelcomePage=no
AllowNoIcons=true
InfoBeforeFile=Data\Description.rtf
OutputDir=Release
OutputBaseFilename=TQRagnarokMod2327a_Installer
SetupIconFile=Data\Icon.ico
// Степень сжатия. Сильное: lzma/ultra
Compression=none
SolidCompression=true
VersionInfoVersion={#ModVersion}
// VersionInfoCompany=http://tqrm.zzz.com.ua
VersionInfoDescription={#ModShortDescription}
WizardImageFile=Data\Poster.bmp
// VersionInfoCopyright=(c) http://tqrm.zzz.com.ua
WizardSmallImageFile=Data\Logo.bmp

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

[Files]
Source: Files\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: CreateBackup
Source: {app}\Game.dll; DestDir: {app}; DestName: Game.dll.bak; Flags: external skipifsourcedoesntexist
Source: {app}\Game_DX11.dll; DestDir: {app}; DestName: Game_DX11.dll.bak; Flags: external skipifsourcedoesntexist

[Run]
Filename: {app}\xvi32.cmd; Flags: runhidden shellexec skipifdoesntexist

[UninstallDelete]
Type: files; Name: {app}\Game.dll.bak
Type: files; Name: {app}\Game_DX11.dll.bak

[Icons]
Name: {group}\{cm:ProgramOnTheWeb,{#ModName} {#ModVersion}}; Filename: http://tqrm.zzz.com.ua
Name: {group}\Последняя версия {#ModName}; Filename: http://tqrm.zzz.com.ua/ru/#download
Name: {group}\The latest version of {#ModName}; Filename: http://tqrm.zzz.com.ua/en/#download
Name: {group}\www.titanquest.org.ua; Filename: https://titanquest.org.ua/tqragnarokmod_by_biohazardn7
Name: {group}\vk.com; Filename: https://vk.com/tqrm_n7
Name: {group}\Telegram; Filename: https://t.me/TQRM_N7
Name: {group}\{cm:UninstallProgram,{#ModName} {#ModVersion}}; Filename: {uninstallexe}

// [Messages]
// BeveledLabel=http://tqrm.zzz.com.ua

[Code]

procedure RestoreFromBackup(const AFileName: string);
var
LFileName: string;
begin
LFileName := ChangeFileExt(AFileName, '');
if FileExists(LFileName) then
FileCopy(AFileName, ChangeFileExt(AFileName, ''), False);
end;

// DETECT PREVIOUS VERSION

function InitializeSetup(): Boolean;
begin
Result := True;
if RegKeyExists(HKEY_LOCAL_MACHINE,
'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') or
RegKeyExists(HKEY_LOCAL_MACHINE,
'SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') or
RegKeyExists(HKEY_CURRENT_USER,
'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') then
begin
Log('NEEED')
//MsgBox('Для переустановки или установки новой версии - необходимо удалить предыдущую', mbInformation, MB_OK);
//Result := False;
end;
end;

// CLICKABLE LINK TO TQ SITE

procedure BevelLabelClick(Sender: TObject);
var ErrorCode: Integer;
begin
ShellExec('open','http://tqrm.zzz.com.ua','', '', SW_SHOW, ewNoWait, ErrorCode)
end;

procedure InitializeWizard();
begin
with WizardForm do begin
with BeveledLabel do begin
OnClick:=@BevelLabelClick;
Font.Color:=clBlue;
Enabled:=True;
Cursor:=crHand;
end;
end;
end;

// PAGE WITH DESTINATION

procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpSelectDir then
begin
WizardForm.DirEdit.Enabled := True;
WizardForm.DirBrowseButton.Enabled := True;
end
else
end;


// CREATE BACKUP BEFORE INSTALL

procedure CreateBackup;
var
srcFile, destFile: string;
begin
if RegKeyExists(HKEY_LOCAL_MACHINE,
'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') or
RegKeyExists(HKEY_LOCAL_MACHINE,
'SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') or
RegKeyExists(HKEY_CURRENT_USER,
'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') then
begin
// Do nothing
end
else
begin
srcFile:= ExpandConstant(CurrentFileName);
destFile:= srcFile + '.bak';
DeleteFile(destFile);
RenameFile(srcFile, destFile);
end
end;

procedure RestoreBackup(backupDir: string);
var
srcFile, destFile: string;
FSR, DSR: TFindRec;
FindResult: Boolean;
APath: string;
begin
APath := AddBackslash(backupDir);
FindResult := FindFirst(APath + '*.bak', FSR);
try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
srcFile:= APath + FSR.Name;
destFile:= Copy(srcFile, 0, Length(srcFile)-4);
DeleteFile(destFile);
RenameFile(srcFile, destFile);
end;
FindResult := FindNext(FSR);
end;
FindResult := FindFirst(APath + '*.*', DSR);
while FindResult do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
not ((DSR.Name = '.') or (DSR.Name = '..')) then
{Recursion} RestoreBackup(APath + DSR.Name);
FindResult := FindNext(DSR);
end;
finally
FindClose(FSR);
FindClose(DSR);
end;
end;

// RESTORE BACKUP AFTER UNINSTALL

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
RestoreBackup(ExpandConstant('{app}'))
end;
begin
case CurUninstallStep of
usUninstall:
begin
RestoreFromBackup(ExpandConstant('{app}\Game.dll.bak'));
RestoreFromBackup(ExpandConstant('{app}\Game_DX11.dll.bak'));
end;
end;
end;
end;

// DETECT PATH OF INSTALLATION

var
InstallationPath: string;

function GetInstallationPath(Param: string): string;
begin
{ Detected path is cached, as this gets called multiple times }
if InstallationPath = '' then
begin
if RegQueryStringValue(
HKLM32, 'SOFTWARE\WOW6432Node\GOG.com\Games\1196955511',
'path', InstallationPath) then
begin
Log('Detected GOG installation: ' + InstallationPath);
end
else
if RegQueryStringValue(
HKLM64, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 475150',
'InstallLocation', InstallationPath) then
begin
Log('Detected Steam installation: ' + InstallationPath);
end
else
begin
InstallationPath := ExpandConstant('{pf}');
MsgBox('Не удалось автоматически определить где установлена игра. В ходе установки укажите путь вручную', mbInformation, MB_OK);
Log('No installation detected, using the default path: ' + InstallationPath);
end;
end;
Result := InstallationPath;
end;

Спасибо за помощь!

El Sanchez
09-07-2019, 21:39
я получил рабочий, полностью удовлетворяющий мои цели скрипт »
Bio_Hazard, использование явного указания WOW6432Node в коде - это преступление против человечества, уберите все RegKeyExists, где есть WOW6432Node в параметре.

Bio_Hazard
09-07-2019, 23:06
использование явного указания WOW6432Node в коде - это преступление против человечества, уберите все RegKeyExists, где есть WOW6432Node в параметре. »
Спасибо за совет, исправил.

Bio_Hazard
16-07-2019, 15:16
Здравствуйте. Обнаружился косяк при установке на 32-х битных системах (обнаружилось на Windows 7)
http://i.piccy.info/i9/b3e7beb081464f0b2904b346dcb833df/1563279861/25644/1328096/error.jpg#define ModName "TQRagnarökMod by BioHazardN7"
#define ModVersion "2.3.27"
#define ModShortDescription "Модификация для Titan Quest"

[Setup]
AppId={{70653654-6624-42B4-B9A4-CAE370D75364}
AppName={#ModName} {#ModVersion}
AppVerName={#ModName} {#ModVersion}
// AppPublisher=http://tqrm.zzz.com.ua
// AppPublisherURL=http://tqrm.zzz.com.ua
// AppSupportURL=http://tqrm.zzz.com.ua
// AppUpdatesURL=http://tqrm.zzz.com.ua
DefaultDirName={code:GetInstallationPath}
DefaultGroupName={#ModName}
DirExistsWarning=no
DisableWelcomePage=no
AllowNoIcons=true
InfoBeforeFile=Data\Description.rtf
OutputDir=Release
OutputBaseFilename=TQRagnarokMod2327a_Installer
SetupIconFile=Data\Icon.ico
// Степень сжатия. Сильное: lzma/ultra
Compression=none
SolidCompression=true
VersionInfoVersion={#ModVersion}
// VersionInfoCompany=http://tqrm.zzz.com.ua
VersionInfoDescription={#ModShortDescription}
WizardImageFile=Data\Poster.bmp
// VersionInfoCopyright=(c) http://tqrm.zzz.com.ua
WizardSmallImageFile=Data\Logo.bmp

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

[Files]
Source: Files\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: CreateBackup
Source: {app}\Game.dll; DestDir: {app}; DestName: Game.dll.bak; Flags: external skipifsourcedoesntexist
Source: {app}\Game_DX11.dll; DestDir: {app}; DestName: Game_DX11.dll.bak; Flags: external skipifsourcedoesntexist

[Run]
Filename: {app}\xvi32.cmd; Flags: runhidden shellexec skipifdoesntexist

[UninstallDelete]
Type: files; Name: {app}\Game.dll.bak
Type: files; Name: {app}\Game_DX11.dll.bak

[Icons]
Name: {group}\{cm:ProgramOnTheWeb,{#ModName} {#ModVersion}}; Filename: http://tqrm.zzz.com.ua
Name: {group}\Последняя версия {#ModName}; Filename: http://tqrm.zzz.com.ua/ru/#download
Name: {group}\The latest version of {#ModName}; Filename: http://tqrm.zzz.com.ua/en/#download
Name: {group}\www.titanquest.org.ua; Filename: https://titanquest.org.ua/tqragnarokmod_by_biohazardn7
Name: {group}\vk.com; Filename: https://vk.com/tqrm_n7
Name: {group}\Telegram; Filename: https://t.me/TQRM_N7
Name: {group}\{cm:UninstallProgram,{#ModName} {#ModVersion}}; Filename: {uninstallexe}

// [Messages]
// BeveledLabel=http://tqrm.zzz.com.ua

[Code]

procedure RestoreFromBackup(const AFileName: string);
var
LFileName: string;
begin
LFileName := ChangeFileExt(AFileName, '');
if FileExists(LFileName) then
FileCopy(AFileName, ChangeFileExt(AFileName, ''), False);
end;

// DETECT PREVIOUS VERSION

function InitializeSetup(): Boolean;
begin
Result := True;
if RegKeyExists(HKEY_LOCAL_MACHINE,
'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') or
RegKeyExists(HKEY_CURRENT_USER,
'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') then
begin
Log('NEEED')
//MsgBox('Для переустановки или установки новой версии - необходимо удалить предыдущую', mbInformation, MB_OK);
//Result := False;
end;
end;

// CLICKABLE LINK TO TQ SITE

procedure BevelLabelClick(Sender: TObject);
var ErrorCode: Integer;
begin
ShellExec('open','http://tqrm.zzz.com.ua','', '', SW_SHOW, ewNoWait, ErrorCode)
end;

procedure InitializeWizard();
begin
with WizardForm do begin
with BeveledLabel do begin
OnClick:=@BevelLabelClick;
Font.Color:=clBlue;
Enabled:=True;
Cursor:=crHand;
end;
end;
end;

// PAGE WITH DESTINATION

procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpSelectDir then
begin
WizardForm.DirEdit.Enabled := True;
WizardForm.DirBrowseButton.Enabled := True;
end
else
end;


// CREATE BACKUP BEFORE INSTALL

procedure CreateBackup;
var
srcFile, destFile: string;
begin
if RegKeyExists(HKEY_LOCAL_MACHINE,
'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') or
RegKeyExists(HKEY_CURRENT_USER,
'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') then
begin
// Do nothing
end
else
begin
srcFile:= ExpandConstant(CurrentFileName);
destFile:= srcFile + '.bak';
DeleteFile(destFile);
RenameFile(srcFile, destFile);
end
end;

procedure RestoreBackup(backupDir: string);
var
srcFile, destFile: string;
FSR, DSR: TFindRec;
FindResult: Boolean;
APath: string;
begin
APath := AddBackslash(backupDir);
FindResult := FindFirst(APath + '*.bak', FSR);
try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
srcFile:= APath + FSR.Name;
destFile:= Copy(srcFile, 0, Length(srcFile)-4);
DeleteFile(destFile);
RenameFile(srcFile, destFile);
end;
FindResult := FindNext(FSR);
end;
FindResult := FindFirst(APath + '*.*', DSR);
while FindResult do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
not ((DSR.Name = '.') or (DSR.Name = '..')) then
{Recursion} RestoreBackup(APath + DSR.Name);
FindResult := FindNext(DSR);
end;
finally
FindClose(FSR);
FindClose(DSR);
end;
end;

// RESTORE BACKUP AFTER UNINSTALL

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
RestoreBackup(ExpandConstant('{app}'))
end;
begin
case CurUninstallStep of
usUninstall:
begin
RestoreFromBackup(ExpandConstant('{app}\Game.dll.bak'));
RestoreFromBackup(ExpandConstant('{app}\Game_DX11.dll.bak'));
end;
end;
end;
end;

// DETECT PATH OF INSTALLATION

var
InstallationPath: string;

function GetInstallationPath(Param: string): string;
begin
{ Detected path is cached, as this gets called multiple times }
if InstallationPath = '' then
begin
if RegQueryStringValue(
HKLM32, 'SOFTWARE\GOG.com\Games\1196955511',
'path', InstallationPath) then
begin
Log('Detected GOG installation: ' + InstallationPath);
end
else
if RegQueryStringValue(
HKLM64, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 475150',
'InstallLocation', InstallationPath) then
begin
Log('Detected Steam installation: ' + InstallationPath);
end
else
begin
InstallationPath := ExpandConstant('{pf}');
MsgBox('Не удалось автоматически определить где установлена игра. В ходе установки укажите путь вручную', mbInformation, MB_OK);
Log('No installation detected, using the default path: ' + InstallationPath);
end;
end;
Result := InstallationPath;
end;
Можете подсказать как исправить?

Dodakaedr
16-07-2019, 16:11
Обнаружился косяк при установке на 32-х битных системах »
Замените функцию и пробуйтеfunction GetInstallationPath(Param: string): string;
begin
{ Detected path is cached, as this gets called multiple times }
if InstallationPath = '' then
begin
if RegQueryStringValue(
HKLM32, 'SOFTWARE\GOG.com\Games\1196955511',
'path', InstallationPath) then
begin
Log('Detected GOG installation: ' + InstallationPath);
end
else
if IsWin64 then
if RegQueryStringValue(
HKLM64, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 475150',
'InstallLocation', InstallationPath) then
begin
Log('Detected Steam installation: ' + InstallationPath);
end
else
begin
InstallationPath := ExpandConstant('{pf}');
MsgBox('Не удалось автоматически определить где установлена игра. В ходе установки укажите путь вручную', mbInformation, MB_OK);
Log('No installation detected, using the default path: ' + InstallationPath);
end;
end;
Result := InstallationPath;
end;

Bio_Hazard
18-07-2019, 12:18
Замените функцию и пробуйте »
Спасибо, работает.

Romann_
22-07-2019, 22:28
Как вставить видео в инсталлятор?
этой библиотекой ещё можно
норм библиотека от Vintage)
Всем привет.
Все ссылки, в прочем как и имеющиеся советы - устарели. Может ли кто нибудь подсказать - как в инсталлятор вставить фоновое видео, вместо картинки?
********************************************
И ещё вопрос - как можно нормально проверить системные требования? - Уже третьи сутки ищу по форумам, везде попадается старый код для проверки XPюши или ниже, найти бы способ проверки современных ОС, а так же разрядность системы. Ну и не помешало бы адекватно проверить и остальные сис. требования, а то я нашёл старенький скрипт инсталлятора с проверкой - у меня стоит видюха на 6Гб, а проверка на 1024 - а пишет, что моего видео не достаточно, только на ОЗУ нормально работает.

Romann_
24-07-2019, 12:36
так же разрядность системы »
Нашёл необходимый код, имеем такое:


procedure UpdateInfo();
var
DeviceName, DeviceKey: String;
begin
ChangeText := False

GetWindowsVersionEx(Version)

// Операционная система:
SystemVersionPanel.Color := clBlack
SystemVersionPanel.Font.Color := clGreen

DeviceKey := 'Software\Microsoft\Windows NT\CurrentVersion'
if not UsingWinNT then StringChange(DeviceKey, 'Windows NT', 'Windows')
RegQueryStringValue(HKLM, DeviceKey, 'ProductName', DeviceName)
if RegQueryStringValue(HKLM, DeviceKey, 'CSDVersion', DeviceKey) then
DeviceName := DeviceName + ' ' + DeviceKey
StringChange(DeviceName, 'Microsoft ', '')
SystemVersionPanel.Text := ' ' + DeviceName + ' сборка ' + IntToStr(Version.Major) + '.' + IntToStr(Version.Minor) +
'.' + IntToStr(Version.Build)

if (Pos('Windows 10', SystemVersionPanel.Text) = 0) and // Windows 10
(Pos('Windows 7', SystemVersionPanel.Text) = 0) then // Windows 7
begin
SystemVersionPanel.Color := clBlack
SystemVersionPanel.Font.Color := clRed
ChangeText := True
end
...
...
...

Всё работает. Но как можно ещё проверить разрядность системы?(У некоторых всё ещё есть win7 х86.)

habib2302
24-07-2019, 12:42
Romann_, можете еще проштудировать форум http://krinkels.org/

ErikPshat
24-07-2019, 13:30
Но как можно ещё проверить разрядность системы?(У некоторых всё ещё есть win7 х86.) »
Ну могу поделиться готовым рабочим шаблоном по определению версии Windows (XP/7/Vista/8/8.1/10) и её разрядности. Там как раз ответы на все ваши вопросы, надеюсь разберётесь. Правда там подмешано определение, скачивание и установка нужной версии PowerShell. Ну и ещё там подключён плагин "Inno Download Plugin", подключён скин и подключена заставка, ну и ещё 3 языка. Надеюсь вы сами сможете убрать что лишнее и применить по своему назначению... Правда там это всё реализовано совсем по-другому, у меня прекрасно работает, может пригодится и поможет. Название программы и ссылки изменены. Не забудьте убрать нижнее подчёркивание из названия секции [_Code]
;InnoSetupVersion=5.6.1 (Unicode)
#pragma include __INCLUDE__ + ";" + ReadReg(HKLM, "Software\Mitrich Software\Inno Download Plugin", "InstallDir")

#define MyApp "My Super-Puper Programm"
#define ShortName "MSPP"
#define Version "3.4.2"
#define Publisher "by SuperUser"
#define Team "Super Team"
#define URL "http://forum.oszone.net/post-2881225.html"
#define UpdatesURL "https://github.com/SuperUser/SuperTeam/blob/master/update.exe"
#define ExeName "MSPP"
#define Skin "CrystalBlue"

[Setup]
AppId={{E4F0B51A-4567-4C49-AD5D-D9A8B6BBBCF3F}
AppName={#ShortName}
AppVersion={#Version}
AppVerName={#MyApp} v{#Version}
AppPublisher={#MyApp} {#Team}
AppPublisherURL={#URL}
AppSupportURL={#URL}
AppUpdatesURL={#UpdatesURL}
DefaultDirName={sd}\{#ShortName}
DefaultGroupName={#ShortName}
ShowLanguageDialog=no
UninstallDisplayIcon={app}\MSPP.exe
UninstallDisplayName={#ShortName}
AllowNoIcons=yes
OutputDir=.
OutputBaseFilename=setup
SetupIconFile=embedded\myicon.ico
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp
WizardImageAlphaFormat=premultiplied
VersionInfoCompany={#Team}
VersionInfoCopyright={#ShortName} {#Publisher}
VersionInfoDescription={#MyApp} {#Publisher}
VersionInfoVersion={#Version}
Compression=lzma2/max
SolidCompression=Yes

#include <idp.iss>
#include <idplang\Russian.iss>
#include <idplang\German.iss>

[Files]
Source: "embedded\ISSkin\ISSkinU.dll"; DestDir: {tmp}; Flags: dontcopy
Source: "embedded\ISSkin\Styles\{#Skin}.cjstyles"; DestDir: {tmp}; Flags: dontcopy
Source: "embedded\7z.dll"; DestDir: {tmp}; Flags: dontcopy
Source: "embedded\7z.exe"; DestDir: {tmp}; Flags: dontcopy
Source: "embedded\7z32.dll"; DestDir: {tmp}; Flags: dontcopy
Source: "embedded\7z32.exe"; DestDir: {tmp}; Flags: dontcopy
Source: "{app}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "embedded\EN\config.ini"; DestDir: "{app}"; Languages: en; Flags: ignoreversion
Source: "embedded\RU\config.ini"; DestDir: "{app}"; Languages: ru; Flags: ignoreversion
Source: "embedded\DE\config.ini"; DestDir: "{app}"; Languages: de; Flags: ignoreversion

[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"; InfoBeforeFile: "embedded\InfoBefore-ru.rtf"
Name: "en"; MessagesFile: "compiler:Default.isl"; InfoBeforeFile: "embedded\InfoBefore-en.rtf"
Name: "de"; MessagesFile: "compiler:Languages\German.isl"; InfoBeforeFile: "embedded\InfoBefore-de.rtf"

[CustomMessages]
ru.CautionXP64=Для работы программы требуется PowerShell 5.1.%nНа Windows XP 64bit программа не сможет скачивать обновления для конвертации игр и выполнять некоторые другие функции.
ru.CautionVI64=Для работы программы требуется PowerShell 5.1.%nНа Windows Vista 64bit программа не сможет скачивать обновления для конвертации игр и выполнять некоторые другие функции.
ru.Caution7064=На компьютере обнаружена устаревшая версия PowerShell.%nПосле установки программы будет произведено скачивание и установка обновления PowerShell 5.1 для Windows 7 64bit.%n%nПожалуйста, дождитесь завершения обновления!
ru.Caution8064=На компьютере обнаружена устаревшая версия PowerShell.%nПосле установки программы будет произведено скачивание и установка обновления PowerShell 5.1 для Windows 8.0 64bit.%n%nПожалуйста, дождитесь завершения обновления!
ru.Caution8164=На компьютере обнаружена устаревшая версия PowerShell.%nПосле установки программы будет произведено скачивание и установка обновления PowerShell 5.1 для Windows 8.1 64bit.%n%nПожалуйста, дождитесь завершения обновления!
ru.CautionXP32=Для работы программы требуется PowerShell 5.1.%nНа Windows XP 32bit программа не сможет скачивать обновления для конвертации игр и выполнять некоторые другие функции.
ru.CautionVI32=Для работы программы требуется PowerShell 5.1.%nНа Windows Vista 32bit программа не сможет скачивать обновления для конвертации игр и выполнять некоторые другие функции.
ru.Caution7032=На компьютере обнаружена устаревшая версия PowerShell.%nПосле установки программы будет произведено скачивание и установка обновления PowerShell 5.1 для Windows 7 32bit.%n%nПожалуйста, дождитесь завершения обновления!
ru.Caution8132=На компьютере обнаружена устаревшая версия PowerShell.%nПосле установки программы будет произведено скачивание и установка обновления PowerShell 5.1 для Windows 8.1 32bit.%n%nПожалуйста, дождитесь завершения обновления!

en.CautionXP64=The program requires PowerShell 5.1.%nOn Windows XP 64bit, the program will not be able to download updates for converting games and perform some other functions.
en.CautionVI64=The program requires PowerShell 5.1.%nOn Windows Vista 64bit, the program will not be able to download updates for converting games and perform some other functions.
en.Caution7064=An outdated version of PowerShell has been detected on your computer.%nAfter installing the program, the PowerShell 5.1 update for Windows 7 64bit will be downloaded and installed.%n%nPlease wait until the update is complete!
en.Caution8064=An outdated version of PowerShell has been detected on your computer.%nAfter installing the program, the PowerShell 5.1 update for Windows 8.0 64bit will be downloaded and installed.%n%nPlease wait until the update is complete!
en.Caution8164=An outdated version of PowerShell has been detected on your computer.%nAfter installing the program, the PowerShell 5.1 update for Windows 8.1 64bit will be downloaded and installed.%n%nPlease wait until the update is complete!
en.CautionXP32=The program requires PowerShell 5.1.%nOn Windows XP 32bit, the program will not be able to download updates for converting games and perform some other functions.
en.CautionVI32=The program requires PowerShell 5.1.%nOn Windows Vista 32bit, the program will not be able to download updates for converting games and perform some other functions.
en.Caution7032=An outdated version of PowerShell has been detected on your computer.%nAfter installing the program, the PowerShell 5.1 update for Windows 7 32bit will be downloaded and installed.%n%nPlease wait until the update is complete!
en.Caution8132=An outdated version of PowerShell has been detected on your computer.%nAfter installing the program, the PowerShell 5.1 update for Windows 8.1 32bit will be downloaded and installed.%n%nPlease wait until the update is complete!

de.CautionXP64=Das Programm erfordert PowerShell 5.1.%nUnter Windows XP 64bit kann das Programm keine Updates zum Konvertieren von Spielen herunterladen und einige andere Funktionen ausführen.
de.CautionVI64=Das Programm erfordert PowerShell 5.1.%nUnter Windows Vista 64bit kann das Programm keine Updates zum Konvertieren von Spielen herunterladen und einige andere Funktionen ausführen.
de.Caution7064=Auf Ihrem Computer wurde eine veraltete Version von PowerShell erkannt.%nNach der Installation des Programms wird das PowerShell 5.1-Update für Windows 7 64bit heruntergeladen und installiert.%n%nBitte warten Sie bis das Update abgeschlossen ist!
de.Caution8064=Auf Ihrem Computer wurde eine veraltete Version von PowerShell erkannt.%nNach der Installation des Programms wird das PowerShell 5.1-Update für Windows 8.0 64bit heruntergeladen und installiert.%n%nBitte warten Sie bis das Update abgeschlossen ist!
de.Caution8164=Auf Ihrem Computer wurde eine veraltete Version von PowerShell erkannt.%nNach der Installation des Programms wird das PowerShell 5.1-Update für Windows 8.1 64bit heruntergeladen und installiert.%n%nBitte warten Sie bis das Update abgeschlossen ist!
de.CautionXP32=Das Programm erfordert PowerShell 5.1.%nUnter Windows XP 32bit kann das Programm keine Updates zum Konvertieren von Spielen herunterladen und einige andere Funktionen ausführen.
de.CautionVI32=Das Programm erfordert PowerShell 5.1.%nUnter Windows Vista 32bit kann das Programm keine Updates zum Konvertieren von Spielen herunterladen und einige andere Funktionen ausführen.
de.Caution7032=Auf Ihrem Computer wurde eine veraltete Version von PowerShell erkannt.%nNach der Installation des Programms wird das PowerShell 5.1-Update für Windows 7 32bit heruntergeladen und installiert.%n%nBitte warten Sie bis das Update abgeschlossen ist!
de.Caution8132=Auf Ihrem Computer wurde eine veraltete Version von PowerShell erkannt.%nNach der Installation des Programms wird das PowerShell 5.1-Update für Windows 8.1 32bit heruntergeladen und installiert.%n%nBitte warten Sie bis das Update abgeschlossen ist!

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"

[Icons]
Name: "{group}\{#ShortName}"; Filename: "{app}\{#ExeName}"
Name: "{group}\{cm:ProgramOnTheWeb,{#ShortName}}"; Filename: "{#URL}"
Name: "{group}\{cm:UninstallProgram,{#ShortName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#ShortName}"; Filename: "{app}\{#ExeName}"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#ShortName}"; Filename: "{app}\{#ExeName}"; Tasks: quicklaunchicon

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

[_Code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:ISSkinU.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:ISSkinU.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

function IsWindowsVersionOrNewer(Major, Minor: Integer): Boolean;
var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
Result := (Version.Major > Major) or ((Version.Major = Major) and (Version.Minor >= Minor));
end;

function IsWindowsXPOrNewer: Boolean; begin Result := IsWindowsVersionOrNewer(5, 1); end;
function IsWindowsViOrNewer: Boolean; begin Result := IsWindowsVersionOrNewer(6, 0); end;
function IsWindows70OrNewer: Boolean; begin Result := IsWindowsVersionOrNewer(6, 1); end;
function IsWindows80OrNewer: Boolean; begin Result := IsWindowsVersionOrNewer(6, 2); end;
function IsWindows81OrNewer: Boolean; begin Result := IsWindowsVersionOrNewer(6, 3); end;
function IsWindows10OrNewer: Boolean; begin Result := IsWindowsVersionOrNewer(10,0); end;

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('{#Skin}.cjstyles');
LoadSkin(ExpandConstant('{tmp}\{#Skin}.cjstyles'), '');
Result := True;
end;

// Скачиваем PowerShell 5.1 под нашу версию Windows и битность...
procedure InitializeWizard;
var
PSVersion: String;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine','PowerShellVersion', PSVersion);
if Copy(PSVersion,1,3) < '5.1' then
begin
if IsWin64 then
begin
if IsWindowsXPOrNewer and not IsWindowsViOrNewer then begin MsgBox(ExpandConstant('{cm:CautionXP64}'),mbCriticalError, MB_OK); end else
if IsWindowsViOrNewer and not IsWindows70OrNewer then begin MsgBox(ExpandConstant('{cm:CautionVI64}'),mbCriticalError, MB_OK); end else
if IsWindows70OrNewer and not IsWindows80OrNewer then begin MsgBox(ExpandConstant('{cm:Caution7064}'), mbInformation, MB_OK);
idpAddFileSize('https://download.microsoft.com/download/6/F/5/6F5FF66C-6775-42B0-86C4-47D41F2DA187/Win7AndW2K8R2-KB3191566-x64.zip',ExpandConstant('{tmp}\Win7AndW2K8R2-KB3191566-x64.zip'),68076477); end else
if IsWindows80OrNewer and not IsWindows81OrNewer then begin MsgBox(ExpandConstant('{cm:Caution8064}'), mbInformation, MB_OK);
idpAddFileSize('https://download.microsoft.com/download/6/F/5/6F5FF66C-6775-42B0-86C4-47D41F2DA187/W2K12-KB3191565-x64.msu',ExpandConstant('{tmp}\W2K12-KB3191565-x64.msu'),21585220); end else
if IsWindows81OrNewer and not IsWindows10OrNewer then begin MsgBox(ExpandConstant('{cm:Caution8164}'), mbInformation, MB_OK);
idpAddFileSize('https://download.microsoft.com/download/6/F/5/6F5FF66C-6775-42B0-86C4-47D41F2DA187/Win8.1AndW2K12R2-KB3191564-x64.msu',ExpandConstant('{tmp}\Win8.1AndW2K12R2-KB3191564-x64.msu'),19878906); end;
end
else
begin
if IsWindowsXPOrNewer and not IsWindowsViOrNewer then begin MsgBox(ExpandConstant('{cm:CautionXP32}'),mbCriticalError, MB_OK); end else
if IsWindowsViOrNewer and not IsWindows70OrNewer then begin MsgBox(ExpandConstant('{cm:CautionVI32}'),mbCriticalError, MB_OK); end else
if IsWindows70OrNewer and not IsWindows80OrNewer then begin MsgBox(ExpandConstant('{cm:Caution7032}'), mbInformation, MB_OK);
idpAddFileSize('https://download.microsoft.com/download/6/F/5/6F5FF66C-6775-42B0-86C4-47D41F2DA187/Win7-KB3191566-x86.zip',ExpandConstant('{tmp}\Win7-KB3191566-x86.zip'),44821734); end else
if IsWindows81OrNewer and not IsWindows10OrNewer then begin MsgBox(ExpandConstant('{cm:Caution8132}'), mbInformation, MB_OK);
idpAddFileSize('https://download.microsoft.com/download/6/F/5/6F5FF66C-6775-42B0-86C4-47D41F2DA187/Win8.1-KB3191564-x86.msu',ExpandConstant('{tmp}\Win8.1-KB3191564-x86.msu'),15231117); end;
end;
idpDownloadAfter(wpReady);
end;
end;

// Во время показа страницы загрузки открываем по умолчанию скрытые детали загрузки...
procedure CurPageChanged(CurPageID: Integer);
begin
if Assigned(IDPForm.Page) then
begin
if CurPageID = IDPForm.Page.ID then
begin
// Показать детали загрузки
idpShowDetails(True);
// Скрываем кнопку Подробно/Скрыть
IDPForm.DetailsButton.Visible := False;
end;
end;
end;

// Распаковываем ранее скачанный ZIP/MSU и запускаем установку...
procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
if CurStep = ssPostInstall then
begin
if IsWin64 then
begin
if FileExists(ExpandConstant('{tmp}\Win7AndW2K8R2-KB3191566-x64.zip')) then
begin
ExtractTemporaryFile('7z.exe');
ExtractTemporaryFile('7z.dll');
ShellExec('open',ExpandConstant('{tmp}\7z.exe'),ExpandConstant('x -y -oExtractedArchive ')+ExpandConstant('Win7AndW2K8R2-KB3191566-x64.zip'),'',SW_HIDE,ewWaitUntilTerminated,ResultCode);
ShellExec('open',ExpandConstant('{sys}\wusa.exe'),ExpandConstant('{tmp}\ExtractedArchive\Win7AndW2K8 R2-KB3191566-x64.msu'),'',SW_SHOWNORMAL,ewWaitUntilTerminated,ResultCode);
end;
if FileExists(ExpandConstant('{tmp}\W2K12-KB3191565-x64.msu')) then ShellExec('open',ExpandConstant('{sys}\wusa.exe'),ExpandConstant('{tmp}\W2K12-KB3191565-x64.msu'),'',SW_SHOWNORMAL,ewWaitUntilTerminated,ResultCode);
if FileExists(ExpandConstant('{tmp}\Win8.1AndW2K12R2-KB3191564-x64.msu')) then ShellExec('open',ExpandConstant('{sys}\wusa.exe'),ExpandConstant('{tmp}\Win8.1AndW2K12R2-KB3191564-x64.msu'),'',SW_SHOWNORMAL,ewWaitUntilTerminated,ResultCode);
end
else
begin
if FileExists(ExpandConstant('{tmp}\Win7-KB3191566-x86.zip')) then
begin
ExtractTemporaryFile('7z32.exe');
ExtractTemporaryFile('7z32.dll');
ShellExec('open',ExpandConstant('{tmp}\7z32.exe'),ExpandConstant('x -y -oExtractedArchive ')+ExpandConstant('Win7-KB3191566-x86.zip'),'',SW_HIDE,ewWaitUntilTerminated,ResultCode);
ShellExec('open',ExpandConstant('{sys}\wusa.exe'),ExpandConstant('{tmp}\ExtractedArchive\Win7-KB3191566-x86.msu'),'',SW_SHOWNORMAL,ewWaitUntilTerminated,ResultCode);
end;
if FileExists(ExpandConstant('{tmp}\Win8.1-KB3191564-x86.msu')) then ShellExec('open',ExpandConstant('{sys}\wusa.exe'),ExpandConstant('{tmp}\Win8.1-KB3191564-x86.msu'),'',SW_SHOWNORMAL,ewWaitUntilTerminated,ResultCode);
end;
end;
end;

procedure DeinitializeSetup();
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;

Romann_
07-08-2019, 06:26
так же разрядность системы »
Нашёл необходимый код, имеем такое:


procedure UpdateInfo();
var
DeviceName, DeviceKey: String;
begin
ChangeText := False

GetWindowsVersionEx(Version)

// Операционная система:
SystemVersionPanel.Color := clBlack
SystemVersionPanel.Font.Color := clGreen

DeviceKey := 'Software\Microsoft\Windows NT\CurrentVersion'
if not UsingWinNT then StringChange(DeviceKey, 'Windows NT', 'Windows')
RegQueryStringValue(HKLM, DeviceKey, 'ProductName', DeviceName)
if RegQueryStringValue(HKLM, DeviceKey, 'CSDVersion', DeviceKey) then
DeviceName := DeviceName + ' ' + DeviceKey
StringChange(DeviceName, 'Microsoft ', '')
SystemVersionPanel.Text := ' ' + DeviceName + ' сборка ' + IntToStr(Version.Major) + '.' + IntToStr(Version.Minor) +
'.' + IntToStr(Version.Build)

if (Pos('Windows 10', SystemVersionPanel.Text) = 0) and // Windows 10
(Pos('Windows 7', SystemVersionPanel.Text) = 0) then // Windows 7
begin
SystemVersionPanel.Color := clBlack
SystemVersionPanel.Font.Color := clRed
ChangeText := True
end
...
...
...

Всё работает. Но как можно ещё проверить разрядность системы?

ErikPshat
07-08-2019, 08:34
Но как можно ещё проверить разрядность системы? »
Вы уже третий раз задаёте один и тот же вопрос :) Выше же я вам дал код определения разрядности системы, просто там в соответствии с разрядностью идёт скачивание PowerShell определённой версии и разрядности, а вам надо было просто подменить тот код на вывод информации на экран, либо воспроизведение каких-либо действий, по вашему желанию.
В общем вот вам чистый код по определению разрядности с подробными комментариями "//", строки с комментариями можете после осознования удалить, простая функция Inno Setup:
// До секции CODE прописываем свои текстовые сообщения, чтобы не отнимать место в коде программы в секции CODE:

[CustomMessages]
Info-text-x64=У вас разрядность системы Windows - x64.%nЭто значит, что система 64-битная.%n%nНе переживайте, всё будет хорошо.
Info-text-x86=У вас разрядность системы Windows - x86.%nЭто значит, что система 32-битная.%n%nНе переживайте, всё будет хорошо.

// То, что ниже, пишем в секции CODE:

// Если у вас x64, тогда...
if IsWin64 then
// Выполняем в таком случае код между "begin" и "end" (между стартом и концом):
begin
// Выводим оповещение об разрядности x64 на экран:
MsgBox(ExpandConstant('{cm:Info-text-x64}'), mbInformation, MB_OK);
end

// В противном случае (т.е. если у вас не x64, а значит x86):
else
// Выполняем в таком случае код между "begin" и "end" (между стартом и концом)
begin
// Выводим оповещение об разрядности x86 на экран
MsgBox(ExpandConstant('{cm:Info-text-x86}'), mbInformation, MB_OK);
end;

Карась з Днiпра
26-09-2019, 02:21
Здраствуйте. Подскажите пожалуйста, как добавить программу в автозагрузку так, чтобы аваст не ругался?
Сейчас используется строка
Name: "{commonstartup}\Активація перекладу"; Filename: "{app}\ua_lang\Активація перекладу.exe"; Components: translate\auto; AfterInstall: ExecStartupFile()

Находит IDP.Generic.

Сама программа абсолютно безвредна. Даже если новосозданный текстовик переименовать в "Активація перекладу.exe" и скомпилировать скрипт, реакция аваста всё та же - IDP.Generic.

Это однозначно должно как-то исправляться. Очень прошу вашего совета.

iglezz
26-09-2019, 09:12
Карась з Днiпра,
Аваст, видимо, параноит на слово "Активація" в сочетании с расширением/типом исполняемого файла.

Попробовать исправить это можно:
1. изменением имени файла, если это допустимо
2. хранением внутри установщика файла под другим именем с переименовыванием после копирования в место назначения.
3. защитой паролем/шифрование имён внутри архива/установщика, чтобы антивирус не видел имён файлов.
4. обращением к разработчикам Аваста, чтобы они после проверки добавили этот .exe в исключения.
5. <что-нибудь связанное с заменой этого параноика на более адекватное решение>.
6. ....

Карась з Днiпра
26-09-2019, 12:05
Спасибо за совет. Но вот пятый вариант решения точно не подходит. Я пишу программу для всех, не только для себя, и важно, чтобы антивири не пугали народ.




© OSzone.net 2001-2012