Войти

Показать полную графическую версию : Скрипты 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

TROY Diamond
29-03-2023, 02:07
Здравствуйте!
Подскажите, пожалуйста, код как можно реализовать случайное копирование определенного файла, при каждом новом запуске инсталлятора, Условно говоря у меня есть файл 1.txt, таких файлов будет 10-20-30.
Можно ли сделать так, чтобы при каждом новом запуске-установке чтобы копировался один из этих файлов в папку установки, вне зависимости ни от чего. Просто новая установка - копирование нового файла. Или же запись в этот файл определенного значения из списка который я укажу.
Суть - нужно просто чтобы информация в файле при каждой новой установке менялась или случайно или, пускай даже подряд. Первая установка - первое значение (файл), вторая установка - второй файл (значение).
Это вообще реально сделать?
Никаких задач (компонентов) для выбора пользователю не нужно, а то так бы да, я бы мог предложить пользователю выбрать один их этих файлов. )) Нет, так не надо! Надо чтобы совершенно без участия пользователя, чтобы копировался один и тот же файл в папку установки, но с разным значением или один любой из 10-20-30 файлов, которые я положу отдельно, но имя у них при копировании в папку установки должно быть одно и тоже, т.е. у меня будет 1-2-3-4-5-6-7... txt, где-то лежать до компиляции, а в конечном итоге в папке назначения (установки) должен скопироваться любой из этих файлов, но получить название 1.txt
Помогите, пожалуйста! Желательно для Юникод версии Inno Setup!

El Sanchez
30-03-2023, 09:34
Надо чтобы совершенно без участия пользователя, чтобы копировался один и тот же файл в папку установки, но с разным значением »
[Files]
Source: "1.txt"; DestDir: {app}; Flags: ignoreversion; AfterInstall: WriteRandomFile

[Code]
procedure WriteRandomFile;
begin
SaveStringToFile(ExpandConstant(CurrentFileName), GetMD5OfString(ExpandConstant('{tmp}')), False);
end;

Vladimir_02
30-07-2023, 12:05
Может кому пригодится. Добавление своих строк в файл hosts и удаление их при деинсталляции


procedure AddLineToFile(FileName, Line: String);
var
Lines: TStringList;
begin
// Создаем объект TStringList для чтения файла в память
Lines := TStringList.Create;
try
// Загружаем содержимое файла в TStringList
Lines.LoadFromFile(FileName);

// Проверяем, существует ли строка в файле
if Lines.IndexOf(Line) = -1 then
begin
// Если строка не существует, добавляем ее в конец списка
Lines.Add(Line);

// Сохраняем изменения обратно в файл
Lines.SaveToFile(FileName);
end;
finally
// Освобождаем память, занятую объектом TStringList
Lines.Free;
end;
end;

procedure RemoveLineFromFile(FileName, Line: String);
var
Lines: TStringList;
begin
// Создаем объект TStringList для чтения файла в память
Lines := TStringList.Create;
try
// Загружаем содержимое файла в TStringList
Lines.LoadFromFile(FileName);

// Ищем индекс строки, которую хотим удалить
// Если строка найдена, удаляем ее из списка
while Lines.IndexOf(Line) <> -1 do
Lines.Delete(Lines.IndexOf(Line));

// Сохраняем изменения обратно в файл
Lines.SaveToFile(FileName);
finally
// Освобождаем память, занятую объектом TStringList
Lines.Free;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
HostsFilePath: String;
LineToAdd1, LineToAdd2, LineToAdd3, LineToAdd4: String;
begin
// Получаем путь к файлу hosts в системе
HostsFilePath := ExpandConstant('{sys}\drivers\etc\hosts');
// Строка, которую мы хотим добавить в файл hosts (для отключение рекламы)
LineToAdd1 := '127.0.0.1 player.kmpmedia.net';
LineToAdd2 := '127.0.0.1 log.kmplayer.com';
LineToAdd3 := '127.0.0.1 cdn.kmplayer.com';
LineToAdd4 := '127.0.0.1 cdn.pandora.tv';

// Проверяем, что текущий шаг установки ssPostInstall
// Это гарантирует, что файл hosts существует до того, как мы попытаемся его изменить
if CurStep = ssPostInstall then
begin
// Проверяем существование файла
if not FileExists(HostsFilePath) then
begin
// Файл не существует, создаем его
//MsgBox('File not exists!', mbInformation, MB_OK);
if SaveStringToFile(HostsFilePath, '', False) then
begin
// Файл создан успешно, добавляем строку (если такой строки еще нет)
AddLineToFile(HostsFilePath, LineToAdd1);
AddLineToFile(HostsFilePath, LineToAdd2);
AddLineToFile(HostsFilePath, LineToAdd3);
AddLineToFile(HostsFilePath, LineToAdd4);
end;
end
else
begin
// Файл существует, добавляем строку (если такой строки еще нет)
//MsgBox('File exists!', mbInformation, MB_OK);
AddLineToFile(HostsFilePath, LineToAdd1);
AddLineToFile(HostsFilePath, LineToAdd2);
AddLineToFile(HostsFilePath, LineToAdd3);
AddLineToFile(HostsFilePath, LineToAdd4);
end;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
HostsFilePath: String;
LineToRemove1, LineToRemove2, LineToRemove3, LineToRemove4: String;
begin
// Получаем путь к файлу hosts в системе
HostsFilePath := ExpandConstant('{sys}\drivers\etc\hosts');

