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

Ответить
 • Просмотры: 13
Аватара пользователя
Johny777

Re: Скрипты Inno Setup. Помощь и советы [часть 6]

Сообщение Johny777 »

volga163@vk


читать дальше »


[Setup]

AppName=My Application

AppVersion=1.5

DefaultDirName={pf}\My Application



[Files]

Source: Fon.bmp; DestDir: {tmp}


Код: Выделить всё


var

BackgroundForm: TForm;

BackgroundImage: TBitmapImage;

LoGoTip: TLabel;



Procedure BackgroundOnActivate(Sender: TObject); Begin if WizardForm.Visible then WizardForm.Show End;

function ShowWindow(hWnd, nCmdShow: LongWord): LongWord; external 'ShowWindow@user32.dll stdcall';



procedure InitializeWizard();

begin

  BackgroundForm:= TForm.Create(nil);

  BackgroundForm.BorderStyle:= bsNone;

  BackgroundForm.OnActivate:= @BackgroundOnActivate;

  ShowWindow(BackgroundForm.Handle, sw_ShowMaximized);

  BackgroundImage:= TBitmapImage.Create(BackgroundForm);

  BackgroundImage.Align:= alClient;

  BackgroundImage.Stretch:= True;

  ExtractTemporaryFile('fon.bmp');

  BackgroundImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));

  BackgroundImage.Parent:= BackgroundForm;

  LoGoTip := TLabel.Create(WizardForm);

  with LoGoTip do

  begin

    Parent := BackgroundForm;

    Font.Height := -100;

    Caption := 'Мой Логотип';

    Left := ScaleX(50);

    Top := ScaleY(50);

    Width := ScaleX(1000);

    Height := ScaleY(100);

    Font.Name := 'Verdana';

    Font.Style := [fsBold];

  end;

end;



Procedure DeinitializeSetup;

Begin

    BackgroundForm.Free

End;
Аватара пользователя
Lex_from_Belarus

Re: Скрипты Inno Setup. Помощь и советы [часть 6]

Сообщение Lex_from_Belarus »

а как сдлеать так чтобы, если Win 32bit, то в секции [Run] выполнится одни, а если Win 64 bit, то другой?
Аватара пользователя
Johny777

Re: Скрипты Inno Setup. Помощь и советы [часть 6]

Сообщение Johny777 »

Lex_from_Belarus, Таким же макаром:



Код:

Код: Выделить всё

[Run]
// Will Run only on Win 64
Description: {cm:LaunchProgram, Half-Life}; Filename: {app}\half-life\Half-Life.exe; WorkingDir: {app}\half-life; Check: IsWin64();
// Will Run only on Win 32
Description: {cm:LaunchProgram, Half-Life Decay}; Filename: {app}\half-life decay\Half-Life Decay.exe; WorkingDir: {app}\half-life decay; Check: not IsWin64();

PS: Кстати подобный вопрос уже много раз был задан и получил ответ. Юзай поиск почаще!
Аватара пользователя
Lex_from_Belarus

Re: Скрипты Inno Setup. Помощь и советы [часть 6]

Сообщение Lex_from_Belarus »

Johny777, да я так пробовал, у меня был вариант:




читать дальше »




[Files]

Source: "e:\xxx\file_32.exe"; Check: full or medium or lite and not isWin64; DestDir: "{tmp}"; Flags: ignoreversion recursesubdirs createallsubdirs

Source: "e:\xxx\file_64.exe"; Check: full or medium or lite and isWin64; DestDir: "{tmp}"; Flags: ignoreversion recursesubdirs createallsubdirs



[Run]

Filename: "{tmp}\file_32.exe"; Parameters: "/s"; Check: full or medium or lite; StatusMsg: "Установка file_32...";

Filename: "{tmp}\file_64.exe"; Parameters: "/s"; Check: full or medium or lite; StatusMsg: "Установка file_64...";






я сделал:




читать дальше »




[Files]

Source: "e:\xxx\file_32.exe"; Check: full or medium or lite and not isWin64; DestDir: "{tmp}"; Flags: ignoreversion recursesubdirs createallsubdirs

Source: "e:\xxx\file_64.exe"; Check: full or medium or lite and isWin64; DestDir: "{tmp}"; Flags: ignoreversion recursesubdirs createallsubdirs



[Run]

Filename: "{tmp}\file_32.exe"; Parameters: "/s"; Check: full or medium or lite and not isWin64; StatusMsg: "Установка file_32...";

Filename: "{tmp}\file_64.exe"; Parameters: "/s"; Check: full or medium or lite and isWin64; StatusMsg: "Установка file_64...";






full, medium, lite - это я так реализовал условия для установки и этот файл во все три варианта входит

но к сожалению и 32 и 64 на 64-ке установились
Аватара пользователя
Lex_from_Belarus

Re: Скрипты Inno Setup. Помощь и советы [часть 6]

Сообщение Lex_from_Belarus »

