Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9]

Ответить
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 9]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1271
Благодарности: 1029


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: El Sanchez
Дата: 06-06-2020
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:

Показать/скрыть: Ссылки на примеры скриптов:

Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;

  • RegExporter - Бесплатная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.3.0 [17.01.2015] - Скачать;



Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Скрипты Inno Setup. Помощь и советы [часть 6] | Скрипты Inno Setup. Помощь и советы [часть 6].7z
Скрипты Inno Setup. Помощь и советы [часть 7] | Скрипты Inno Setup. Помощь и советы [часть 7].7z
Скрипты Inno Setup. Помощь и советы [часть 8] | Скрипты Inno Setup. Помощь и советы [часть 8].7z
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:09, 04-04-2018

 

Аватара для Flix

Пользователь


Сообщения: 94
Благодарности: 54

Профиль | Отправить PM | Цитировать


Цитата DA-Bro:
Столкнулся с константой {commonfonts}... В справке её нет. »
В справке она есть (смотреть).

Цитата DA-Bro:
выдаёт сообщение, что неизвестная константа. »
Значит вы пользуетесь какой-то древней версией Inno.

Константа появилась с версии 6.1.0 (читать). До этого она была {fonts}.

Как правильно устанавливать шрифты - читать.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:37, 24-08-2024 | #1091



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 98
Благодарности: 17

Профиль | Отправить PM | Цитировать


Flix, ну да, пробовал в версии Inno Setup 6.0.5, там же в справке и смотрел.
Тут всё теперь понятно.
Так в моём случае получается {commonfonts} и {fonts} одно и тоже? Или как.

Отправлено: 17:14, 24-08-2024 | #1092


Аватара для Flix

Пользователь


Сообщения: 94
Благодарности: 54

Профиль | Отправить PM | Цитировать


Цитата DA-Bro:
Так в моём случае получается {commonfonts} и {fonts} одно и тоже? Или как. »
DA-Bro, до версии 6.1.0 это была константа {fonts}, а после была переименована в {commonfonts}.
Если используете версию Inno ниже 6.1.0, то указываете {fonts}.
Если выше 6.1.0 - то {commonfonts}, но с учетом 10 версии винды и выше, а также привилегий, могут быть варианты с {userfonts} и {autofonts}. Если не имеете понятия про версию винды и права пользователя, то рекомендуется использовать константу {autofonts}.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:01, 24-08-2024 | #1093


Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата El Sanchez:
lmiol, reg.exe он разных разрядностей бывает. В зависимости от окружения, 32- или 64-разрядного, из которого вызвали батник, будет вызван 32- или 64-разрядный reg.exe. Только вот 64-разрядный reg при таком запросе полезет искать в 64-разрядный раздел HKLM\SOFTWARE, 32-разрядный reg в 32-разрядный HKLM\SOFTWARE, который фактически является HKLM\SOFTWARE\WOW6432Node. Steam пишет в 64-разрядный раздел, понятно, что 32-разрядный reg или 32-разрядный Inno, вызывающий 32-разрядный reg, ничего не найдут в 32-разрядном разделе. Начитавшись инторнетов, умники в батниках или ещё где явно пишут WOW6432Node, не думая о разрядности вызывающего, потом в 32-разрядных системах в реестре появляется раздел WOW6432Node, которого быть там не должно, или на 64-разрядных системах в 32-разрядном разделе появляется лишний HKLM\SOFTWARE\WOW6432Node\WOW6432Node.
Чтобы такого не происходило, лучше в reg при запросе сразу указывать в какую ветку лезть параметрами /reg:32 или /reg:64, в таком случае разрядность reg не имеет значения. »
Проверил, это не то что надо, это вообще отдельный раздел реестра WOW6432Node
я думал это редирект а оказалось это просто отдельный раздел для 64биток.
Я также исследовал редиректы внутренние, но это не помогло. А также я выяснил что не может читать только с HKEY_LOCAL_MACHINE, а вот с HKEY_CURRENT_USER без проблем читает.
Поэтому я решил пойти другим путем и определить путь игры через Steam.
Вышло даже лучше чем я хотел - я определяю еще и диск (ведь игру можно в либе переместить на другой том)

