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

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

Автор: Mailchik
Дата сообщения: 01.02.2014 12:51
boss911

Цитата:
То есть, чтобы в одном месте указать путь к файлу, чтобы в нужное место подставлялся не только имя файла, а весь путь к нему?

[more=код...]
Код: #define ExePath "{app}\bin\MyProg.exe"

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
CreateUninstallRegKey=false

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}\bin;

[Tasks]
Name: PinToTaskBar; Description: {cm:cTaskBarTxt}; MinVersion: 0,6.0;
Name: PinToStartMenu; Description: {cm:cStartMenuTxt}; MinVersion: 0,6.0;

[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "en"; MessagesFile: "compiler:Languages\English.isl"

[CustomMessages]
ru.cTaskBarTxt=Закрепить на панели задач
ru.cStartMenuTxt=Закрепить в меню "Пуск"
en.cTaskBarTxt=Pin to Taskbar
en.cStartMenuTxt=Pin to Start Menu

[Code]
const
LOAD_LIBRARY_AS_DATAFILE = $2;

#define A = (Defined UNICODE) ? "W" : "A"

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';

/////////////////////////////////////////////////////////////////////////
function PinToTaskbar(const szFilename: String; TaskBar, IsPin: Boolean): Boolean;
//szFilename: full path to executable file
//TaskBar: False - pin to StartMenu, True - pin to TaskBar
//IsPin: False - unpin from TaskBar/StartMenu, True - pin to TaskBar/StartMenu
var
hInst: THandle;
buf: array [0..255] of Char;
i, res: Integer;
strLnk, strVerb: String;
objShell, colVerbs: Variant;
begin
Result := False;
if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit;
if IsPin then
begin
if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
begin
while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
end;
if TaskBar then res := 5386 else res := 5381;
end else if TaskBar then res := 5387 else res := 5382;
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
if hInst <> 0 then
try
for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
try
objShell := CreateOleObject('Shell.Application');
colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
begin
colVerbs.Item[i].DoIt;
Result := True;
Break;
end;
except
Exit;
end;
finally
FreeDLL(hInst);
end;
end;

procedure CurPageChanged(CurPageID: integer);
begin
case CurPageID of
wpFinished: begin
if IsTaskSelected('PinToTaskBar') then
PinToTaskbar(ExpandConstant('{#ExePath}'), True, True);
if IsTaskSelected('PinToStartMenu') then
PinToTaskbar(ExpandConstant('{#ExePath}'), False, True);
end;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
instPath: string;
begin
case CurUninstallStep of
usUninstall: begin
PinToTaskbar(ExpandConstant('{#ExePath}'), True, False);
PinToTaskbar(ExpandConstant('{#ExePath}'), False, False);
end;
end;
end;
Автор: RRRRR
Дата сообщения: 01.02.2014 21:52
как прописать в установщике, чтобы копировать файл с сохранением даты и атрибутов?
Автор: BlackInferno1989
Дата сообщения: 02.02.2014 14:21
Люди, нужна Ваша помощь.
Делаю репак мода для лицензионной игры в Steam - State of Decay. Нужно что бы инсталятор сам находил папку с установленной игрой.
Знаю, что в скрипт требуется вкрутить ключ реестра этой игры, но тут и появляется проблема - не могу найти ключ.
Подскажите пожалуйста как найти нужный ключ в реестре и как потом его крутить в скирпт, дайте код скрипта если есть такой.
Автор: Apelsinn
Дата сообщения: 02.02.2014 18:45
Всем добрый вечер. Хочу спросить:
1) Можно ли сделать объект WizardForm.InfoBeforeMemo без заднего фона (т.е. прозрачным) (без ботвы) и если нет, то какой объект можно взять вместо него у которого есть прозрачность и скроллбар?
2) Чем отличается