Вот спасибо, а я даже и не подумал об этом Изображение
Аватара пользователя
Lex_from_Belarus

Re: Скрипты Inno Setup. Помощь и советы [часть 6]

Сообщение Lex_from_Belarus »

Цитата Johny777:



поднятие привилегий собственному процессу не поможет? пример понятия привилегий в шапке, в "закрытии процесса".

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




я наверное что-то не так делаю,

не выскакивает окно уака/пасса

покромсал пример "закрытие процесса"

Ну и по факту видно что права как были простые так и остались



Код:

Код: Выделить всё

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
    TH32CS_SNAPPROCESS = $2;
    INVALID_HANDLE_VALUE = -1;
    PROCESS_TERMINATE = $1;
    PROCESS_CREATE_THREAD = $2;
    PROCESS_VM_OPERATION = $8;
    PROCESS_VM_READ = $10;
    PROCESS_VM_WRITE = $20;
    PROCESS_QUERY_INFORMATION = $400;
    SYNCHRONIZE = $100000;
    MEM_COMMIT = $1000;
    MEM_RESERVE = $2000;
    PAGE_EXECUTE_READWRITE = $40;
    TOKEN_QUERY = $8;
    TOKEN_ADJUST_PRIVILEGES = $20;
    SE_PRIVILEGE_ENABLED = $2;
    MAX_PATH = 260;
    TA_FAILED = 0;
    TA_SUCCESS_CLEAN = 1;
    TA_SUCCESS_KILL = 2;
    WM_CLOSE = $10;
    WAIT_OBJECT_0 = $0;
    WAIT_TIMEOUT = $102;
type
    TPROCESSENTRY32 = record
        dwSize, cntUsage, th32ProcessID: DWORD;
        th32DefaultHeapID: Longint;
        th32ModuleID, cntThreads, th32ParentProcessID: DWORD;
        pcPriClassBase: Longint;
        dwFlags: DWORD;
        szExeFile: array [0..259] of Char;
    end;
    LUID = record
        LowPart: DWORD;
        HighPart: Longint;
    end;
    LUID_AND_ATTRIBUTES = record
        Luid: LUID;
        Attributes: DWORD;
    end;
    TOKEN_PRIVILEGES = record
        PrivilegeCount: DWORD;
        Privileges: array [0..0] of LUID_AND_ATTRIBUTES;
    end;