HTML код: Выделить весь код
powershell -Command "$SteamPath=(Get-ItemProperty 'HKCU:\SOFTWARE\Valve\Steam').SteamPath.Replace('/', '\');$LibraryFoldersPath=Join-Path -Path $SteamPath -ChildPath 'steamapps\libraryfolders.vdf';$libraryContent=Get-Content $LibraryFoldersPath -Raw;if($libraryContent -match '\\u0022291550\\u0022\s+\\u0022(\d+)\\u0022'){$matchIndex=$libraryContent.IndexOf($matches[0]);$pathIndex=$libraryContent.LastIndexOf('\\u0022path\\u0022',$matchIndex);if($pathIndex -gt -1){$startPathIndex=$libraryContent.IndexOf('\\u0022',$pathIndex+6)+1;$endPathIndex=$libraryContent.IndexOf('\\u0022',$startPathIndex);$gamePath=$libraryContent.Substring($startPathIndex,$endPathIndex-$startPathIndex);$FinalPath=Join-Path -Path $gamePath -ChildPath 'steamapps\common\Brawlhalla';$FinalPath=$FinalPath.Replace('\\\\', '\');$FinalPath=$FinalPath.Replace('\\', '\'); $FinalPath}else{'Путь не найден.'}}else{'Игра с идентификатором 291550 не найдена.'} $installPath = $FinalPath; $appDataPath = [System.Environment]::GetFolderPath('ApplicationData'); $hubFilePath = '%APPDATA%\Open Mod Manager\Brawlhalla\Maps\channel.omx'; if (Test-Path $hubFilePath) { [xml]$xmlContent = Get-Content -Path $hubFilePath; $installNode = $xmlContent.SelectSingleNode('//install'); $installNode.InnerText = $installPath; $xmlContent.Save($hubFilePath); } "

получилось очень даже хорошо и мой динамический установщик кайфово отпрабатывает и готов к любым обновлениям версий и тому что там разработчик может изменить.
Т.е. мой Inno Setup проверяет только наличие стима и флага что игра установлена (так как всё это для одной игры требуется), а вот путь где установлено, построение конфигов и всё остальное я чекаю через скрипты

Отправлено: 22:41, 04-09-2024 | #1094


Пользователь


Сообщения: 76
Благодарности: 1

Профиль | Отправить PM | Цитировать


дал мне когда то форумчанин по имени Gnom_aka_Lexander отличный визуал скрипт. подредактировал я этот скрипт немножко под себя - и восторгу моему не было предела. вот спустя годы возникла нужда в написании setup.exe, достал я значит заготовку, и смастерил инсталлятор. запускаю, а картинка в форме не на весь экран
фото
думаю в чем дело, все ж нормально было, пробую старый проект - такая же картина. оказалось дело в том, что у меня стоит увеличения текста в Windows (изменение размера текста, приложений и других элементов свыше 100%). походил я по интернету, и нашел решение, откат на версию 5.1.9 конца 2006 года, но и тут меня ждала небольшая засада, рамки вокруг надписей
фото
как заставить это работать правильно, на более новых версиях Inno, может есть какое дополнение (библиотека), или версия Inno, по типу (advanced)?


в дополнение: нужно решить еще две проблемы, чтобы довести скрипт до ума.
1.) найти способ перетаскивать форму при (BorderStyle:=bsNone).
код
[Setup]
AppName=Test
AppVerName=Test
OutputBaseFilename=Test
OutputDir=userdocs:..\desktop
CreateAppDir=no
Uninstallable=no

[code]
procedure InitializeWizard();
var
ClientWidth: Integer;
ClientHeight: Integer;
begin
ClientWidth := WizardForm.ClientWidth;
ClientHeight := WizardForm.ClientHeight;

WizardForm.BorderStyle := bsNone;

WizardForm.ClientWidth := ClientWidth;
WizardForm.ClientHeight := ClientHeight;
end;
2.) и отключить установку с клавиатуры. то есть сделать так, чтобы кнопка Install (NextButton) - не реагировал на нажатия Enter, Пробел.


вторую неделю уже колдую, и все ни как . в принципе жить можно, но вот перетащить форму очень бы хотелось.

Последний раз редактировалось Beavimo, 20-10-2024 в 01:57.


Отправлено: 01:38, 09-10-2024 | #1095


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1271
Благодарности: 1029

Профиль | Отправить PM | Цитировать


Цитата Beavimo:
1.) найти способ перетаскивать форму при (BorderStyle:=bsNone).
2.) и отключить управление с клавиатуры. то есть сделать так чтобы Setup не реагировал на нажатия Enter, и на другие кнопки клавиатуры. »
Скрытый текст

Код: Выделить весь код
[Files]
#ifndef IS_ENHANCED
  #if VER < 0x06000000
