PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [43] 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126

Dodakaedr
02-08-2015, 22:24
vadjliss, Сделайте вот так и все поймете.

[Files]
Source: "ваша папка портабл\*"; DestDir: "{app}"; Check: "not IsChecked"; Flags: ignoreversion createallsubdirs recursesubdirs
Source: "ваша папка не портабл\*"; DestDir: "{app}"; Check: "IsChecked"; Flags: ignoreversion createallsubdirs recursesubdirs

И как понять?
короче надо что бы portable не трогала папку инстолятора »
что за папка инсталлятора?

vadjliss
03-08-2015, 05:58
спасибо всё как надо

vadjliss
03-08-2015, 07:57
да и ещё не могу понять как поменять иконки на свой
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=.
Uninstallable=IsChecked
CreateUninstallRegKey=IsChecked

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

[Tasks]
; Дополнительно
; Ярлык(и) на «Рабочем столе»
Name: "desktopicon"; Description: "Ярлык(и) на «Рабочем столе»"; GroupDescription: "Дополнительно:"; Check: IsChecked
; Ярлыки в меню «Пуск»
Name: "starticon"; Description: "Ярлыки в меню «Пуск»"; GroupDescription: "Дополнительно:"; Check: IsChecked

[Icons]
Name: "{group}\My Program"; Filename: "{uninstallexe}"; Tasks: starticon; Check: not IsChecked
Name: "{commondesktop}\My Program"; Filename: "{uninstallexe}"; Tasks: desktopicon; Check: IsChecked

[Files]
; Файлы для проверки и демонстрации. При реальном использовании - закомментировать или удалить!
Source: {win}\Help\*; DestDir: {app}; Flags: external recursesubdirs

[CustomMessages]
HeaderLabelPage=Выбор типа установки
LabelPage=Выберите нужный тип установки
MyRadioCaption_1=Распаковка
MyRadioCaption_2=Обычная установка
PageTextHeader=На этой странице Вы можете выбрать тип установки, который для Вас наиболее удобен.
MyText_1=Будет произведена распаковка в паку,%nуказанную на следующей странице
MyText_2=Будет произведена стандартная установка
Extracted=Распаковка — %1
ExtractedFolder=Выбор папки распаковки
ExtractedFolder2=В какую папку вы хотите распаковать %1?
ExtractedFolder3=Программа распакует %1 в следующую папку.
ExtractedFolder4=Программа установит %1 в следующую папку.
Installing=Распаковка...
InstallingLabel=Пожалуйста, подождите, пока %1 распакуется на ваш компьютер.
FinishedHeadingLabel=Завершение распаковки%n%1
FinishedLabelNoIcons=Программа %1 распакована на Ваш компьютер.%n%nНажмите «Завершить», чтобы выйти из программы распаковки.

[UninstallDelete]
Type: filesandordirs; Name: {app}

[code]
const
DI_NORMAL = 3;

var
MyNewPage: TWizardPage;
Rect: TRect;
HIcon: LongInt;
AIconFileName: String;
MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;

function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: AnsiString; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;external 'DrawIconEx@user32.dll stdcall';
function DestroyIcon(hIcon: LongInt): LongInt; external 'DestroyIcon@user32.dll stdcall';

function IsChecked: Boolean;
begin
Result:= MyRadioBtn_2.checked;
end;

procedure RadBtnOnClick(Sender: TObject);
begin
case Sender of
MyRadioBtn_1: begin
WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
MyRadioBtn_2: begin
WizardForm.Caption:= FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder4}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
end;
end;

procedure GetInstTypePage();
begin
MyNewPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:HeaderLabelPage}'), ExpandConstant('{cm:LabelPage}'));

try
// в конкретном примере из этого файла (C:\Windows\System32\shell32.dll) берём иконки, для пробного показа.
// Можно использовать обычные .ico
AIconFileName:= ExpandConstant('{sys}\shell32.dll');
//

Rect.Left:= 0;
Rect.Top:= 0;
Rect.Right:= 32;
Rect.Bottom:= 32;

hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 26);
try
with TBitmapImage.Create(WizardForm) do begin
Left:= ScaleX(15);
Top:= ScaleY(68);
Width:= 32;
Height:= 32;
with Bitmap do begin
Width:= 32;
Height:= 32;
Canvas.Brush.Color:= clBtnFace;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
end;
Parent:= MyNewPage.Surface;
end;
finally
DestroyIcon(hIcon);
end;

hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 19);
try
with TBitmapImage.Create(WizardForm) do begin
Left:= ScaleX(15);
Top:= ScaleY(138);
Width:= 32;
Height:= 32;
with Bitmap do begin
Width:= 32;
Height:= 32;
Canvas.Brush.Color:= clBtnFace;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
end;
Parent:= MyNewPage.Surface;
end;
finally
DestroyIcon(hIcon);
end;
except
end;

with TNewStaticText.Create(WizardForm) do begin
Width:= WizardForm.InnerNotebook.Width;
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:PageTextHeader}');
Parent:= MyNewPage.Surface;
end;

MyRadioBtn_1:= TNewRadioButton.Create(WizardForm);
with MyRadioBtn_1 do begin
Top:= ScaleY(50);
Width:= ScaleX(150);
Caption:= ExpandConstant('{cm:MyRadioCaption_1}');
OnClick:= @RadBtnOnClick;
Parent:= MyNewPage.Surface;
end;

with TNewStaticText.Create(WizardForm) do begin
Left:= ScaleX(60);
Top:= ScaleY(68);
Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:MyText_1}');
Parent:= MyNewPage.Surface;
end;

MyRadioBtn_2:= TNewRadioButton.Create(WizardForm);
with MyRadioBtn_2 do begin
Top:= ScaleY(120);
Width:= ScaleX(150);
Caption:= ExpandConstant('{cm:MyRadioCaption_2}');
Checked:= True;
OnClick:= @RadBtnOnClick;
Parent:= MyNewPage.Surface;
end;

with TNewStaticText.Create(WizardForm) do begin
Left:= ScaleX(60);
Top:= ScaleY(138);
Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:MyText_2}');
Parent:= MyNewPage.Surface;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID > wpSelectDir) and (PageID < wpInstalling) and (MyRadioBtn_1.Checked) then
Result:= True;
end;

procedure InitializeWizard();
begin
GetInstTypePage();
WizardForm.DiskSpaceLabel.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if not IsChecked then begin
case CurPageID of
wpSelectDir: begin
WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:ExtractedFolder}');
WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder2}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
if IsChecked then
WizardForm.DirEdit.Text := ExpandConstant( '{pf}\{#SetupSetting("AppName")}' ) else
WizardForm.DirEdit.Text := ExpandConstant( '{src}\{#SetupSetting("AppName")}' );
end;
wpInstalling: begin
WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:Installing}');
WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:InstallingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
wpFinished: begin
WizardForm.FinishedHeadingLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedHeadingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.FinishedLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedLabelNoIcons}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
end;
end;
end;

TryRooM
03-08-2015, 11:44
vadjliss, Пробуйте
http://rghost.ru/7VmP5Z6Yk

us_ov
05-08-2015, 14:18
пожалуйста подскажите как реализовать на странице выбора папки - выбор дисков
имеется в виду чтобы выбор был ТОЛЬКО корень дисков доступных в системе

habib2302
05-08-2015, 15:38
Доброе время суток. Возможно ли задать кодировку создаваемого ini файла например на utf-8

Nordek
05-08-2015, 18:23
как исправить инсталятор создаётся не там где надо »В [Setup]:
OutputDir=Папка инсталлятора
если хотите рядом со скриптом, то:
OutputDir=.

vadjliss
05-08-2015, 18:45
извиняюсь я не правильно выразился
при распаковки создаётся 2 исполняемых файла один надо убрать как это можно сделать
вот скрин
http://piccash.net/allimage/2015/8-5/img_thumb/463111-thumb.png (http://piccash.net/27967/463111/)
#define MyAppName "My Program"
#define MyAppVersion "1.2.8"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "Amakrits.vsf"

