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

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

Автор: AlekseyPopovv
Дата сообщения: 26.01.2014 16:31
vint56
Спасибо. Да косяк был мой, присутствовал один пробел. С сохранением файла hosts какая то проблема. Ладно, буду разбираться.


Добавлено:
vint56
Сделал вот так, быть может кому пригодится:
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssPostInstall then
begin
SaveStringToFile(ExpandConstant('{sys}')+'\drivers\etc\hosts', #13#10'127.0.0.1 www.example.com', True);
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
HostFile: TStringList;
begin
HostFile := TStringList.Create;
try
with HostFile do
begin
LoadFromFile(ExpandConstant('{sys}\drivers\etc\hosts'));
if IndexOf('127.0.0.1 www.example.com') <> -1 then Delete(IndexOf('127.0.0.1 www.example.com'));
SaveToFile(ExpandConstant('{sys}\drivers\etc\hosts1'));
DeleteFile(ExpandConstant('{sys}\drivers\etc\hosts'));
RenameFile(ExpandConstant('{sys}\drivers\etc\hosts1'), ExpandConstant('{sys}\drivers\etc\hosts'));
end;
finally
HostFile.free;
end;
end;
Автор: tryroom
Дата сообщения: 26.01.2014 17:30
vint56

Не работает смена директории портативной версии. Не могу понять, что не так. Создаётся только пустая папка. Поможете. http://rghost.ru/51942983
Автор: vint56
Дата сообщения: 26.01.2014 20:01
tryroom
http://rghost.ru/51947747
Автор: tryroom
Дата сообщения: 27.01.2014 07:21
vint56

Большое спасибо за помощь.
Ваш вариант по смене директории у меня заработал. Правда с одной оговоркой, пришлось использовать unicode версию и что самое смешное пропала стандартная установка. При использовании ansi версии при распаковке ошибка Invalid pointer operation или Runtime error (at16:88) в зависимости от выбора версии. Обычная установка на ansi или unicode
без разницы, инсталлирует 2 файла unins000.dat,unins000.exe. Есть какие идеи.
Буду рад любой помощи.

http://rghost.ru/51957253
Автор: Sergey3631
Дата сообщения: 27.01.2014 07:42
Буду очень признателен, если посоветуете к кому можно обратиться по поводу создания собственного загрузочного диска из самостоятельно подобранных программ. Заранее благодарю.
Автор: 999Kay666
Дата сообщения: 27.01.2014 09:21
Здравствуйте.

Скажите почему так.....


чего-то не хватает? что-то еще нужно скрыть?
или что-то нужно растянуть при растяжке ComponentsList?


Код: procedure InitializeWizard();
begin
WizardForm.Caption :='ыыыыыыыыыыыыыы'
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.SelectDirBitmapImage.Hide;
WizardForm.SelectDirLabel.Hide;
WizardForm.SelectDirBrowseLabel.Hide;
WizardForm.DiskSpaceLabel.Hide;
WizardForm.Width:=500;
WizardForm.Height:=550;
WizardForm.OuterNotebook.Height:= ScaleY(475);
WizardForm.Position:=poScreenCenter;
WizardForm.DirEdit.Top := ScaleY(0);
WizardForm.NextButton.Top:=ScaleY(490);
WizardForm.CancelButton.Top:=ScaleY(490);
//WizardForm.CancelButton.Left:=ScaleX(0); //позиция кнопки слева
WizardForm.DirBrowseButton.Top := ScaleY(0);
WizardForm.ComponentsList.Top := ScaleY(30);
WizardForm.ComponentsList.Height := ScaleY(395);
WizardForm.ComponentsList.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ComponentsList.Parent := WizardForm.SelectDirPage;
WizardForm.WizardSmallBitmapImage.Left:=0; // растянуть WizardSmallImageFile (та, что в папке ISC, как WizModernSmallImage.bmp)
WizardForm.WizardSmallBitmapImage.Width:=WizardForm.ClientWidth // растянуть WizardSmallImageFile
Автор: vint56
Дата сообщения: 27.01.2014 09:32
tryroom у меня компилятор unicode я забыл в простой установки app добавить в переди {code:MyDir} потому как проверял только Portable
Source: "C:\Users\Администратор.Vint56\Desktop\выбор языка bmp 2\app\*"; DestDir: "{app}{code:MyDir}"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: RusLang and InstallerCheck and CheckSoft
Source: "C:\Users\Администратор.Vint56\Desktop\выбор языка bmp 2\por\*"; DestDir: "{app}{code:MyDir}"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: RusLang and PortableCheck


Цитата:
Обычная установка на ansi или unicode без разницы, инсталлирует 2 файла unins000.dat,unins000.exe. Есть какие идеи
может в папке CCleaner уже есть эти файлы unins000.dat,unins000.exe и установшик делает свой для удаления
Автор: Nightmareterrible
Дата сообщения: 27.01.2014 09:33
InnnerNotebook.Height := OuterNoteBook.Height
Автор: vint56
Дата сообщения: 27.01.2014 10:30
999Kay666
[more=пример]
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Components]
;Name: "EM_WP_Lite"; Description: "ExpromtMax WOT Pack lite"; Flags: Fixed;
Name: "NDXVMC"; Description: "XVM Config New Death от ExpromtMax";
Name: "NDXVMC\XPBarWide"; Description: "New Death Config с широкой полосой остатка XP"; Flags: exclusive; Types: full;
Name: "NDXVMC\XPBarNarrow"; Description: "New Death Config с узкой полосой остатка XP"; Flags: exclusive;
Name: "NDXVMC\LSS"; Description: "Лампочки Шестого чувства";
Name: "NDXVMC\LSS\EM"; Description: "Лампочка -NEW DEATH- (EXPROMT_MAX)"; Flags: exclusive; Types: full;
Name: "NDXVMC\LSS\WL"; Description: "Белая лампочка"; Flags: exclusive;
Name: "NDXVMC\LSS\WD"; Description: "Внимание, опасность!"; Flags: exclusive;
Name: "NDXVMC\LSS\SN"; Description: "Sukanoob"; Flags: exclusive;
Name: "NDXVMC\LSS\TF"; Description: "Танк обнаружен"; Flags: exclusive;
Name: "NDXVMC\LSS\EOS"; Description: "Око Саурона"; Flags: exclusive;
Name: "NDXVMC\SLSS"; Description: "Звук лампы шестого чувства";
Name: "NDXVMC\SLSS\EMM"; Description: "EXPROMT_MAX+Alhor с таймером"; Flags: exclusive; Types: full;
Name: "NDXVMC\SLSS\ALas"; Description: "Alastanka с таймером"; Flags: exclusive;
Name: "NDXVMC\SLSS\SAu"; Description: "Саурон"; Flags: exclusive;
Name: "NDXVMC\SLSS\HisF"; Description: "Истеричный FUCK"; Flags: exclusive;
Name: "NDXVMC\SLSS\Kat"; Description: "Катюша"; Flags: exclusive;
Name: "SIGHTS"; Description: "прицелы";
Name: "SIGHTS\SOD"; Description: "Прицел Дамоклов меч AleksLee (EXPROMT_MAX)"; Flags: exclusive; Types: full;
Name: "SIGHTS\TD"; Description: "Прицел TAIPAN - DIKEY93"; Flags: exclusive;
Name: "SIGHTS\MOT"; Description: "Космический прицел M_O_T clan"; Flags: exclusive;
Name: "SIGHTS\Jim"; Description: "Прицел Jimb0"; Flags: exclusive;
Name: "UGN"; Description: "Углы горизонтальной наводки";
Name: "UGN\SEM"; Description: "Shtys (EXPROMT_MAX)"; Flags: exclusive; Types: full;
Name: "UGN\AOD"; Description: "AleksLee дамоклов меч"; Flags: exclusive;
Name: "DP"; Description: "Дамаг Панели";
Name: "DP\GEM"; Description: "Дамаг-панель GambitER. (EXPROMT_MAX)"; Flags: exclusive; Types: full;
Name: "DP\BN"; Description: "Дамаг-панель BioNick"; Flags: exclusive;
Name: "DP\Dell"; Description: "Дамаг-панель Dellux"; Flags: exclusive;
Name: "DP\Zayaz"; Description: "Дамаг панель Zayaz"; Flags: exclusive;
Name: "TI"; Description: "Иконки танков (уши)";
Name: "TI\EM"; Description: "Иконки EXPROMT_MAX"; Flags: exclusive; Types: full;
Name: "TI\3D"; Description: "3D иконки Romkyns"; Flags: exclusive;
Name: "TI\ser"; Description: "Иконки seriych"; Flags: exclusive;
Name: "TI\Mstr"; Description: "Иконки Master_XH"; Flags: exclusive;
Name: "PIG"; Description: "Панели-часы в бою, в ангаре, пинг, фпс от marsoff (EXPROMT_MAX)"; Types: full;
Name: "PIG\Clock"; Description: "Часы в бою и время боя";
Name: "PIG\PFPS"; Description: "Панель пинг и фпс";
Name: "HDMap"; Description: "HD мини-карты locastan";
Name: "CHTIcons"; Description: "Чат-иконки и цветные сообщения iRamSoft (EXPROMT_MAX)"; Types: full;
Name: "RZDPlat"; Description: "Яркие жд платформы locastan";
Name: "WSkins"; Description: "Белые шкурки пробитий Nooben";
Name: "MFPet"; Description: "Маркер Фокус PetR0vich81 (EXPROMT_MAX)"; Types: full;
Name: "INO"; Description: "Индикатор направления огня";
Name: "INO\GW"; Description: "GreenWarriors (EXPROMT_MAX)"; Flags: exclusive; Types: full;
Name: "INO\PV"; Description: "poVitter"; Flags: exclusive;
Name: "INO\Mars"; Description: "marsoff"; Flags: exclusive;
Name: "InfP"; Description: "Инфо-панель цели Shtys (удалится время перезаряда в прицеле)";
Name: "InfP\Srd"; Description: "Стандарт"; Flags: exclusive;
Name: "InfP\Col"; Description: "Цветная"; Flags: exclusive;
Name: "Chat"; Description: "Настройка элементов чата в бою"
Name: "Chat\Hist"; Description: "История сообщений-STL1te"; Flags: exclusive;
Name: "Chat\PCht"; Description: "Прозрачный чат в бою-beta"; Flags: exclusive;
Name: "KSnD"; Description: "Крупно количество снарядов в панели, в бою-Zayaz (EXPROMT_MAX)"; Types: full;

