Jump to content
Korean Random
EvilAlex

Создание инсталляторов для модпаков на базе Inno Setup

Recommended Posts

@AtotIK, ещё.. как я увидел, инсталлер автоматически создаёт бэкап папки 0.9.0, очищает её и записывает свои файлы. Значит, при запущенном клиенте, на каком-то этапе установки, будет выбивать ошибку (будет приходиться вернуться в игру, выходить и продолжать). Так вот, сделать предупреждение о том, что клиент запущен и нужно сначала выйти из него. (Встречал таких юзеров, которые поверх активного клиента ставят сборки). По-этому, думаю, будет полезно (мне самому иногда помогает, когда открыто стопицот вкладок и просто забываю выйти).

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

@AtotIK, ещё.. как я увидел, инсталлер автоматически создаёт бэкап папки 0.9.0, очищает её и записывает свои файлы. Значит, при запущенном клиенте, на каком-то этапе установки, будет выбивать ошибку (будет приходиться вернуться в игру, выходить и продолжать). Так вот, сделать предупреждение о том, что клиент запущен и нужно сначала выйти из него. (Встречал таких юзеров, которые поверх активного клиента ставят сборки). По-этому, думаю, будет полезно (мне самому иногда помогает, когда открыто стопицот вкладок и просто забываю выйти).

опередил с мыслеизложением подобным =)

Share this post


Link to post

Short link
Share on other sites

Самый простой скрипт

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Files]
Source: ISTask.dll; DestDir: {app}; Flags: dontcopy

[Code]
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

//**************************************************//
function InitializeSetup(): Boolean;
begin
  If RunTask('WorldOfTanks.exe', false) then
    begin
      if MsgBox('Игра WorldOfTanks запущена. Закрыть и продолжить установку?', mbInformation, mb_YesNo) = idYes then
        begin
          KillTask('WorldOfTanks.exe');
          Result:= True;
        end else
          Exit;
    end;
Result:=True;
end;

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

 

 

Вопрос от меня:

Как сделать, чтобы при наведении на компонент выводилось описание

Edited by Иннот

Share this post


Link to post

Short link
Share on other sites

Иннот, на предыдущей странице я пример кидал с подключением dll. Это то, что тебе надо.

Share this post


Link to post

Short link
Share on other sites

Вопрос от меня:

Как сделать, чтобы один файл имеет ярлык на рабочий стол и никогда не удалятся после uninstall модам ?

Заранее спасибо.

 

 

Share this post


Link to post

Short link
Share on other sites

Вопрос от меня:

Как сделать, чтобы один файл имеет ярлык на рабочий стол и никогда не удалятся после uninstall модам ?

Заранее спасибо.

[Icons]
Name: "{commondesktop}\Название_ярлыка"; Filename: "C:\Windows\программа.exe";  Flags: uninsneveruninstall;

{commondesktop} - на рабочий стол.

Flags: uninsneveruninstall; - не удалять при деинсталляции.

Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites
[Icons]
Name: "{commondesktop}\Название_ярлыка"; Filename: "C:\Windows\программа.exe";  Flags: uninsneveruninstall;

{commondesktop} - на рабочий стол.

Flags: uninsneveruninstall; - не удалять при деинсталляции.

 

 

С этим не разобрался:  

Filename: "C:\Windows\программа.exe";

 

Я не знаю, заранее, где пользователь будет установить игру.

Конечно, файл будет находиться в папке res_mods но я не знаю где будет WoT.

 

Вот то, что я сделал:

[Files]
// Flags: uninsneveruninstall;
Source: "MODS\umeniq\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs uninsneveruninstall; Components: KMP\UM;

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

[Icons]
//добавляет ярлык  в пуск
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"

Моя идея заключается в том, чтобы имеет информационный файл (Info mod) , который устанавливается в res_mods и делает ярлык на рабочий стол или ярлык  в пуск где находится uninstall

Edited by mpmp

Share this post


Link to post

Short link
Share on other sites

@mpmp,

[Icons]
Name: "{commondesktop}\Название_ярлыка"; Filename: "{app}\название_программы.exe";  Flags: uninsneveruninstall;

Прописывается в секции [icons], а не [Files].

Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