Код:
SendMessage(WizardForm.CancelButton.Handle, $00F5, 0, 0);
Автор: MOD_TEC
Дата сообщения: 03.02.2014 16:40
Как удалить иконку в левом верхнем углу...
Автор: innonewbie
Дата сообщения: 03.02.2014 16:46
MOD_TEC, как вариант, так:
procedure InitializeWizard();
begin
WizardForm.BorderStyle := bsDialog;
end;
Но тогда ещё исчезнет кнопка свернуть, останется только закрыть.
Автор: MOD_TEC
Дата сообщения: 03.02.2014 17:00
innonewbie Спасибо. А чтобы еще и свернуть кнопку оставить...
Автор: andrey167
Дата сообщения: 03.02.2014 20:53
Есть такая проблемка создал новую страницу на нее перенес компоненты но проблема в том что is done не хочет распаковывать по компонентам может кто подскажет как можно исправить проблемку
Автор: MOD_TEC
Дата сообщения: 03.02.2014 21:56
Как можно удалить Меню «О программе». Зарание спасибо...

Добавлено:
Или же все меню http://rghost.ru/52186915
Автор: 307cwam
Дата сообщения: 03.02.2014 23:35
Здраствуйте,

У меня в инсталляторе прописана секция рун

[Run]
Filename: "{app}\RC.exe"; Description: "Запустить программу."; Flags: postinstall

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

На Windows XP запуск происходит нормально.
А вот на Windows 8.1, нет. Появляется эта ошибка.

http://s009.radikal.ru/i310/1402/ff/2a2aef4cca67.png

Что необходимо прописать ещё,
чтобы этой ошибки не было
и файл запускался?
Автор: Dobry_Doctor
Дата сообщения: 04.02.2014 07:20
Доброго всем времени суток.
Перед установкой обновления необходимо проверить, установлена ли программа, проверить еще несколько ключей реестра и т.п. Если хотя бы одна проверка не прошла - выйти на wpFinished. Проверки сделал после wpInfoBefore, предварительно объявив флаг проверки. fAbortSetup отрабатывает, при неудачной проверке инсталлятор выходит на wpFinished, но вот файлы из секции [Files] всё равно копируются, чего не нужно. Можно ли как-нибудь обойтись без того чтобы засунуть проверки в InitializeSetup() ? Так хоть инсталлятор говорит что будем устанавливать, показывает информацию о разработчике и пр... Если нужна полностью секция [Setup] - приведу почти дословно. А пока так вот :

[Files]
Source: MyFile.exe; DestDir: {app}; Flags: ignoreversion
Source: MyFile.dll; DestDir: {app}; Flags: ignoreversion

[Code]
var fAbortSetup: Boolean;

function InitializeSetup(): Boolean;
begin
fAbortSetup := false;
Result:=True;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := true;
case CurPageID of
wpInfoBefore:
begin
if ПРОВЕРКА НЕ ПРОШЛА then fAbortSetup := true;
end;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if fAbortSetup then
begin
case PageID of
wpSelectDir,wpSelectProgramGroup,wpSelectTasks,wpReady,wpPreparing,wpInstalling,wpInfoAfter: Result := True;
end;
if ActiveLanguage = 'English' then
WizardForm.FinishedLabel.Caption := 'Update pack installation aborted.'+#10+#13+'Click "Finish" to exit the installation'
else if ActiveLanguage = 'Russian' then
WizardForm.FinishedLabel.Caption := 'Установка пакета обновления прервана.'+#10+#13+'Нажмите "Завершить" чтобы выйти из программы установки.';
end
else wpSelectDir,wpSelectProgramGroup,wpSelectTasks,wpReady,wpPreparing,wpInstalling: Result := false;
end;

И еще вопрос. В секции [Files] есть файлы, дополняющие существующие в {app}, причем в разных папках внутри {app}. Выглядит это так

[Setup]
Uninstallable=no
UninstallLogMode=append