[Code]
procedure InitializeWizard();
begin
with WizardForm do begin
ClientHeight := ScaleY(550);
ClientWidth := ScaleX(500);
end;

with WizardForm.OuterNotebook do
begin
Width := ScaleX(500);
Height := ScaleY(500);
end;

with WizardForm.InnerNotebook do
begin
Left := ScaleX(0);
Top := ScaleY(0);
Width := ScaleX(500);
Height := ScaleY(550);
end;

with WizardForm.DirEdit do
begin
Left := ScaleX(20);
Top := ScaleY(20);
Width := ScaleX(370);
Parent := WizardForm.SelectComponentsPage;
end;

with WizardForm.DirBrowseButton do
begin
Left := ScaleX(400);
Top := ScaleY(20);
Parent := WizardForm.SelectComponentsPage;
end;

with WizardForm.ComponentsList do
begin
Left := ScaleX(24);
Width := ScaleX(449);
Height := ScaleY(419);
end;

with WizardForm.CancelButton do
begin
Top := ScaleY(511);
end;

with WizardForm.NextButton do
begin
Top := ScaleY(511);
end;

with WizardForm.BackButton do
begin
Top := ScaleY(511);
end;

with WizardForm.ProgressGauge do
begin
Left := ScaleX(40);
Top := ScaleY(400);
end;