[Setup]
AppId={{A5209214-FFB5-45F0-A529-5BA87A16C566}
AppName={#MyAppName}
AppVersion=1.2.8
AppVerName=1.2.8
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=C:\Users\Dilan\Desktop\Output
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
UninstallFilesDir={app}\Новая папка\Новая папка

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Users\Dilan\Desktop\Output\Новая папка (2)\Новая папка\Новая папка\BlurayConverterUltimate.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\Dilan\Desktop\Output\Новая папка (2)\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: "{group}\My Program"; Filename: "{app}\Новая папка\Новая папка\BlurayConverterUltimate.exe"
Name: "{commondesktop}\My Program"; Filename: "{app}\Новая папка\Новая папка\BlurayConverterUltimate.exe"; Tasks: desktopicon

Nordek
05-08-2015, 20:21
Здесь:
[Files]
Source: C:\Users\Dilan\Desktop\Output\Новая папка (2)\Новая папка\Новая папка\BlurayConverterUltimate.exe; DestDir: {app}; Flags: ignoreversion
Source: C:\Users\Dilan\Desktop\Output\Новая папка (2)\*; DestDir: """{app}"

удалите это:
Source: C:\Users\Dilan\Desktop\Output\Новая папка (2)\Новая папка\Новая папка\BlurayConverterUltimate.exe; DestDir: {app}; Flags: ignoreversion

vadjliss
05-08-2015, 20:29
спасибо Nordek
а, я голову сломал

Nordek
05-08-2015, 20:39
vadjliss, Зачем удаляете сообщения? На заметку: Такое действие считается дурным тоном.

Если при вопросе получилось описать не совсем то что имели ввиду, то: могли предыдущее сообщение оставить как есть, а следующим сообщением уточнить.

vadjliss
06-08-2015, 06:24
ещё один вопрос
вот скрин
http://piccash.net/allimage/2015/8-6/img_thumb/463452-thumb.png (http://piccash.net/27967/463452/)

Nordek
06-08-2015, 07:29
vadjliss, В [Setup] добавьте VersionInfoDescription.
Пример:
VersionInfoDescription=Описание

vadjliss
06-08-2015, 07:50
спасибо как всегда оперативно Nordek

нашёл вот этот скрипт

#define MainExe "{app}\Bin32\crysis.exe"
#define MainExe64 "{app}\Bin64\crysis.exe"
#define MainExeDir Copy(MainExe, 1, RPos("\", MainExe)-1)
#define MainExe64Dir Copy(MainExe64, 1, RPos("\", MainExe64)-1)

[Icons]
Name: "{group}\{#AppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Check: IsWin64
Name: "{group}\{#AppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Check: not IsWin64
Name: "{userdesktop}\{#AppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Tasks: desktopicon; Check: IsWin64
Name: "{userdesktop}\{#AppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Tasks: desktopicon; Check: not IsWin64
Name: "{group}\Удалить программу"; FileName: "{uninstallexe}"; IconFileName: "{sys}\shell32.dll"; IconIndex: 32
я так понял это чтобы устанавливалось на x32_x64
как его правильно вмонтировать сюда

#define MyAppName "My Program"
#define MyAppVersion "1.2.8"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "BlurayConverterUltimate.exe"

[Setup]
AppId={{A5209214-FFB5-45F0-A529-5BA87A16C566}
AppName={#MyAppName}
AppVersion=1.2.8
AppVerName=1.2.8
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=C:\Users\Dilan\Desktop\Output
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
VersionInfoDescription=BlurayConverterUltimate
;UninstallFilesDir={app}\Новая папка\Новая папка

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
;Source: "C:\Users\Dilan\Desktop\Output\Новая папка (2)\Новая папка\Новая папка\BlurayConverterUltimate.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\Dilan\Desktop\Output\Новая папка (2)\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: "{group}\My Program"; Filename: "{app}\Новая папка\Новая папка\BlurayConverterUltimate.exe"
Name: "{commondesktop}\My Program"; Filename: "{app}\Новая папка\Новая папка\BlurayConverterUltimate.exe"; Tasks: desktopicon

и как полностью удалить group

Nordek
06-08-2015, 10:43
vadjliss, Пример: #define MyAppName "My Program"
#define MyAppVersion "1.2.8"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "{app}\Blu-ray Converter Ultimate\BlurayConverterUltimate.exe"
#define MyAppExeName64 "{app}\Blu-ray Converter Ultimate\BlurayConverterUltimate.exe"
#define MyAppExeNameDir Copy(MyAppExeName, 1, RPos("\", MyAppExeName)-1)
#define MyAppExeName64Dir Copy(MyAppExeName64, 1, RPos("\", MyAppExeName64)-1)

[Setup]
AppId={{A5209214-FFB5-45F0-A529-5BA87A16C566}
AppName={#MyAppName}
AppVersion=1.2.8
AppVerName=1.2.8
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=C:\Users\Dilan\Desktop\Output
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
VersionInfoDescription=BlurayConverterUltimate
;UninstallFilesDir={app}\Новая папка\Новая папка

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: C:\Users\Dilan\Desktop\Output\BlurayConverterUltimate32.exe; DestDir: {app}\Blu-ray Converter Ultimate; DestName: BlurayConverterUltimate.exe; Flags: ignoreversion; Check: not IsWin64
Source: C:\Users\Dilan\Desktop\Output\BlurayConverterUltimate64.exe; DestDir: {app}\Blu-ray Converter Ultimate; DestName: BlurayConverterUltimate.exe; Flags: ignoreversion; Check: IsWin64
Source: C:\Users\Dilan\Desktop\Output\Новая папка (2)\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: {group}\{#MyAppName}; FileName: {#MyAppExeName}; WorkingDir: {#MyAppExeNameDir}; Check: not IsWin64
Name: {group}\{#MyAppName}; FileName: {#MyAppExeName64}; WorkingDir: {#MyAppExeName64Dir}; Check: IsWin64
Name: {userdesktop}\{#MyAppName}; FileName: {#MyAppExeName}; WorkingDir: {#MyAppExeNameDir}; Tasks: desktopicon; Check: not IsWin64
Name: {userdesktop}\{#MyAppName}; FileName: {#MyAppExeName64}; WorkingDir: {#MyAppExeName64Dir}; Tasks: desktopicon; Check: IsWin64
Name: {group}\Удалить программу; FileName: {uninstallexe}; IconFileName: {sys}\shell32.dll; IconIndex: 32

us_ov
06-08-2015, 16:31
неужели никто не знает как реализовать на странице выбора папки - выбор дисков
имеется в виду чтобы выбор был ТОЛЬКО корень дисков доступных в системе »
скрипт для инсталлятора готов скомпилирован и работает, но на странице выбора места инсталляции есть возможность установить приложение в произвольные папки
а хотелось бы устанавливать приложение только в корень любого диска (включая съёмные носители)
на форуме и не только на этом нашёл много полезного, но не то что нужно,а вот квалификации написать скрипт самому не хватает
требуется квалифицированная помощь :help:

Nordek
06-08-2015, 16:57
пожалуйста подскажите как реализовать на странице выбора папки - выбор дисков »
#1311 (http://forum.oszone.net/post-2025278-1311.html)

vadjliss
07-08-2015, 07:23
если такой
http://piccash.net/allimage/2015/8-7/img_thumb/463880-thumb.png (http://piccash.net/27967/463880/)

var
DirTreeView: TFolderTreeView;

procedure DirFolderChange(Sender: TObject);
Begin
WizardForm.DirEdit.Text:=AddBackslash(DirTreeView.Directory) + 'MyProg'
end;

Procedure InitializeWizard1;
begin
DirTreeView:= TFolderTreeView.Create(WizardForm)
DirTreeView.SetBounds(0,100,417,110)
DirTreeView.OnChange:= @DirFolderChange
DirTreeView.Parent:= WizardForm.SelectDirPage
// DirTreeView.ChangeDirectory(ExpandConstant('{pf}'), True)
end;

procedure InitializeWizard();
begin
InitializeWizard1;
end;

us_ov
07-08-2015, 07:53
Nordek, vadjliss, спасибо - буду пробовать

us_ov
07-08-2015, 13:24
vadjliss, нет это не то, мне необходимо без возможности выбора папок

Nordek, в примерах по ссылкам ошибки компиляции, но зато я знаю чего искать в файлах примеров




© OSzone.net 2001-2012