// Строка, которую мы хотим удалить из файла hosts
LineToRemove1 := '127.0.0.1 player.kmpmedia.net';
LineToRemove2 := '127.0.0.1 log.kmplayer.com';
LineToRemove3 := '127.0.0.1 cdn.kmplayer.com';
LineToRemove4 := '127.0.0.1 cdn.pandora.tv';

// Проверяем текущий шаг деинсталляции
if CurUninstallStep = usPostUninstall then
begin
// Проверяем существование файла
if not FileExists(HostsFilePath) then
begin
// Файл не существует, ничего не делаем
//MsgBox('File not exists!', mbInformation, MB_OK);
end
else
begin
// Файл существует. Удаляем строку из файла hosts при деинсталляции
RemoveLineFromFile(HostsFilePath, LineToRemove1);
RemoveLineFromFile(HostsFilePath, LineToRemove2);
RemoveLineFromFile(HostsFilePath, LineToRemove3);
RemoveLineFromFile(HostsFilePath, LineToRemove4);
end;
end;
end;

mrAndy
26-08-2023, 20:58
Подскажите, что нужно сделать, что бы после установки корректно отображалась иконка приложения в установке и удалении программ в Windows? Сейчас это выглядит вот так:

Vanadiy777
26-08-2023, 22:01
mrAndy,
Можно так:
[Setup]
UninstallDisplayIcon={app}\MyProg.exe

PsuchO
22-09-2023, 23:09
Господа. Спасайте .... вообще 0 во всём этом.
В общем, хочу написать функцию, которая проверяет версию dotNet SDK. Параметр Version находится в реестре по пути \HKEY_LOCAL_MACHINE\SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedhost
Всё, что удалось сделать, это проверить, что путь \HKEY_LOCAL_MACHINE\SOFTWARE\dotnet\Setup\InstalledVersions\x64\ существует, как таковой
[Code]
function IsDotNetSDKInstalled: Boolean;
var
dotNetVersion: string;
reg_key: string; // Просматриваемый подраздел системного реестра
reg_root: string;
begin
reg_key := 'SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedhost';
reg_root := 'HKEY_LOCAL_MACHINE';

if RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedhost') then
begin
???????????????
end;
end;
Молю, помогите вытащить значение из реестра