with WizardForm.FinishedPage do
begin
Color := clMenu;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = 1) or (PageID = 6) or (PageID = 8) or (PageID = 9) or (PageID = 10 )or (PageID = 11) then
Result:= True;
end;

procedure HideComponents;
begin
WizardForm.ComponentsDiskSpaceLabel.Hide;
WizardForm.TypesCombo.Hide;
WizardForm.SelectComponentsLabel.Hide;
WizardForm.MainPanel.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.WizardBitmapImage2.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
HideComponents;
if CurPageID = wpSelectComponents then
begin
If WizardForm.FindComponent('NextButton') is TButton
then
TButton(WizardForm.FindComponent('NextButton')).Caption:='Установить';
end
end;[/more]
Автор: 999Kay666
Дата сообщения: 27.01.2014 12:02
Nightmareterrible

Цитата:
InnnerNotebook.Height :=
(457). вот так получилось. спасибо.

vint56
спасибо. нашел полезное.
Автор: tryroom
Дата сообщения: 27.01.2014 13:11
vint56

Добавил исправление в скрипт, но с обычной установкой проблема не решилась.
Ещё и ошибка выскочила. http://rghost.ru/51964210

ошибка http://rghost.ru/51965634
Автор: boss911
Дата сообщения: 27.01.2014 14:07
Приветствую. Наткнулся вот на этот код, но абсолютно нет знаний, чтобы приспособить его к своей ситуации. Помогите, плиз.