function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle; external 'CreateToolhelp32Snapshot@kernel32.dll stdcall';
#ifdef UNICODE
function Process32First(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32First{#A}@kernel32.dll stdcall';
function Process32Next(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32Next{#A}@kernel32.dll stdcall';
#else
function Process32First(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32First@kernel32.dll stdcall';
function Process32Next(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32Next@kernel32.dll stdcall';
#endif
function OpenProcess(dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; external 'OpenProcess@kernel32.dll stdcall';
function OpenProcessToken(ProcessHandle: THandle; DesiredAccess: DWORD; var TokenHandle: THandle): BOOL; external 'OpenProcessToken@advapi32.dll stdcall';
function GetCurrentProcess(): THandle; external 'GetCurrentProcess@kernel32.dll stdcall';
function LookupPrivilegeValue(lpSystemName, lpName: String; var lpLuid: LUID): BOOL; external 'LookupPrivilegeValue{#A}@advapi32.dll stdcall';
function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL; NewState: TOKEN_PRIVILEGES; BufferLength: DWORD; var PreviousState: TOKEN_PRIVILEGES; var ReturnLength: Longint): BOOL; external 'AdjustTokenPrivileges@advapi32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function GetProcessImageFileName(hProcess: THandle; var lpImageFileName: Char; nSize: DWORD): DWORD; external 'GetProcessImageFileName{#A}@psapi.dll stdcall';
function QueryDosDevice(lpDeviceName: String; var lpTargetPath: Char; ucchMax: DWORD): DWORD; external 'QueryDosDevice{#A}@kernel32.dll stdcall';
function EnumWindows(lpEnumFunc, lParam: Longint): BOOL; external 'EnumWindows@user32.dll stdcall';
function WaitForSingleObject(hHandle: THandle; dwMilliseconds: DWORD): DWORD; external 'WaitForSingleObject@kernel32.dll stdcall';
function GetProcAddress(hModule: THandle; lpProcName: String): Longint; external 'GetProcAddress@kernel32.dll stdcall';
function GetModuleHandle(lpModuleName: String): THandle; external 'GetModuleHandle{#A}@kernel32.dll stdcall';
function VirtualAllocEx(hProcess: THandle; lpAddress, dwSize: Longint; flAllocationType, flProtect: DWORD): Longint; external 'VirtualAllocEx@kernel32.dll stdcall';
function WriteProcessMemory(hProcess: THandle; lpBaseAddress, lpBuffer, nSize: Longint; var lpNumberOfBytesWritten: Longint): BOOL; external 'WriteProcessMemory@kernel32.dll stdcall';
function CreateRemoteThread(hProcess: THandle; lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags: DWORD; var lpThreadId: DWORD): THandle; external 'CreateRemoteThread@kernel32.dll stdcall';
function TerminateProcess(hProcess: THandle; uExitCode: UINT): BOOL; external 'TerminateProcess@kernel32.dll stdcall';
function GetWindowThreadProcessId(hWnd: HWND; var lpdwProcessId: DWORD): DWORD; external 'GetWindowThreadProcessId@user32.dll stdcall';
/////////////////////////////////////////////////////////
function CharArrayToString(aChar: array of Char): String;
begin
    Result := '';
    while aChar[Length(Result)]  #0 do Insert(aChar[Length(Result)], Result, Length(Result)+1);
end;
function EnumWindowsProc(hwnd: HWND; lParam: Longint): BOOL;
var
    dwID: DWORD;
begin
    GetWindowThreadProcessId(hwnd, dwID);
    if dwID = lParam then PostMessage(hwnd, WM_CLOSE, 0, 0);
    Result := True;
end;
function PrivilegeReq(): DWORD;
var
    hProcessSnap, hProc, hToken, hThread, lpProcName: THandle;
    pe32: TPROCESSENTRY32;
    aBuf: array [0..259] of Char;
    szFileName, szDeviceName: String;
    tkp: TOKEN_PRIVILEGES;
    SeDebugNameValue: LUID;
    i, lpMemory, ret: Longint;
    lpThreadId, dwDrives: DWORD;
begin
    hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if hProcessSnap = INVALID_HANDLE_VALUE then Exit;
    try
        pe32.dwSize := SizeOf(pe32);
        if not Process32First(hProcessSnap, pe32) then Exit;
        while Process32Next(hProcessSnap, pe32) do
        begin
//            if CompareText(CharArrayToString(pe32.szExeFile), ExtractFileName(szProcess))  0 then Continue;
            // try open process
            hProc := OpenProcess(PROCESS_TERMINATE or PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_QUERY_INFORMATION or SYNCHRONIZE, False, pe32.th32ProcessID);
            if hProc = TA_FAILED then
            begin
                // open process token adjust privileges
                if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then Exit;
                if not LookupPrivilegeValue('', 'SeDebugPrivilege', SeDebugNameValue) then Exit;
                try
                    // fill token privileges struct
                    tkp.PrivilegeCount := 1;
                    tkp.Privileges[0].Luid := SeDebugNameValue;
                    tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
                    // set debug privileges
                    if not AdjustTokenPrivileges(hToken, False, tkp, SizeOf(tkp), tkp, ret) then Exit;
                    // try open process with debug privileges
                    hProc := OpenProcess(PROCESS_TERMINATE or PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_QUERY_INFORMATION or SYNCHRONIZE, False, pe32.th32ProcessID);
                    if hProc = TA_FAILED then Exit;
                finally
                    tkp.Privileges[0].Attributes := 0;
                    AdjustTokenPrivileges(hToken, False, tkp, SizeOf(tkp), tkp, ret);
                    CloseHandle(hToken);
                end;
             end;
            // if szProcess is full path
        end;
    finally
        CloseHandle(hProcessSnap);
    end;
end;
procedure InitializeWizard();
begin
PrivilegeReq;
Аватара пользователя
insombia

Re: Скрипты Inno Setup. Помощь и советы [часть 6]

Сообщение insombia »

Dinvin4ester та задолбали вы уже,читайте справку к исдону,или листайте страницы!!!

if not ISArcExtract ( 0, 0, ExpandConstant('{src}\ВАШ АРХИВ'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
Аватара пользователя
Dinvin4ester

Re: Скрипты Inno Setup. Помощь и советы [часть 6]

Сообщение Dinvin4ester »

insombia,

Вы хоть скрипт смотрели , просто я не могу найти .
Аватара пользователя
Dinvin4ester

Re: Скрипты Inno Setup. Помощь и советы [часть 6]

Сообщение Dinvin4ester »

Цитата Johny777:



Но вопрос зачем?
Скрипты Inno Setup. Помощь и советы [часть 6]




multiuser enviroment


Цитата Johny777:



Если что-то должно быть сделано админом, то инсталл запрашивает права (по дефолту так)
Скрипты Inno Setup. Помощь и советы [часть 6]




в том то и да что не запрашивает, при копировании в PF выдает ошибку доступа, при регистрации пишет недостаточно прав


Цитата Johny777:



или войдет в систему под админом и тд
Скрипты Inno Setup. Помощь и советы [часть 6]




переменная окружения будет админская и все настройки пойдут админу - это и есть подводный камень
Аватара пользователя
Dinvin4ester

Re: Скрипты Inno Setup. Помощь и советы [часть 6]

Сообщение Dinvin4ester »

Да хз , а можно вообще убрать , архивы ведь не использую , а пользуюсь средствами инно .
Ответить

Вернуться в «Автоматическая установка приложений»