Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: Dark_Delphin
Дата сообщения: 19.07.2012 17:22
Всем привет.
Кто может помочь встроить в скрипт распаковку инсайда?
Автор: MOD_TEC
Дата сообщения: 19.07.2012 20:50
Dark_Delphin есть ведь IsDone зачем тебе инсайд
Автор: Dark_Delphin
Дата сообщения: 19.07.2012 22:14
MOD_TEC
инсайд нужно.
Автор: Sergey_Demchuk
Дата сообщения: 20.07.2012 01:15
Может кто подскажет, как определить откуда запущено приложение, если есть только название процесса (в диспетчере устройств например calc.exe)
Ипсользую нижеприведенный код для этого, но проблема в том, что он работает только для 32-битных приложений, а на 64битные приложения не берет. У кого какие идеи?

Код:
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
const
TH32CS_SNAPPROCESS = $2;
INVALID_HANDLE_VALUE = -1;
PROCESS_QUERY_INFORMATION = $400;
PROCESS_VM_READ = $10;
MAX_PATH = 260;

type
TPROCESSENTRY32 = record
dwSize, cntUsage, th32ProcessID: DWORD;
th32DefaultHeapID: Longint;
th32ModuleID, cntThreads, th32ParentProcessID: DWORD;
pcPriClassBase: Longint;
dwFlags: DWORD;
szExeFile: array [0..259] of char;
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 CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function GetModuleFileNameEx(hProcess: THandle; hModule: Longint; var lpFilename: Char; nSize: DWORD): DWORD; external 'GetModuleFileNameEx{#A}@psapi.dll stdcall';
function OpenProcess(dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; external 'OpenProcess@kernel32.dll stdcall';


function GetProcessWorkingDirectory(ProcessName: String): TArrayOfString;
var
hProcessSnap, hProc: THandle;
pe32: TPROCESSENTRY32;
szExeFile: array [0..MAX_PATH-1] of Char;
szProcName: String;
i, iLen: Integer;
begin
SetArrayLength(Result, 0);
hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if hProcessSnap = INVALID_HANDLE_VALUE then Exit;
pe32.dwSize := sizeof(pe32);
if not Process32First(hProcessSnap, pe32) then Exit;
while Process32Next(hProcessSnap, pe32) do
begin
szProcName := '';
while not (pe32.szExeFile[Length(szProcName)] = #0) do szProcName := szProcName + pe32.szExeFile[Length(szProcName)];
if CompareText(szProcName, ProcessName) = 0 then
begin
hProc := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, pe32.th32ProcessID);
iLen := GetModuleFileNameEx(hProc, 0, szExeFile[0], MAX_PATH);
if iLen > 0 then
begin
SetArrayLength(Result, GetArrayLength(Result)+1);
for i := 0 to iLen-1 do Result[GetArrayLength(Result)-1] := Result[GetArrayLength(Result)-1] + szExeFile[i];
Result[GetArrayLength(Result)-1] := RemoveBackSlash(ExtractFilePath(Result[GetArrayLength(Result)-1]));
end;
CloseHandle(hProc);
end;
end;
CloseHandle(hProcessSnap);
end;

procedure InitializeWizard();
var
szArray: TArrayOfString;
i: Integer;
begin
//хочу знать откуда калькуляторы запущены
szArray := GetProcessWorkingDirectory('calc.exe');
if GetArrayLength(szArray) > 0 then for i := 0 to GetArrayLength(szArray)-1 do MsgBox(szArray[i], mbInformation, MB_OK);
end;
Автор: Gnom3
Дата сообщения: 20.07.2012 12:54
IsProc2.dll поскольку проект IsProc был заброшен, по всей видимости, (я чего-то даже ссылку сейчас не нашел...) и давно не соответствует реалиям жизни (кривая работа в Windows Vista и выше), набросал аналог, с учетом именно этих систем. Работа в системе ниже ХР не гарантируется. Точнее, могу гарантировать ошибки на системе ниже ХР
Итак, встречаем:
Библиотека, выводящая список процессов в указанной папке, с возможностью их закрытия.
Скачать.
Тестим, отписываемся.
С закрытием процессов - аккуратнее, внимательнее указываем папку процесса. потом встрою защиту от закрытия процессов из системных папок.

Добавлено:
Sergey_Demchuk специально для тебя, видимо
Автор: Zloy_Gelud
Дата сообщения: 20.07.2012 20:08
Sergey_Demchuk

Цитата:
У кого какие идеи?

Может быть по этому?

Цитата:
CreateToolhelp32Snapshot Function
----------------------------------
If the specified process is a 64-bit process and the caller is a
32-bit process, this call will fail. Note that you can use the
QueryFullProcessImageName function to retrieve the full name of an
executable image for both 32- and 64-bit processes from a 32-bit
process.

Так что, попробуй для Windows Vista/7 использовать QueryFullProcessImageName, а для остальных, за исключением Windows 2000, - GetProcessImageFileName. Для Windows 2000 можно использовать GetModuleFileNameEx, если необходимо.


Добавлено:
Если что получиться - дай знать, плиз.
Автор: sergey3695
Дата сообщения: 21.07.2012 16:53
Zloy_Gelud
Его вопрос уже на озоне давно решили. (Просто человек на двух форумах написал...) Вот...
З.Ы Кстати, а что с той библиотекой которую ты отдал юре чтобы доработать? (для прозрачности на XP)
Автор: Zloy_Gelud
Дата сообщения: 21.07.2012 20:34
sergey3695
Забил он походу.

Добавлено:

Цитата:
Его вопрос уже на озоне давно решили. (Просто человек на двух форумах написал...) Вот...

Ясн. Посоветовали тоже самое.
Автор: YURSHAT
Дата сообщения: 23.07.2012 00:53

Цитата:
З.Ы Кстати, а что с той библиотекой которую ты отдал юре чтобы доработать? (для прозрачности на XP)

Либой занимался, но к сожалению в инно ее не заюзать по назначению
Назначение данной либы такое же как и isskin.dll. То есть она накладывает скин на приложения. Ее плюсы - это собственный формат для скинов, которые в разы меньше нежели msstyles, ну и возможность придавать форме аэро эффекты. Но к сожалению, скины не работают на инновских элементах. То есть кнопки, эдиты, комбобоксы и прочее не скинируется. В итоге данной либой можно лишь придать аэро эффект "ободкам" и все. В виду этого, то есть безпереспективности либы, проэкт был закрыт....
Автор: MrDum32
Дата сообщения: 23.07.2012 05:06
Друзья, помогите исправить вот это:




Со вторым вопросом разобрался. Осталось только с кнопками.
Автор: svs123456789
Дата сообщения: 23.07.2012 16:59
а как с помощью Inno Setup поменять разделитель целой и дробной части,

в разделе Windows XP настройки региональных параметров
Автор: rsg16
Дата сообщения: 24.07.2012 09:30
всем привет, скиньте пожалуйста как скрыть welcome page(первою страничку)
Автор: MrDum32
Дата сообщения: 24.07.2012 18:02
rsg16

Если я не ошибаюсь, то вот так:

[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
end;
Автор: Gnom3
Дата сообщения: 24.07.2012 19:05

Цитата:
Если я не ошибаюсь, то вот так:

В секции [Setup] есть целая куча настроек отключающая разнообразные страницы. В справке по этой секции все есть. для первой страницы:

Код: [Setup]
DisableWelcomePage=true
Автор: MrDum32
Дата сообщения: 25.07.2012 04:33
А как убрать надписи, те которые располагаются на WelcomePage и финальной справа?
Автор: YURSHAT
Дата сообщения: 25.07.2012 05:14
MrDum32

Цитата:
А как убрать надписи, те которые располагаются на WelcomePage и финальной справа?


Код:
[_Code]
procedure RedesignWizardForm;
begin
with WizardForm do
begin
WelcomeLabel2.Hide;
WelcomeLabel1.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
end;
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
end;

Автор: rsg16
Дата сообщения: 25.07.2012 10:11


народ напишите пожалуйста как сделать проверку текста в файле. вот есть файл
steam.inf, его содержание:
PatchVersion=1.0.0.72
ProductName=cstrike
appID=240
нужно сделать для патча, что если PatchVersion = 1.0.0.71 или 1.0.0.70 продолжало установку

Автор: MrDum32
Дата сообщения: 25.07.2012 10:14
YURSHAT

Спасибо!

Столкнулся еще с одной проблемой. Убирал надписи в верхней части инсталла:

[Messages]
WizardSelectDir=
SelectDirDesc=
WizardSelectProgramGroup=
SelectStartMenuFolderDesc=
WizardReady=
ReadyLabel1=
WizardInstalling=
InstallingLabel=

Убрал везде кроме двух страниц, страницы показывающей ридми и страницы доп. задач. Я их прописывал, но безрезультатно...
Автор: YURSHAT
Дата сообщения: 25.07.2012 11:52

Цитата:
Убирал надписи в верхней части инсталла:

Хто ж так убирает? Все эти "надписи" убираются в две строчки


Код:
[_Code]
procedure RedesignWizardForm;
begin
with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
end;
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
end;
Автор: MrDum32
Дата сообщения: 25.07.2012 12:53
YURSHAT

Спасибо.
Автор: innonewbie
Дата сообщения: 26.07.2012 14:55
Всем доброго времени суток! Можно ли как-нибудь сделать, чтоб инсталлятор закрывался без запроса при нажатии на созданную мной кнопку, но чтоб при нажатии на конпку "Отмена" запрос был?
Автор: MOD_TEC
Дата сообщения: 26.07.2012 15:49
innonewbie как то так

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False;
Cancel:=True;
end;
Автор: nik1967
Дата сообщения: 26.07.2012 16:07
innonewbie, [more=можно.]
Код: [Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

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

[ Code]
var
NewButton1: TNewButton;
Flag: boolean;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:= Flag=false;
end;

procedure NewButton1Click(Sender: TObject);
begin
Flag:= true;
WizardForm.Close;
end;

procedure InitializeWizard();
begin
NewButton1 := TNewButton.Create(WizardForm);
with NewButton1 do begin
Parent := WizardForm;
Left := ScaleX(8);
Top := ScaleY(327);
Width := ScaleX(75);
Height := ScaleY(23);
Caption := 'Моя кнопка';
OnClick := @NewButton1Click;
end;
end;
Автор: innonewbie
Дата сообщения: 26.07.2012 16:39
MOD_TEC

Цитата:
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
...

Про это я знаю, но тогда при нажатии на кнопку отмена инсталл акрывается без запроса.

nik1967
Спасибо огромное, то что нужно! Вы как всегда выручили меня своим примером!
Автор: nik1967
Дата сообщения: 26.07.2012 18:24
Вышла расширенная версия Inno setup 5.5.1
Автор: unni
Дата сообщения: 27.07.2012 02:31
nik1967

А как её устанавливать-то? Просто рядом или с заменой как-то? У меня 5-ка и структура каталогов там другая.

Добавлено:
А, видимо я не обновился, у меня 5.4.3 кажись до сих пор. Да, кстати, не подскажите как делать два дистрибутива: отдельно для x32 и для x64? У меня программка на VB6 и там куча ocx'ов, которые надо положить и зарегистрировать. А папки-то куда ложить надо отличаются, пока я указываю так:


Код: Source: "C:\Windows\system32\comct332.ocx"; DestDir: "{sys}"; Flags: restartreplace sharedfile regserver;
Автор: nik1967
Дата сообщения: 27.07.2012 10:12

Цитата:
А как её устанавливать-то?
Блин, я наверно раз 100 писал, как это делать! В зависимости от установленного Inno Setup (Unicode или Ansi) файлы из папок InnoSetup_Unicode/FullVCL или InnoSetup_ANSI/FullVCL копируем/перемещаем с заменой в директорию с установленным Inno Setup. Всё.

Цитата:
Но мне нужно делать сборку инсталлятора и для x64, не знаю где бы пример взять. Может там сильно что-то отличает. Подскажите.
Никогда не имел дел с инсталляторами для программ (пишу инсталляторы для игр), но думаю Inno Setup сам "знает" куда устанавливать на х86(32) и на х64 системах (естественно нужно указывать Check: IsWin64 для х64 для устанавливаемых файлов). Могу ошибаться, пусть подскажут более знающие товарищи.

Автор: CKILL
Дата сообщения: 27.07.2012 10:45

Цитата:
Но мне нужно делать сборку инсталлятора и для x64

[more=примерно так]

Код:
[Files]
Source: "x86\*"; DestDir: {app}; Check: not IsWin64;
Source: "x64\*"; DestDir: {app}; Check: IsWin64;
Source: "прога\*"; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "{app}\utshellext.dll"; DestDir: "{app}"; Flags: external regserver;
Автор: YURSHAT
Дата сообщения: 27.07.2012 14:17
unni, если есть проблемы с уcтановкой китайской версии, качайте сборку innoultra
Автор: nik1967
Дата сообщения: 27.07.2012 16:54
YURSHAT, там старая же "Обновлено 14 Января 2012г."

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177

Предыдущая тема: поиск


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.