Например, нужно закрепить на Панели задач и/или в Меню пуск "{app}\MyProg\MyApp", но при этом будут вопросы:

Код: [Tasks]
Name: PinToTaskBar; Description: {cm:PinToTaskBarIcon}; GroupDescription: {cm:AdditionalIcons}}; MinVersion: 0,6.0
Name: PinToSrartMenu; Description: {cm:PinToSrartMenuIcon}; GroupDescription: {cm:AdditionalIcons}; MinVersion: 0,6.0
Автор: vint56
Дата сообщения: 27.01.2014 15:11
<b>tryroom</b>
http://rghost.ru/51967236
Автор: tryroom
Дата сообщения: 27.01.2014 15:50
vint56
Спасибо большое, всё тип топ и на обеих версиях компилируется, что есть гуд.

http://rghost.ru/51968085
Автор: TNR
Дата сообщения: 28.01.2014 04:57
Подскажите код для поиска в файле строки и её замена
Автор: tryroom
Дата сообщения: 28.01.2014 06:22
vint56

Вопрос снят.
Автор: Sanch8
Дата сообщения: 28.01.2014 07:32
TNR
Вот пример
Автор: TNR
Дата сообщения: 28.01.2014 08:39
Sanch8
Спасибо !
Автор: TNR
Дата сообщения: 30.01.2014 09:11
Может кто подскажет как конвертнуть текст из unicode в ansi ?
Автор: Mailchik
Дата сообщения: 30.01.2014 20:44
boss911
[more=код...]
Код: #define ExeName "MyProg.exe" ;Exe файл который нужно закрепить

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Tasks]
Name: PinToTaskBar; Description: {cm:cTaskBarTxt}; MinVersion: 0,6.0;
Name: PinToSrartMenu; 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

rucStartMenuTxt=Закрепить в меню "Пуск"
rucTaskBarTxt=Закрепить на панели задач
rucTaskBarTxt2=Закрепить программу в панели задач
encStartMenuTxt=Pin to Start Menu
encTaskBarTxt=Pin to Taskbar

ruUNcStartMenuTxt=Изъять из меню "Пуск"
ruUNcTaskBarTxt=Открепить от панели задач
ruUNcTaskBarTxt2=Изъять программу из панели задач
enUNcStartMenuTxt=Unpin from Start Menu
enUNcTaskBarTxt=Unpin from Taskbar