; https://web.archive.org/web/20150510131335if_/http://restools.hanzify.org/inno/callbackctrl/InnoCallbackCtrl_V1.1.zip
Source: CallbackCtrl.dll; Flags: dontcopy
  #endif
#endif

[Code]
const
  WH_KEYBOARD = 2;

  VK_LBUTTON = $0001;

  WM_SETCURSOR = $0020;
  WM_LBUTTONDOWN = $0201;

  HTCLIENT = 1;

  SWP_NOSIZE        = 1;
  SWP_NOZORDER      = 4;
  SWP_NOOWNERZORDER = $0200;

// CallbackCtrl.dll Functions
#ifndef IS_ENHANCED
  #if VER < 0x06000000
type
  TKeyboardProc = function(nCode: Integer; wParam: UINT_PTR; lParam: INT_PTR): Longint;
  TSubclassProc = function(hWnd: HWND; uMsg: UINT; wParam: UINT_PTR; lParam: INT_PTR;
    uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): INT_PTR;
function WrapKeyboardProc(Callback: TKeyboardProc; ParamCount: Integer): LongWord; external 'wrapcallbackaddr@files:callbackctrl.dll stdcall';
function WrapSubclassProc(Callback: TSubclassProc; ParamCount: Integer): LongWord; external 'wrapcallbackaddr@files:callbackctrl.dll stdcall';
  #endif
#endif

// Process and Thread Functions
function GetCurrentThreadId(): DWORD; external 'GetCurrentThreadId@kernel32.dll stdcall';
// Hook Functions
function CallNextHookEx(hhk: THandle; nCode: Integer; wParam: UINT_PTR; lParam: INT_PTR): INT_PTR; external 'CallNextHookEx@user32.dll stdcall';
function SetWindowsHookEx(idHook: Integer; lpfn: LongWord; hmod: THandle; dwThreadId: DWORD): THandle; external 'SetWindowsHookExW@user32.dll stdcall';
function UnhookWindowsHookEx(hhk: THandle): BOOL; external 'UnhookWindowsHookEx@user32.dll stdcall';
// Shell Functions
function SetWindowSubclass(hWnd: HWND; pfnSubclass: LongWord; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): BOOL; external 'SetWindowSubclass@comctl32.dll stdcall';
function RemoveWindowSubclass(hWnd: HWND; pfnSubclass: LongWord; uIdSubclass: UINT_PTR): BOOL; external 'RemoveWindowSubclass@comctl32.dll stdcall';
function DefSubclassProc(hWnd: HWND; uMsg: UINT; wParam: UINT_PTR; lParam: INT_PTR): INT_PTR; external 'DefSubclassProc@comctl32.dll stdcall';
// Cursor Functions
function GetCursorPos(out lpPoint: TPoint): BOOL; external 'GetCursorPos@user32.dll stdcall';
// Window Functions
function GetWindowRect(hWnd: HWND; out lpRect: TRect): BOOL; external 'GetWindowRect@user32.dll stdcall';
function SetWindowPos(hWnd, hWndInsertAfter: HWND; X, Y, cx, cy: Integer; uFlags: UINT): BOOL; external 'SetWindowPos@user32.dll stdcall';
// Keyboard Input Functions
function GetAsyncKeyState(vKey: Integer): SmallInt; external 'GetAsyncKeyState@user32.dll stdcall';
// Rectangle Functions
function OffsetRect(var lprc: TRect; dx, dy: Integer): BOOL; external 'OffsetRect@user32.dll stdcall';

var
  HHookProc: THandle;
  PKeyboardProc: LongWord;
  PWndProc: LongWord;

function WndProc(hWnd: HWND; uMsg: UINT; wParam: UINT_PTR; lParam: INT_PTR;
  uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): INT_PTR;
var
  LWindowRect: TRect;
  LSavePt, LCurPt: TPoint;
begin
  case uMsg of
    WM_SETCURSOR:
      begin
        Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);
        if (lParam shr $10 = WM_LBUTTONDOWN) and
          (lParam and $FFFF = HTCLIENT) then
        begin
          GetWindowRect(hWnd, LWindowRect);
          GetCursorPos(LSavePt);
          while (GetAsyncKeyState(VK_LBUTTON) <> 0) do
          begin
            GetCursorPos(LCurPt);
            OffsetRect(LWindowRect, LCurPt.x - LSavePt.x, LCurPt.y - LSavePt.y);
            SetWindowPos(hWnd, 0, LWindowRect.Left, LWindowRect.Top,
              0, 0, SWP_NOOWNERZORDER or SWP_NOSIZE or SWP_NOZORDER);
            LSavePt := LCurPt;
          end;
        end;
      end;
  else
    Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);
  end;
