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

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

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

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

Ветеран


Contributor


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


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

Профиль | Отправить 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

 

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


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

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


ZVSRus,
Setup
[Setup]
MinVersion = 0.0,5.01

ShowLanguageDialog = yes

#define AppExe "{app}\Program.exe"
#define AppName "Program"
#define AppVerName = "Program 1.0"
#define AppVer "1.0"

AppName = {#AppName}
AppVerName = {#AppVerName}
AppVersion = {#AppVer}
AppPublisher = {#AppPub}
AppPublisherURL = {#AppURL}
AppId = {#AppName}
UninstallDisplayIcon = {#AppExe}
VersionInfoVersion = {#AppVer}
AppComments = "Program"

DefaultDirName = "{pf}\Program\Program"
DefaultGroupName = "Program\Program"

DisableWelcomePage = no
AlwaysUsePersonalGroup = yes
AllowNoIcons = yes

SetupIconFile = Image\Setup.ico
WizardImageFile = Image\WizardImage.bmp
WizardSmallImageFile = Image\WizardSmallImage.bmp

Последний раз редактировалось DA-Bro, 25-11-2022 в 01:41.


Отправлено: 17:52, 17-11-2022 | #901



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

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


Аватара для Alex S

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


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

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


Цитата DA-Bro:
где взять расширенную версию попробовать. »
Отправил ссылку в личку... Пробуй.

Последний раз редактировалось Alex S, 17-11-2022 в 18:19. Причина: Правка текста


Отправлено: 18:14, 17-11-2022 | #902


Аватара для ZVSRus

Старожил


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

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


Ваш скрипт у меня работает правильно

Код: Выделить весь код
#define AppExe "{app}\SSDToolBox.exe"
#define AppName "ADATA SSD ToolBox"
#define AppVerName = "ADATA SSD ToolBox 5.0.16"
#define AppVer "5.0.16"
#define AppPub "ADATA Technology Co., Ltd."
#define AppCopyright "Copyright © 2020-2022, ADATA Technology Co., Ltd."
#define AppDescription AppVerName

#define AppURL "https://www.adata.com/"

[Setup]
MinVersion = 0.0,5.01
ShowLanguageDialog = yes

AppName = {#AppName}
AppVerName = {#AppVerName}
AppVersion = {#AppVer}
AppPublisher = {#AppPub}
AppPublisherURL = {#AppURL}
AppSupportURL = {#AppURL}
AppUpdatesURL = {#AppURL}
AppCopyright = {#AppCopyright}
AppId = {#AppName}
UninstallDisplayIcon = {#AppExe}
VersionInfoDescription = {#AppDescription}
VersionInfoVersion = {#AppVer}
AppComments = "ADATA SSD ToolBox"

DefaultDirName = "{pf}\ADATA\SSD ToolBox"
DefaultGroupName = "ADATA\SSD ToolBox"

OutputBaseFilename = ADATA.SSD.ToolBox

DisableWelcomePage = no
AlwaysUsePersonalGroup = yes
AllowNoIcons = yes

SetupIconFile = Setup.ico
WizardImageFile = WizardImage.bmp
//WizardSmallImageFile = Image\WizardSmallImage.bmp

-------
Inno Setup 5.5.1.ee2 Ultra ANSI Unicode

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

Отправлено: 18:26, 17-11-2022 | #903


Аватара для Alex S

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


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

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


SetupIconFile = Image\Setup.ico
Если рядом со скриптом есть папка, в которой лежит твой файл значка Setup.ico, то все должно работать без проблем...

Отправлено: 18:27, 17-11-2022 | #904


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


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

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


ZVSRus, а кусок кода можно посмотреть который Вы проверяли.
Мне надо пример полностью увидеть, так то легче соображается.

Вот вставляю я это:

Код: Выделить весь код
procedure NewIcon;
begin
var
Icon: TNewIcon;
begin
Icon := TNewIcon.Create; ///Support True Color
Icon.LoadFromFile(ExpandConstant('Image\Icon.ico'));
Icon.Width := 16; ///Selected Icon Size (16x16 ; 32x32; 48x48 ......)
Icon.Height := 16; ///Default Size: 32x32
WizardForm.Icon.Handle := Icon.Handle;
end;
И тормозит у меня на строчке var

Последний раз редактировалось DA-Bro, 17-11-2022 в 19:17.


Отправлено: 19:01, 17-11-2022 | #905


Аватара для ZVSRus

Старожил


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

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


DA-Bro
Выше var begin убери.

Иконка и без этого куска кода работает.

-------
Inno Setup 5.5.1.ee2 Ultra ANSI Unicode

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

Отправлено: 19:16, 17-11-2022 | #906


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


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

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


ZVSRus,
Цитата:
Иконка и без этого куска кода работает.
Это понятно, только какая?

А мы об одном и том же говорим?
Иконка должна заменить картинку в правом верхнем углу.

Вот мне и попались в справке два варианта этих словами не скажешь злополучных кодов)

Последний раз редактировалось DA-Bro, 25-11-2022 в 01:49.


Отправлено: 19:50, 17-11-2022 | #907


Аватара для ZVSRus

Старожил


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

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


DA-Bro
Это сообщение что Неизвестный тип TNewIcon.
Без скрипта тяжело что либо понять.
Показывай весь скрипт.

-------
Inno Setup 5.5.1.ee2 Ultra ANSI Unicode

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

Отправлено: 20:06, 17-11-2022 | #908


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


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

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


ZVSRus,
...
[code]#define WildcardExists(str FileName) \
((Local[0] = FindFirst(FileName, faAnyFile)) ? \
(FindClose(Local[0]), True): False)

#define FolderExists(str FolderName) \
((Local[0] = FindFirst(FolderName, faDirectory)) ? \
(FindClose(Local[0]), True): False)

#ifdef UNICODE
#define AW "W"
#define W "W"
#else
#define AW "A"
#define W ""
#endif

Код: Выделить весь код
{
	Функции, константы и типы WinAPI
}

const
	INVALID_HANDLE_VALUE		= -1;

	LOAD_LIBRARY_AS_DATAFILE	= $2;
	LOAD_LIBRARY_AS_IMAGE_RESOURCE	= $20;

	ERROR_SUCCESS			= $0;
	TH32CS_SNAPPROCESS		= $2;
	PROCESS_TERMINATE		= $1;

	SPI_SETSCREENSAVEACTIVE	= $11;
	SPI_SETCURSORS		= $57;
	SPIF_SENDCHANGE		= $2;

{
	GENERIC_READ		= $80000000;
	GENERIC_WRITE		= $40000000;
	GENERIC_EXECUTE		= $20000000;
	GENERIC_ALL		= $10000000;
	FILE_SHARE_READ		= $1;
	FILE_SHARE_WRITE	= $2;
	FILE_SHARE_DELETE	= $4;
	CREATE_NEW		= $1;
	CREATE_ALWAYS		= $2;
	OPEN_EXISTING		= $3;
	OPEN_ALWAYS		= $4;
	TRUNCATE_EXISTING	= $5;
	FILE_READ_ATTRIBUTES	= $80;
	FILE_WRITE_ATTRIBUTES	= $100;
}

type
	TProcessEntry32 = record
		dwSize			: dword;
		cntUsage		: dword;
		th32ProcessID		: dword;
		th32DefaultHeapID	: longint;
		th32ModuleID		: dword;
		cntThreads		: dword;
		th32ParentProcessID	: dword;
		pcPriClassBase		: longint;
		dwFlags			: dword;
		szExeFile		: Array[0..259] of Char;
	end;

function CloseHandle			(hObject: THandle): bool; external 'CloseHandle@kernel32.dll stdcall delayload';

function LoadLibraryEx			(lpFileName: string; hFile: THandle; dwFlags: dword): THandle; external 'LoadLibraryEx{#AW}@kernel32.dll stdcall delayload';
function LoadString			(hInstance: THandle; uID: longint; lpBuffer: String; nBufferMax: integer): integer; external 'LoadString{#AW}@user32.dll stdcall delayload';
function FreeLibrary			(hModule: THandle): bool; external 'FreeLibrary@kernel32.dll stdcall delayload';

function CreateToolhelp32Snapshot	(dwFlags, th32ProcessID: dword): THandle; external 'CreateToolhelp32Snapshot@kernel32.dll stdcall delayload';
function Process32First			(hSnapshot: THandle; var lppe: TProcessEntry32): bool; external 'Process32First{#W}@kernel32.dll stdcall delayload';
function Process32Next			(hSnapshot: THandle; var lppe: TProcessEntry32): bool; external 'Process32Next{#W}@kernel32.dll stdcall delayload';
function OpenProcess			(dwDesiredAccess: dword; bInheritHandle: bool; dwProcessId: dword): THandle; external 'OpenProcess@kernel32.dll stdcall delayload';
function TerminateProcess		(hProcess: THandle; uExitCode: longint): bool; external 'TerminateProcess@kernel32.dll stdcall delayload';

function SystemParametersInfo		(uiAction: dword; uiParam: variant; var pvParam: variant; fWinIni: dword): bool; external 'SystemParametersInfo{#AW}@user32.dll stdcall delayload';

{
	function CreateFile		(lpFileName: String; dwDesiredAccess: Cardinal; dwShareMode: Cardinal; lpSecurityAttributes: Cardinal; dwCreationDisposition: Cardinal; dwFlagsAndAttributes: Cardinal; hTemplateFile: Integer): Integer; external 'CreateFile{#AW}@kernel32.dll stdcall delayload';
	function ReadFile		(hFile: THandle; lpBuffer: String; nNumberOfBytesToRead: LongInt; var lpNumberOfBytesRead: LongInt; lpOverlapped: LongInt): Boolean; external 'ReadFile@kernel32.dll stdcall delayload';
	function WriteFile		(hFile: THandle; lpBuffer: String; nNumberOfBytesToWrite: LongInt; var lpNumberOfBytesWritten: LongInt; lpOverlapped: LongInt): Boolean; external 'WriteFile@kernel32.dll stdcall delayload';
}


{
	Получение пути к папке Программы для константы code.
	Использование:
		GetProgsDir ('');
}

function GetProgramsDir (Default: String): String;
begin
	if IsAdminLoggedOn() then
		result:= ExpandConstant ('{commonprograms}')
	else
		result:= ExpandConstant ('{userprograms}');
end;


{
	Адаптация ф-ции WizardGroupValue для константы code.
	Использование:
		GetProgsCatName ('');
}

function GetGroupDir (Default: String): String;
begin
	result:= WizardGroupValue ();
end;


{
	Получение текущей даты для константы code.
	Использование:
		GetDateTime ('yyyymmdd');
}

function GetDateTime (Default: String): String;
begin
	result:= GetDateTimeString (Default, #0, #0)
end;


{
	Разделение строки в массив.
	Использование:
		StringSplit ('Строка', 'Разделитель');
}

function StringSplit (Const Str, Splitter: String): Array of String;
var
	cPos	: Integer;
	cStr	: String;

begin
	while Length (Str) > 0 do
	begin

		cPos:= Pos (Splitter, Str);

		if not (cPos = 0) then
		  begin
			cStr:= Copy (Str, 1, cPos - 1);
			Delete (Str, 1, cPos);
		  end
		else
		  begin
			cStr:= Copy (Str, 1, Length (Str));
			Str:= '';
		  end;

		if Length (cStr) > 0 then
		  begin
			SetArrayLength (result, GetArrayLength (result) + 1);
			result[GetArrayLength (result) - 1]:= cStr;
		  end;
	end;
end;


{
	Получение значения бита в числе.
	Использование:
		GetBit (Число, бит);
}

function GetBit (Const Value, Bit: Integer): Boolean;
begin
	result:= (Value and (1 shl Bit)) <> 0;
end;


{
	Установка значения 1 бита в числе.
	Использование:
		SetBit (Переменная, бит);
}

procedure SetBit (Var Value: Integer; const Bit: Integer);
begin
	Value:= Value or (1 shl Bit);
end;


{
	Эмулятор типа встроенной Inc
	Использование:
		Inc (Переменная Integer);
}

procedure Inc (Var a: Integer);
begin
	a:= a + 1;
end;


{
	Удаление файла из-под текущего юзера (нужна для W7)
	Использование:
		FileDelete_AsUser ('путь к файлу')
}

procedure FileDelete_AsUser (Const sFileName: String);
begin
	DeleteFile (ExpandConstant ('{localappdata}\VirtualStore\') + ExtractRelativePath (ExpandConstant ('{sd}'), ExpandConstant (sFileName)));
end;


{
	Добавление в панель задач (Taskband на W7)
	Использование:
		PinToTaskband ('путь к файлу')
}

procedure PinToTaskband (sFileName: String);
var
	i				: Integer;
	hLib				: THandle;
	sRealFile, sVerb, sVBSFile	: String;
	oShell, oFile, oVerbs 		: Variant;

begin
	sFileName	:= ExpandConstant (sFileName);
	sRealFile	:= sFileName;

	if (GetWindowsVersion shr 16 < $0601) or Not FileExists (sFileName) then
		Exit;

	try
		hLib:= LoadLibraryEx ('shell32.dll', 0, LOAD_LIBRARY_AS_DATAFILE or LOAD_LIBRARY_AS_IMAGE_RESOURCE);
		SetLength (sVerb, 256);
		SetLength (sVerb, LoadString (hLib, 5386, sVerb, 255 {#(defined (UNICODE)) ? ("*2") : ("")}));

		if Not (Length (sVerb) > 0) then
			RaiseException ('Error getting "Pin to taskband" verbosity name');

		oShell	:= CreateOleObject ('Shell.Application');
		oFile	:= oShell.NameSpace(ExtractFileDir (sFileName)).ParseName(ExtractFileName (sFileName));
		oVerbs	:= oFile.Verbs

		if oFile.IsLink then
			sRealFile:= oFile.GetLink.Path;

		for i:= 0 to oVerbs.Count - 1 do
		if CompareText (sVerb, oVerbs.Item(i).Name) = 0 then
		  begin
			if oFile.IsLink then
				DeleteFile (ExpandConstant ('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName (sFileName));

			if IsWin64 and (Pos (ExpandConstant ('{pf64}\'), sRealFile) = 1) then
			  begin
				sVBSFile:= GenerateUniqueName (GetTempDir, '.vbs');

				SaveStringToFile	(sVBSFile, \
					'Set oShell=CreateObject("Shell.Application")'											+ #13 + \
					'Set oVerbs=oShell.NameSpace("' + ExtractFileDir (sFileName) + '").ParseName("' + ExtractFileName (sFileName) + '").Verbs'	+ #13 + \
					'For Each oVerb In oVerbs'													+ #13 + \
					'  If (oVerb="' + sVerb + '") Then'												+ #13 + \
					'    oVerb.DoIt'														+ #13 + \
					'    Exit For'															+ #13 + \
					'  End If'															+ #13 + \
					'Next'																, False);

				Exec		(ExpandConstant ('{win}\Sysnative\cscript.exe'), '"' + sVBSFile + '" /B', '', SW_HIDE, ewWaitUntilTerminated, i);
				DeleteFile	(sVBSFile);
			  end
			else
				oVerbs.Item(i).DoIt;

			Break;
		  end;
	except end;

	if Not (hLib = 0) then
		FreeLibrary (hLib);
end;


{
	Убивание процессов
	Использование:
		ProcessKill	(PID);		(функция)
		pProcessKill	(PID);		(процедура)
		ProcessKillAll	('имя_процесса');(функция)
		pProcessKillAll	('имя_процесса');(процедура)
}

function ProcessKill (Pid: longint): bool;
var
	hTargetProc	: THandle;
begin
	hTargetProc:= OpenProcess (PROCESS_TERMINATE, False, Pid);
	if not (hTargetProc = INVALID_HANDLE_VALUE) then
	  begin
		result:= TerminateProcess (hTargetProc, -1);
		CloseHandle (hTargetProc);
	  end;
end;

procedure pProcessKill (Pid: longint);
begin
	ProcessKill (Pid);
end;

function ProcessKillAll (TaskName: String): bool;
var
	i		: longint;
	bContinue	: bool;
	sCurrentProc	: String;
	hSnapshot	: THandle;
	rCurrentProc	: TProcessEntry32;
begin
	if Length (TaskName) = 0 then
		Exit;

	hSnapshot:= CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0);
	if hSnapshot = INVALID_HANDLE_VALUE then
		exit;

	rCurrentProc.dwSize	:= SizeOf (rCurrentProc);
	bContinue		:= Process32First (hSnapshot, rCurrentProc);

	while bContinue do
	 begin
		sCurrentProc:= '';
		for i:= 0 to 259 do
		 begin
			if rCurrentProc.szExeFile[i] = #0 then
				break;

			sCurrentProc:= sCurrentProc + rCurrentProc.szExeFile[i];
		 end;

		if CompareText (sCurrentProc, TaskName) = 0 then
			Result:= ProcessKill (rCurrentProc.th32ProcessID);

		rCurrentProc.dwSize	:= SizeOf (rCurrentProc);
		bContinue		:= Process32Next (hSnapshot, rCurrentProc);
	 end;

	CloseHandle (hSnapshot);
end;

procedure pProcessKillAll (TaskName: String);
begin
	ProcessKillAll (TaskName);
end;

Последний раз редактировалось DA-Bro, 18-11-2022 в 00:05.


Отправлено: 20:18, 17-11-2022 | #909


Аватара для ZVSRus

Старожил


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

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


DA-Bro

Это понятно, только какая?

А мы об одном и том же говорим?
Иконка должна заменить картинку в правом верхнем углу.

Вот мне и попались в справке два варианта этих словами не скажешь злополучных кодов)

Блин, две страницы форума исписали, наконец то дошло картинку прикрепить.
Там должна быть не иконка, а простая картинка в .bmp или .png формате.
Эта картинка называется WizardSmallImageFile = WizardSmallImage.bmp (директива в секции Setup)
Ранее я вам давал пример как запихнуть свою картинку на MainPanel

Ваш скрипт

-------
Inno Setup 5.5.1.ee2 Ultra ANSI Unicode

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

Отправлено: 20:55, 17-11-2022 | #910



Компьютерный форум 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




 
Переход