[Code]
procedure Win7PinProg(inFilePath: string; inFileName: String; PinProgOn: integer; UnPIN: boolean);
var
oShell: variant;
objFolder: variant;
objFolderItem: variant;
colVerbs: variant;
VerbName, cStartMenuTxt, cTaskBarTxt, cTaskBarTxt2, sLang: string;
i : integer;
begin
oShell := CreateOleObject('Shell.Application');
objFolder := oShell.Namespace(inFilePath);
objFolderItem := objFolder.ParseName(inFileName);
colVerbs := objFolderItem.Verbs();
for i := 0 to colVerbs.Count() do
begin
VerbName := Lowercase(colVerbs.Item(i).Name);
StringChangeEx(VerbName, '&', '', True);
if GetUILanguage = $0419 then
sLang := 'ru' else sLang := 'en';
if UnPIN then begin
cStartMenuTxt := ExpandConstant('{cm:' + sLang + 'UNcStartMenuTxt}');
cTaskBarTxt := ExpandConstant('{cm:' + sLang + 'UNcTaskBarTxt}');
cTaskBarTxt2 := ExpandConstant('{cm:' + sLang + 'UNcTaskBarTxt2}');
end else begin
cStartMenuTxt := ExpandConstant('{cm:' + sLang + 'cStartMenuTxt}');
cTaskBarTxt := ExpandConstant('{cm:' + sLang + 'cTaskBarTxt}');
cTaskBarTxt2 := ExpandConstant('{cm:' + sLang + 'cTaskBarTxt2}');
end;

if (VerbName = cStartMenuTxt) and (PinProgOn = 1) then
colVerbs.Item(i).DoIt;
if ((VerbName = cTaskBarTxt) or (VerbName = cTaskBarTxt2)) and (PinProgOn = 2) then
colVerbs.Item(i).DoIt;
end;
end;

procedure CurPageChanged(CurPageID: integer);
begin
case CurPageID of
wpFinished: begin
if WizardForm.TasksList.Checked[0] then
Win7PinProg(WizardDirValue, '{#ExeName}', 2, false);
if WizardForm.TasksList.Checked[1] then
Win7PinProg(WizardDirValue, '{#ExeName}', 1, false);
end;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
instPath: string;
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppName")}_is1',
'InstallLocation', instPath) then begin
case CurUninstallStep of
usUninstall: begin
Win7PinProg(instPath, '{#ExeName}', 2, true);
Win7PinProg(instPath, '{#ExeName}', 1, true);
end;
end;
end;
end;
Автор: TNR
Дата сообщения: 31.01.2014 00:53
Mailchik
А как использую эту функцию загрузить файл и поменять в нём кодировку ?
Автор: boss911
Дата сообщения: 31.01.2014 01:32
Mailchik

Большое спасибо. Сори, а зачем вот [more=это]
Код: [CustomMessages]
ru.cTaskBarTxt=Закрепить на панели задач
ru.cStartMenuTxt=Закрепить в меню "Пуск"
en.cTaskBarTxt=Pin to Taskbar
en.cStartMenuTxt=Pin to Start Menu

rucStartMenuTxt=Закрепить в меню "Пуск"
rucTaskBarTxt=Закрепить на панели задач
rucTaskBarTxt2=Закрепить программу в панели задач
encStartMenuTxt=Pin to Start Menu
encTaskBarTxt=Pin to Taskbar

ruUNcStartMenuTxt=Изъять из меню "Пуск"
ruUNcTaskBarTxt=Открепить от панели задач
ruUNcTaskBarTxt2=Изъять программу из панели задач
enUNcStartMenuTxt=Unpin from Start Menu
enUNcTaskBarTxt=Unpin from Taskbar
Автор: Mailchik
Дата сообщения: 31.01.2014 07:19
boss911

Цитата:
Сори, а зачем вот это? Не совсем понимаю, чем отличается "Закрепить на панели задач" от "Закрепить программу в панели задач" и тоже самое с Открепить/Изъять. Если первый блок для задач, то последние два нужны для ОС?

Нажмите ПКМ на приложение, которое в данный момент не запущено, и нажмите на приложение которое запущено, и значок висит на панели задач, для них разные надписи закрепления.


Цитата:
Правильно ли я понял, что это дело зависит от локализации ОС, например, на украинской или белорусской ОС не сработает?

Правильно. Вы попросили исправить ваш найденный скрипт, я его и исправил.


Цитата:
Вот этот код точно от языка ОС не зависит (берется из shell32.dll), но там нет закрепления/открепления в Пуске.