El Sanchez
25-09-2023, 18:51
хочу написать функцию, которая проверяет версию dotNet SDK. »
PsuchO,
function IsDotNetSDKInstalled: Boolean;
var
LSubKeyName: string;
begin
LSubKeyName := 'SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedhost';
Result := RegKeyExists(HKLM32, LSubKeyName) and
RegValueExists(HKLM32, LSubKeyName, 'Version') and
DirExists(ExpandConstant('{reg:HKLM32\' + LSubKeyName + ',Path|}'));
end;

EdMSL
14-10-2023, 09:00
Приветствую. Хотелось бы выводить на последнем экране время, затраченное на установку. Но что-то не могу найти готового решения. Как это можно сделать, хотя бы в общих чертах?

ZVSRus
27-10-2023, 12:10
Хотелось бы выводить на последнем экране время, затраченное на установку.

Данный пример есть в справке. ( версия 6.1.2 )

ROMKA-1977
26-02-2024, 19:17
Подскажите пож. возможно ли в секции [Tasks] добавить CheckBox для перехода по веб ссылке ?

ROMKA-1977
26-02-2024, 19:55
Подскажите пож. возможно ли в секции [Tasks] добавить CheckBox для перехода по веб ссылке ? »
Или через секцию [Code] на страницу SelectTasksPage добавить CheckBox для перехода по веб ссылке

ZVSRus
29-02-2024, 10:30
возможно ли в секции [Tasks] добавить CheckBox для перехода по веб ссылке ?



[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=.

[Tasks]
Name: WebSite; Description: "Перейти на страницу Автора"; GroupDescription: "Другие задачи:"; Flags: unchecked

[Code ]
procedure CurStepChanged(CurStep: TSetupStep);
var
r: integer;

begin
if CurStep = ssDone then if IsTaskSelected('WebSite') then
begin
ShellExec('open', 'http://forum.oszone.net/post-3024679-1051.html', '','', SW_SHOW, ewNoWait, r);
end;
end;

habib2302
29-02-2024, 11:22
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=.

[Tasks]
Name: WebSite; Description: "Перейти на страницу Автора"; GroupDescription: "Другие задачи:"; Flags: unchecked

[Code ]
procedure CurStepChanged(CurStep: TSetupStep);
var
r: integer;

begin
if CurStep = ssDone then if IsTaskSelected('WebSite') then
begin
ShellExec('open', 'http://forum.oszone.net/post-3024679-1051.html', '','', SW_SHOW, ewNoWait, r);
end;
end;



А выполнить открытие сайта через секцию run нельзя?

ZVSRus
29-02-2024, 13:17
А выполнить открытие сайта через секцию run нельзя?


[Run]
Filename: http://forum.oszone.net/post-3024679-1051.html; Tasks: WebSite; Flags: shellexec;

У меня в расширенной версии ссылка открывается сразу, то есть не ждет когда закроется установщик на финишной странице (флаги чтобы подождал завершения работы не работают). Или отключайте финишную страницу, или поиграйтесь с флагами.

NickKruto
28-04-2024, 23:11
Здравствуйте. Подскажите как сделать bin файлы, но так чтобы в первом была запакована одна папка, а во втором другая. И в установщике, перед тем как выбрать директорию предлагалось, что именно распаковать.

ROMKA-1977
22-05-2024, 15:26
Подскажите как изменить размеры формы выбора языка в стандартной версии Inno Setup (не расширенной) ? Или как создать кастомную форму выбора языка в стандартной версии Inno Setup ?

ZVSRus
23-05-2024, 10:12
Подскажите как изменить размеры формы выбора языка в стандартной версии Inno Setup (не расширенной)





[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=.

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

[Code ]
function InitializeLanguageDialog(): Boolean;
begin
with SelectLanguageForm do begin
ClientWidth := ScaleX(297);
ClientHeight := ScaleY(125);

IconBitmapImage.SetBounds(ScaleX(8), ScaleY(8), ScaleX(32), ScaleY(32));
SelectLabel.SetBounds(ScaleX(56), ScaleY(8), ScaleX(233), ScaleY(39));
LangCombo.SetBounds(ScaleX(56), ScaleY(56), ScaleX(233), ScaleY(21));
OKButton.SetBounds(ScaleX(133), ScaleY(93), ScaleX(75), ScaleY(23));
CancelButton.SetBounds(ScaleX(214), ScaleY(93), ScaleX(75), ScaleY(23));
end;
Result := True;
end;




PS: Поторопился чуток, в стандартной версии ни в 6 ни в 5 данная функция не принимается (ошибка на SelectLanguageForm). Пардон!

El Sanchez
25-05-2024, 12:23
Подскажите как изменить размеры формы выбора языка в стандартной версии Inno Setup (не расширенной) ? Или как создать кастомную форму выбора языка в стандартной версии Inno Setup ? »
ROMKA-1977, в стандартной доступа к SelectLanguageForm нет, так что только кастом.

ROMKA-1977
02-06-2024, 15:25
в стандартной доступа к SelectLanguageForm нет, так что только кастом. »
El Sanchez,
Вот ещё один пример создания кастомной формы:
169886

ROMKA-1977
15-06-2024, 15:56
Помогите пожалуйста, если возможно. Пример кода:

[Files]
Source: Program\*; DestDir: {app}; AfterInstall: BtnDisable(); Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

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

Name: DirectX; Description: Microsoft DirectX; GroupDescription: Дополнительное ПО; Flags: unchecked;
Name: vcredist2019_x86; Description: Microsoft Visual С++ 2015-2019 Redistributable; GroupDescription: Дополнительное ПО; Flags: unchecked;
Name: vcredist2019_x64; Description: Microsoft Visual С++ 2015-2019 Redistributable x64; GroupDescription: Дополнительное ПО; Flags: unchecked; Check: IsWin64;

[Run]
Filename: {src}\Redistributable\DirectX\DXSETUP.exe; Parameters: /silent; Tasks: DirectX; StatusMsg: DirectX;
Filename: {src}\Redistributable\MVC++2019\VC_redist.x86.exe; Tasks: vcredist2019_x86; Parameters: /q; StatusMsg: Microsoft Visual С++ 2015-2019 Redistributable;
Filename: {src}\Redistributable\MVC++2019\VC_redist.x64.exe; Tasks: vcredist2019_x64; Parameters: /q; StatusMsg: Microsoft Visual С++ 2015-2019 Redistributable x64;

[_code]
var
Button: TButton;

procedure InitializeWizard();
begin
Button:= TButton.Create(WizardForm);
Button.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
Button.Caption:= 'XXX';
Button.Parent:= WizardForm;
end;

procedure BtnDisable();
begin
Button.Enabled := False;
end;

В данном примере созданная кастомная кнопка отключается на странице InstallingPage перед началом распаковки файлов. Необходимо её отключить после распаковки файлов но перед установкой дополнительного ПО как это происходи с кнопкой Отмена. Для ISDone у меня пример есть но он не подходит если упаковка средствами Inno Setup.




© OSzone.net 2001-2012