end;

procedure SubclassWizardForm(const ARemove: Boolean);
begin
  if PWndProc = 0 then
  #ifdef IS_ENHANCED
    PWndProc := CallbackAddr('WndProc');
  #elif VER >= 0x06000000
    PWndProc := CreateCallback(@WndProc);
  #else
    PWndProc := WrapSubclassProc(@WndProc, 6);
  #endif

  if not ARemove then
    SetWindowSubclass(WizardForm.Handle, PWndProc, 0, 0)
  else if PWndProc <> 0 then
    RemoveWindowSubclass(WizardForm.Handle, PWndProc, 0);
end;

function KeyboardProc(nCode: Integer; wParam: UINT_PTR; lParam: INT_PTR): Longint;
begin
  if nCode < 0 then
    Result := CallNextHookEx(HHookProc, nCode, wParam, lParam)
  else
    Result := 1;
end;

procedure SetHook();
begin
  if PKeyboardProc = 0 then
  #ifdef IS_ENHANCED
    PKeyboardProc := CallbackAddr('KeyboardProc');
  #elif VER >= 0x06000000
    PKeyboardProc := CreateCallback(@KeyboardProc);
  #else
    PKeyboardProc := WrapKeyboardProc(@KeyboardProc, 3);
  #endif
  HHookProc := SetWindowsHookEx(WH_KEYBOARD, PKeyboardProc, 0, GetCurrentThreadId());
end;

procedure UnHook();
begin
  if HHookProc > 0 then
    UnhookWindowsHookEx(HHookProc);
end;

procedure InitializeWizard;
begin
  WizardForm.BorderStyle := bsNone;
  SetHook();
  SubclassWizardForm(False);
end;

procedure DeinitializeSetup();
begin
  SubclassWizardForm(True);
  UnHook();
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:23, 16-10-2024 | #1096


Пользователь


Сообщения: 76
Благодарности: 1

Профиль | Отправить PM | Цитировать


El Sanchez, дружище только увидел твой пост - думал это невозможно
Я перелопатил весь интернет в поисках решения, но так ничего и не нашел, а тут такое

Наконец осуществилась моя мечта, иметь на борту достойный инсталлятор.


СПАСИБИЩЕ ТЕБЕ БОЛЬШОЕ!!!

Последний раз редактировалось Beavimo, 18-10-2024 в 19:19.


Отправлено: 16:19, 18-10-2024 | #1097


Пользователь


Сообщения: 76
Благодарности: 1

Профиль | Отправить PM | Цитировать


Доброго дня Форумчане
есть у меня вот такой
код

[Setup]
AppName=Test
AppVerName=Test
OutputBaseFilename=Test
OutputDir=userdocs:..\desktop
DefaultDirName=Test
Uninstallable=no

[code]
const
VK_LBUTTON = $0001;
WM_SETCURSOR = $0020;
WM_LBUTTONDOWN = $0201;
HTCLIENT = 1;
SWP_NOSIZE = 1;
SWP_NOZORDER = 4;
SWP_NOOWNERZORDER = $0200;

function SetWindowSubclass(hWnd: HWND; pfnSubclass: LongWord; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): BOOL; external 'SetWindowSubclass@comctl32.dll stdcall';
function RemoveWindowSubclass(hWnd: HWND; pfnSubclass: LongWord; uIdSubclass: UINT_PTR): BOOL; external 'RemoveWindowSubclass@comctl32.dll stdcall';
function DefSubclassProc(hWnd: HWND; uMsg: UINT; wParam: UINT_PTR; lParam: INT_PTR): INT_PTR; external 'DefSubclassProc@comctl32.dll stdcall';
function GetCursorPos(out lpPoint: TPoint): BOOL; external 'GetCursorPos@user32.dll stdcall';
function GetWindowRect(hWnd: HWND; out lpRect: TRect): BOOL; external 'GetWindowRect@user32.dll stdcall';
function SetWindowPos(hWnd, hWndInsertAfter: HWND; X, Y, cx, cy: Integer; uFlags: UINT): BOOL; external 'SetWindowPos@user32.dll stdcall';
function GetAsyncKeyState(vKey: Integer): SmallInt; external 'GetAsyncKeyState@user32.dll stdcall';
function OffsetRect(var lprc: TRect; dx, dy: Integer): BOOL; external 'OffsetRect@user32.dll stdcall';