Доработал этот код для "Пуска".
[more=код...]
Код: #define ExeName "MyProg.exe" ;Exe файл который нужно закрепить

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

[Tasks]
Name: PinToTaskBar; Description: {cm:cTaskBarTxt}; MinVersion: 0,6.0;
Name: PinToSrartMenu; 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 WizardForm.TasksList.Checked[0] then
PinToTaskbar(WizardDirValue + '\{#ExeName}', True, True);
if WizardForm.TasksList.Checked[1] then
PinToTaskbar(WizardDirValue + '\{#ExeName}', False, True);
end;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
instPath: string;
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppName")}_is1',
'InstallLocation', instPath) then begin
case CurUninstallStep of
usUninstall: begin
PinToTaskbar(instPath + '\{#ExeName}', True, False);
PinToTaskbar(instPath + '\{#ExeName}', False, False);
end;
end;
end;
end;
Автор: boss911
Дата сообщения: 31.01.2014 07:52
Mailchik

Цитата:
Нажмите ПКМ на приложение, которое в данный момент не запущено, и нажмите на приложение которое запущено, и значок висит на панели задач, для них разные надписи закрепления.

У меня под рукой только XP. Я вас понял. Спасибо.

Цитата:
Доработал этот код для "Пуска".

Челом бью.

А можно не "TasksList.Checked[0]", а имя задачи указывать, то есть через "IsTaskSelected('PinToTaskBar')"? Знаю, что можно, но, поскольку нет знаний, могу на какать в коде. Просто у меня в тасклисте будет задача, которая будет вылетать, в зависимости от ОС, посему порядок задач будет разный.

Строку с "if RegQueryStringValue" можно смело удалять, если у меня "CreateUninstallRegKey=false", только строку или еще что-то?
Автор: Mailchik
Дата сообщения: 31.01.2014 08:31

Цитата:
А можно не "TasksList.Checked[0]", а имя задачи указывать, то есть через "IsTaskSelected('PinToTaskBar')"? Знаю, что можно, но, поскольку нет знаний, могу на какать в коде. Просто у меня в тасклисте будет задача, которая будет вылетать, в зависимости от ОС, посему порядок задач будет разный.

Можно.

Цитата:
Строку с "if RegQueryStringValue" можно смело удалять, если у меня "CreateUninstallRegKey=false", только строку или еще что-то?

Тоже можно. С реестра брался путь папки, где находится этот самый Exe, который нужно открепить.
[more=код...]
Код: #define ExeName "MyProg.exe" ;Exe файл который нужно закрепить

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

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app};
[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(WizardDirValue + '\{#ExeName}', True, True);
if IsTaskSelected('PinToStartMenu') then
PinToTaskbar(WizardDirValue + '\{#ExeName}', False, True);
end;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
instPath: string;
begin
case CurUninstallStep of
usUninstall: begin
PinToTaskbar(ExtractFileDir(ExpandConstant('{uninstallexe}')) + '\{#ExeName}', True, False);
PinToTaskbar(ExtractFileDir(ExpandConstant('{uninstallexe}')) + '\{#ExeName}', False, False);
end;
end;
end;
Автор: boss911
Дата сообщения: 31.01.2014 09:13
Mailchik

Спасибо. И ще вопрос по:

Код: #define ExeName "MyProg.exe"

PinToTaskbar(WizardDirValue + '\{#ExeName}', True, True);

PinToTaskbar(ExtractFileDir(ExpandConstant('{uninstallexe}')) + '\{#ExeName}', True, False);
Автор: aibek1996
Дата сообщения: 31.01.2014 13:07
Доброго времени суток!
скиньте ссылку на справочник по параметрам LZMA
Автор: Edison007007
Дата сообщения: 31.01.2014 13:13
aibek1996
В справке к 7-zip всё есть
Автор: aibek1996
Дата сообщения: 01.02.2014 10:14
Там нету
Автор: MOD_TEC
Дата сообщения: 01.02.2014 11:33
Как сделать свернуть и закрыть через лейбл.Зарание спасибо...

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758

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


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