@mpmp,

[Icons]
Name: "{commondesktop}\Название_ярлыка"; Filename: "{app}\название_программы.exe";  Flags: uninsneveruninstall;

Прописывается в секции [icons], а не [Files].

 

Спасибо работает.

Вот что получилось:

[Icons]
//=== ярлык на рабочий стол
Name: "{commondesktop}\umeniq_WoT"; Filename: "{app}\res_mods\umeniq_WoT.pdf";  Flags: uninsneveruninstall;
//=== ярлык  в пуск где находится uninstall
Name: "{group}\umeniq_WoT"; Filename: "{app}\res_mods\umeniq_WoT.pdf";  Flags: uninsneveruninstall;
Edited by mpmp

Share this post


Link to post

Short link
Share on other sites

Вопрос:

 

Как изменить имя деинсталлятора ?

Идея заключается в том, что хотел бы носить имя инсталлятора, а не ето «unins000»

 

post-21711-0-18867100-1397489030_thumb.png

 

 

 

 

Share this post


Link to post

Short link
Share on other sites

mpmp, можно только изменить папку расположения деинсталлятора:

 

[Setup]
UninstallFilesDir={app}\Install_Modpack

Share this post


Link to post

Short link
Share on other sites

 

mpmp, можно только изменить папку расположения деинсталлятора:

[Setup]
UninstallFilesDir={app}\Install_Modpack

это не хорошо

Share this post


Link to post

Short link
Share on other sites

Например у меня есть в установке xvm и миникарта ( в моей папке модов лежат по разным папкам) которые выбираются отдельными пунктами,но чтоб работала миникарта мне нужно установить xvm,как можно сделать чтоб не добавлять xvm в папку с миникартой,а чтоб при установке миникарты автоматом добавились файлы с папки xvm

Share this post


Link to post

Short link
Share on other sites

@Justa_Causa, лучше сделать эту миникарту подпунктом к компоненту XVM.

Как на скрине, идёт сначала пункт с XVM, а уже дочерними к нему (подпунктами) дополнительные настройки для XVM.

'скрин'

post-16412-0-95224900-1397629318_thumb.png
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Вопрос такой: как сделать скачивание архив с сервера? уже несколько дней бьюсь ни как не получается найти нужного

Share this post


Link to post

Short link
Share on other sites

Подскажите как по умолчанию заставить программу при установке удалить папку res_mods

 По-умолчанию, в смысле, чтобы удалялась папка при любом раскладе?

Тогда:

[InstallDelete]
Type: filesandordirs; Name: "{app}\res_mods";

Инсталлятор не будет спрашивать пользователя, делать это или нет. Он будет удалять эту папку всегда перед началом распаковки данных из самого инсталлятора в папку с игрой (после нажатия кнопки "Установить").

Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

Проверь куда они устанавливаются...

 

P.S.

Вот еще скрипт добавляющий картинку к компонентам...

При наведении появляется картинка:

attachicon.gifБез имени-2.png

 

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
Compression=none
AppId=TheBestAppId
DisableWelcomePage=yes
DisableFinishedPage=yes
DisableDirPage=yes
DisableReadyPage=yes


[Components]
Name: hl2; Description: Half-Life 2; Flags: disablenouninstallwarning
Name: hl2\ru; Description: Russian; Flags: disablenouninstallwarning exclusive
Name: hl2\en; Description: English; Flags: disablenouninstallwarning exclusive

Name: ep1; Description: Half-Life 2 Episode One; Flags: disablenouninstallwarning
Name: ep1\ru; Description: Russian; Flags: disablenouninstallwarning exclusive
Name: ep1\en; Description: English; Flags: disablenouninstallwarning exclusive

Name: ep2; Description: Half-Life 2 Episode Two; Flags: disablenouninstallwarning
Name: ep2\ru; Description: Russian; Flags: disablenouninstallwarning exclusive
Name: ep2\en; Description: English; Flags: disablenouninstallwarning exclusive

Name: portal; Description: Portal; Flags: disablenouninstallwarning
Name: portal\ru; Description: Russian; Flags: disablenouninstallwarning exclusive
Name: portal\en; Description: English; Flags: disablenouninstallwarning exclusive


