|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9] |
|
|
Скрипты Inno Setup. Помощь и советы [часть 9]
|
|
Ветеран Сообщения: 1274 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Скрипты 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 |
|
Пользователь Сообщения: 99
|
Профиль | Отправить 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 |
|
Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать Цитата DA-Bro:
|
|
|
Последний раз редактировалось Alex S, 17-11-2022 в 18:19. Причина: Правка текста Отправлено: 18:14, 17-11-2022 | #902 |
|
Старожил Сообщения: 292
|
Профиль | Отправить 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
|
|
------- Отправлено: 18:26, 17-11-2022 | #903 |
|
Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать SetupIconFile = Image\Setup.ico
Если рядом со скриптом есть папка, в которой лежит твой файл значка Setup.ico, то все должно работать без проблем... |
|
Отправлено: 18:27, 17-11-2022 | #904 |
|
Пользователь Сообщения: 99
|
Профиль | Отправить 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;
|
|
Последний раз редактировалось DA-Bro, 17-11-2022 в 19:17. Отправлено: 19:01, 17-11-2022 | #905 |
|
Старожил Сообщения: 292
|
Профиль | Отправить PM | Цитировать DA-Bro
Выше var begin убери. Иконка и без этого куска кода работает. |
|
------- Отправлено: 19:16, 17-11-2022 | #906 |
|
Пользователь Сообщения: 99
|
Профиль | Отправить PM | Цитировать ZVSRus,
Цитата:
А мы об одном и том же говорим? Иконка должна заменить картинку в правом верхнем углу. Вот мне и попались в справке два варианта этих словами не скажешь злополучных кодов) |
|
|
Последний раз редактировалось DA-Bro, 25-11-2022 в 01:49. Отправлено: 19:50, 17-11-2022 | #907 |
|
Старожил Сообщения: 292
|
Профиль | Отправить PM | Цитировать DA-Bro
Это сообщение что Неизвестный тип TNewIcon. Без скрипта тяжело что либо понять. Показывай весь скрипт. |
|
------- Отправлено: 20:06, 17-11-2022 | #908 |
|
Пользователь Сообщения: 99
|
Профиль | Отправить 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 '[email protected] 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 '[email protected] stdcall delayload';
function CreateToolhelp32Snapshot (dwFlags, th32ProcessID: dword): THandle; external '[email protected] 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 '[email protected] stdcall delayload';
function TerminateProcess (hProcess: THandle; uExitCode: longint): bool; external '[email protected] 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 '[email protected] stdcall delayload';
function WriteFile (hFile: THandle; lpBuffer: String; nNumberOfBytesToWrite: LongInt; var lpNumberOfBytesWritten: LongInt; lpOverlapped: LongInt): Boolean; external '[email protected] 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 |
|
Старожил Сообщения: 292
|
Профиль | Отправить PM | Цитировать DA-Bro
Это понятно, только какая? А мы об одном и том же говорим? Иконка должна заменить картинку в правом верхнем углу. Вот мне и попались в справке два варианта этих словами не скажешь злополучных кодов) Блин, две страницы форума исписали, наконец то дошло картинку прикрепить. Там должна быть не иконка, а простая картинка в .bmp или .png формате. Эта картинка называется WizardSmallImageFile = WizardSmallImage.bmp (директива в секции Setup) Ранее я вам давал пример как запихнуть свою картинку на MainPanel Ваш скрипт |
|
------- Отправлено: 20:55, 17-11-2022 | #910 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| Скрипты 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 | |
|