[Files]
Source: 001\File1.exe; DestDir: {app}\001; Flags: ignoreversion recursesubdirs
Source: 002\File2.exe; DestDir: {app}\002; Flags: ignoreversion recursesubdirs
Source: "002\Dat\AAA.dat; DestDir: "{app}\002\DAT"; Flags: ignoreversion recursesubdirs
Source: "002\Dat\BBB.dat"; DestDir: "{app}\002\DAT"; Flags: ignoreversion recursesubdirs

Основной деинсталлятор должен удалять только File1.exe и File2.exe и удалять папки. Остальное устанавливается в обновлении. Так вот, и при UninstallLogMode=append и UninstallLogMode=overwrite не получается корректно полностью деинсталлировать программу. То есть ставлю основную программу, ставлю на неё обновление, запускаю основной деинсталлятор - в {арр} остаются папка 002 а в ней AAA.dat и BBB.dat. Что не так делаю ?
Автор: Sanch8
Дата сообщения: 04.02.2014 13:37
MOD_TEC
Удаление [more=меню]
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
function AppendMenu(hMenu: HMENU; uFlags, uIDNewItem: UINT; lpNewItem: PChar): BOOL; external 'AppendMenuA@user32.dll stdcall';
function GetSystemMenu(hWnd: HWND; bRevert: BOOL): HMENU; external 'GetSystemMenu@user32.dll stdcall';

procedure InitializeWizard();
begin
if not AppendMenu(GetSystemMenu(Wizardform.Handle, True), 200, 0, SetupMessage(msgAboutSetupMenuItem)) then
WizardForm.Position:= poScreenCenter;
end;[/more] «О программе»
Автор: MOD_TEC
Дата сообщения: 04.02.2014 14:51
Почему кнопка отмены наложенная через ботву не отображается на wpInstalling?
Как ее отобразить и почему она скрыта непонятно...
Зарание спасибо если кто поможет разобраться...

Добавлено:
Sanch8Спасибо...
Автор: 307cwam
Дата сообщения: 04.02.2014 19:14
Здраствуйте,

У меня в инсталляторе прописана секция рун

[Run]
Filename: "{app}\RC.exe"; Description: "Запустить программу."; Flags: postinstall

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

На Windows XP запуск происходит нормально.
А вот на Windows 8.1, нет. Появляется эта ошибка.

http://s009.radikal.ru/i310/1402/ff/2a2aef4cca67.png

Что необходимо прописать ещё,
чтобы этой ошибки не было
и файл запускался?

====================================
запуск от имени администратора решает эту проблему.
Спасибо!

Но как прописать этот запуск в инсталляторе,
чтобы не надо было лезть в контекстное меню,
чтобы всё было по двойному клику?
Автор: AlekseyPopovv
Дата сообщения: 04.02.2014 20:43
Всем привет. Помогите с CheckBox-ом:
[more] [/more]
Автор: tryroom
Дата сообщения: 04.02.2014 21:23
307cwam
запуск от админа
[Setup]
AppName=My Program
AppVerName=My Program v1.7
DefaultDirName={pf}\My Program
OutputDir=.
OutputBaseFilename=Test

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion;

[Registry]
Root: HKCU; SubKey: "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; ValueType: string; ValueName: "{app}\MyProg.exe"; ValueData: RUNASADMIN; Flags: uninsdeletevalue; MinVersion: 0,6.1;
Автор: MOD_TEC
Дата сообщения: 05.02.2014 13:38
Как прописать только сколько Требуется места для установки и Занимаемое место после установки.
Зарание спасибо... (Если можно дайте пожалуйста пример)
Автор: innonewbie
Дата сообщения: 05.02.2014 15:27
AlekseyPopovv, можно через хинт (допиши это в процедуру создания чекбокса):
Hint := 'бла бла бла';
ShowHint := True;
Автор: AlekseyPopovv
Дата сообщения: 05.02.2014 23:23
innonewbie
Спасибо. То что нужно.
Автор: BlackInferno1989
Дата сообщения: 06.02.2014 17:03
Так и не ответили на мой вопрос, поэтому повторю его еще раз:

Цитата:
Люди, нужна Ваша помощь. Делаю репак мода для лицензионной игры в Steam - State of Decay. Нужно что бы инсталятор сам находил папку с установленной игрой. Знаю, что в скрипт требуется вкрутить ключ реестра этой игры, но тут и появляется проблема - не могу найти ключ. Подскажите пожалуйста как найти нужный ключ в реестре и как потом его крутить в скирпт, дайте код скрипта если есть такой.

Автор: ZIKIG
Дата сообщения: 06.02.2014 19:42
Привет всем!

Протестите пожалуйста скин со всеми плюшками....
результаты можно скринами.....заранее спаcибо.

Все необходимое в архиве скачать

PS. автор скина io
Автор: MOD_TEC
Дата сообщения: 06.02.2014 20:36
ZIKIG http://rghost.ru/52249957
Автор: vint56
Дата сообщения: 06.02.2014 20:42
ZIKIG unicode запустился а ansi компилируется при запуски виснет
Автор: ZIKIG
Дата сообщения: 07.02.2014 00:16
vint56

на сайте программы для скина написано
Если у вас установлен Inno Setup ansi, то используйте этот [more=Ansi-код]
procedure LoadVCLStyle(VClStyleFile: String); external 'LoadVCLStyleA@files:VclStylesInno.dll stdcall';
procedure UnLoadVCLStyles; external 'UnLoadVCLStyles@files:VclStylesInno.dll stdcall';

procedure DeinitializeSetup();
begin
UnLoadVCLStyles;
end;
[/more]

Если у вас установлен Inno Setup unicode, то используйте этот [more=Unicode-код]
procedure LoadVCLStyle(VClStyleFile: String); external 'LoadVCLStyleW@files:VclStylesInno.dll stdcall';
procedure UnLoadVCLStyles; external 'UnLoadVCLStyles@files:VclStylesInno.dll stdcall';

procedure DeinitializeSetup();
begin
UnLoadVCLStyles;
end;
[/more]

У меня уст. Inno Setup Unicode-расширенная версия и все раб., а ansi нет.

Добавлено:
Поделитесь кодом пожалуйста...(если такой есть)
[more=скрин] [/more]
Автор: MOD_TEC
Дата сообщения: 07.02.2014 09:30
У кого имеется библиотека IsMyFont.dll поделитесь пожалуйста...
Если несложно с примером использования...
Автор: vint56
Дата сообщения: 07.02.2014 10:17
ZIKIG я тебе и написал что в Unicode работает в Ansi виснет и выходит что не понятного я видел в архиве TEST_Ansi и TEST_Unicode я сделал тест 2 версий раными компиляторами на стандартном компиляторе ainsi работает
Автор: ZIKIG
Дата сообщения: 07.02.2014 11:16
vint56 я понял сп., а какую версию компилятора использовал?
Автор: tryroom
Дата сообщения: 07.02.2014 11:21
vint56
Нужна помощь.Есть ли способ обойти функцию Check и заставить работать код
определения места на диске, не прибегая к редактору форм.
http://rghost.ru/52258449
Автор: The_Immortal
Дата сообщения: 07.02.2014 11:50
Друзья, подскажите, пожалуйста, как можно в скрипте реализовать следующее в режиме verysilent:

если разрядность ОСи x86, то отменяем установку и в КОНСОЛЬ возвращаем какое-либо сообщение с кодом.


Пример того, что я хочу увидеть при запуске собранного инсталлятора Inno из-под CMD на 86-разрядной ОС:

Код: C:\Users\The_Immortal>program.exe
Unsupported OS (x86)

C:\Users\The_Immortal>
Автор: vint56
Дата сообщения: 07.02.2014 12:00
tryroom
http://rghost.ru/52259165
ZIKIG версия 5,37 но все ровно в ansi он не полностью работает скин чистично

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758

Предыдущая тема: Только инсталлятор


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