[Files]
Source: Wasteland_Scanner_con.bmp; Flags: dontcopy nocompression
Source: Strider_early2.bmp; Flags: dontcopy nocompression
Source: Cremator_poster.bmp; Flags: dontcopy nocompression
Source: Portal.bmp; Flags: dontcopy nocompression


[code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
    UNDEF_INDEX = -777;
    ALPHA_BLEND_LEVEL = 128; // max=Byte=255

    WS_EX_LAYERED = $80000;
    WS_EX_TRANSPARENT = $20;
    LWA_COLORKEY = 1;
    LWA_ALPHA = 2;
    GWL_EXSTYLE = (-20);


var
    InfoPic: TBitmapImage;
    LastIndex: Integer;
    TempPath: String;
    PicForm: TForm;


type
    COLORREF = DWORD;


function GetCursorPos(var lpPoint: TPoint): BOOL; external '[email protected] stdcall';
function SetLayeredWindowAttributes(Hwnd: THandle; crKey: COLORREF; bAlpha: Byte; dwFlags: DWORD): Boolean; external '[email protected] stdcall';
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function SetFocus(hWnd: HWND): HWND; external '[email protected] stdcall';


procedure ShowPicHint(const PicFilePath: String);
var
    pt: TPoint;
begin
    if not GetCursorPos(pt) then Exit;
    InfoPic.Bitmap.LoadFromFile(PicFilePath);
    try
        with PicForm do
        begin
            SetBounds(ScaleX(pt.x + 16), ScaleY(pt.y + 7), InfoPic.Width, InfoPic.Height);
            Show;
        end;
    finally
        SetFocus(WizardForm.Handle);
    end;
end;


procedure CompOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
var
    UndefPic: String;
begin
    if Index = -1 then Exit;
    if Index = LastIndex then Exit;
    try
        case TNewCheckListBox(Sender).ItemCaption[Index] of
            'Half-Life 2': UndefPic := 'Wasteland_Scanner_con.bmp';
            'Half-Life 2 Episode One': UndefPic := 'Strider_early2.bmp';
            'Half-Life 2 Episode Two': UndefPic := 'Cremator_poster.bmp';
            'Portal': UndefPic := 'Portal.bmp';
        else
            begin
                LastIndex := UNDEF_INDEX;
                PicForm.Hide;
                Exit;
            end;
        end;
        if not FileExists(TempPath + UndefPic) then ExtractTemporaryFile(UndefPic);
        ShowPicHint(TempPath + UndefPic);
    finally
        LastIndex := Index;
    end;
end;


procedure CompOnMouseLeave(Sender: TObject);
begin
    PicForm.Hide;
    LastIndex := -1;
end;


procedure InitInfo();
begin
    WizardForm.ComponentsList.OnItemMouseMove := @CompOnItemMouseMove;
    WizardForm.ComponentsList.OnMouseLeave := @CompOnMouseLeave;
    TempPath := AddBackslash(ExpandConstant('{tmp}'));
    LastIndex := UNDEF_INDEX;
    PicForm := TForm.Create(WizardForm)
    with PicForm do
    begin
        BorderStyle := bsNone;
        FormStyle := fsStayOnTop;
        InfoPic := TBitmapImage.Create(PicForm)
        with InfoPic do
        begin
            Parent := PicForm;
            AutoSize := True;
        end;
    end;
    SetWindowLong(PicForm.Handle, GWL_EXSTYLE, GetWindowLong(PicForm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
    SetLayeredWindowAttributes(PicForm.Handle, 0, ALPHA_BLEND_LEVEL, LWA_ALPHA);
end;


procedure InitializeWizard();
begin
    InitInfo();
end;

 

Как правильно пристроить его в скрипт Componets,чтобы показывало картинки при наведении,нужен весь скрипт или только часть?Или можно этот скрипт прилепить целиком отдельно не спаривая со скриптом Componets?

Share this post


Link to post

Short link
Share on other sites
Как правильно пристроить его в скрипт Componets

Что имеется ввиду, под скриптом Components? Скрипт с вынесенными отдельно от основного скрипта блоками Types, Components, Files?

Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...