var
PWndProc: LongWord;

function WndProc(hWnd: HWND; uMsg: UINT; wParam: UINT_PTR; lParam: INT_PTR;
uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): INT_PTR;
var
LWindowRect: TRect;
LSavePt, LCurPt: TPoint;
begin
case uMsg of
WM_SETCURSOR:
begin
Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);
if (lParam shr $10 = WM_LBUTTONDOWN) and
(lParam and $FFFF = HTCLIENT) then
begin
GetWindowRect(hWnd, LWindowRect);
GetCursorPos(LSavePt);
while (GetAsyncKeyState(VK_LBUTTON) <> 0) do
begin
GetCursorPos(LCurPt);
OffsetRect(LWindowRect, LCurPt.x - LSavePt.x, LCurPt.y - LSavePt.y);
SetWindowPos(hWnd, 0, LWindowRect.Left, LWindowRect.Top,
0, 0, SWP_NOOWNERZORDER or SWP_NOSIZE or SWP_NOZORDER);
LSavePt := LCurPt;
end;
end;
end;
else
Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);
end;
end;

procedure SubclassWizardForm(const ARemove: Boolean);
begin
if PWndProc = 0 then
PWndProc := CreateCallback(@WndProc);
if not ARemove then
SetWindowSubclass(WizardForm.Handle, PWndProc, 0, 0)
else if PWndProc <> 0 then
RemoveWindowSubclass(WizardForm.Handle, PWndProc, 0);
end;


procedure TButtonOnClick( Sender: TObject );
var
MainForm: TSetupForm;
begin
begin
MainForm := CreateCustomForm();
with MainForm do
try
BorderIcons := [];
ClientWidth := ScaleX( 300 );
ClientHeight := ScaleY( 300 );
Caption := 'Информация';
//Position := poScreenCenter;
Position := poMainFormCenter

with TBevel.Create( nil ) do
begin
Parent := MainForm;
SetBounds( ScaleX( 8 ), ScaleY( 8 ), ScaleX( 284 ), ScaleY( 249 ) );
Shape := bsFrame;
end;

with TNewStaticText.Create( nil ) do
begin
Parent := MainForm;
SetBounds( ScaleX( 12 ), ScaleY( 12 ), ScaleX( 276 ), ScaleY( 241 ) );
AutoSize := False;
Caption := 'Информация:' + #13#10 +
'Версия:' + #13#10 +
'И т.д.';
WordWrap := True;
end;

with TButton.Create( nil ) do
begin
Parent := MainForm;
SetBounds( ScaleX( 112 ), ScaleY( 266 ), ScaleX( 76 ), ScaleY( 25 ) );
ModalResult := mrOk;
Caption := 'Закрыть';
end;

ShowModal();
finally

Free;
end;
end;
end;

procedure InitializeWizard();
begin
with TButton.Create( nil ) do
begin
Parent := WizardForm;
Left := ScaleX( 12 );
Top := ScaleY( 327 );
Caption := 'Info';
OnClick := @TButtonOnClick;
end;
begin
SubclassWizardForm(False);
end;
end;
спасибо El Sanchez за пример перетаскивания формы.

и вот стоит у меня несколько задач по данному примеру.
1.) Непонятно почему форма перетаскивается, а окно информации нет?
2.) Почему окно информации открывается не по центру формы?
3.) Возможно ли сделать так, чтобы окно информации закрывалось кликом по нему?

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

Последний раз редактировалось Beavimo, 24-10-2024 в 10:08.


Отправлено: 09:49, 24-10-2024 | #1098


Пользователь


Сообщения: 76
Благодарности: 1

Профиль | Отправить PM | Цитировать


люди помогите

у меня уже чердак дымит. я весь вымотался

Отправлено: 13:08, 24-10-2024 | #1099


Аватара для Dodakaedr

Ветеран


Сообщения: 861
Благодарности: 260

Профиль | Отправить PM | Цитировать


Beavimo, имейте терпение. Знающие люди придут с работы и помогут чем смогут.

-------
Inno Setup 5 Ultra Unicode

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:16, 24-10-2024 | #1100



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 7] El Sanchez Автоматическая установка приложений 2499 02-02-2015 08:59
Скрипты Inno Setup. Помощь и советы [часть 6] El Sanchez Автоматическая установка приложений 2494 10-03-2014 11:51
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58




 
Переход