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

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

Автор: Habib2302
Дата сообщения: 12.12.2013 18:06
доброе время суток. дело в том, что последний код который давал Tapas77789 и он работает, но когда стоит компонент CDI\instal я не могу убрать галочки с компонентов для создания ярлыков.
[more=скрипт]; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "CrystalDiskInfo"
#define MyAppVersion "6.0.4"
#define MyAppPublisher "Copyright © 2008-2013 hiyohiyo. All rights reserved."
#define MyAppURL "http://crystalmark.info/"
#define MyAppExeName "DiskInfo.exe"
#include "WinTB.iss"
#include "botva2.iss"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\CrystalDiskInfo
DefaultGroupName=CrystalDiskInfo
AllowNoIcons=true
OutputBaseFilename={#MyAppName} {#MyAppVersion} RePack (& Portable) by Xabib
SetupIconFile=ico.ico
Compression=lzma/Ultra64
SolidCompression=true
InternalCompressLevel=Ultra64
DiskSpanning=false
DiskSliceSize=736000000
ShowLanguageDialog=yes
SlicesPerDisk=4
UninstallDisplayIcon={app}\ico.ico
;Производитель.
AppPublisher={#MyAppPublisher}
RawDataResource=Botva:botva2.dll|b2p:b2p.dll|Logo:logo.png|bPic:bPic.png|LiPic:LiPic.png|aPic:aPic.png
AppModifyPath={app}
VersionInfoProductName={#MyAppName}
DirExistsWarning=no
AppendDefaultDirName=false
AppendDefaultGroupName=false
DisableReadyPage=true
AppID=CrystalDiskInfo
VersionInfoDescription={#MyAppName} RePack by Xabib
AppCopyright=Xabib © 2013
VersionInfoVersion={#MyAppVersion}
VersionInfoProductVersion={#MyAppVersion}
VersionInfoCopyright=Xabib © 2013
DisableFinishedPage=false
UninstallDisplayName={#MyAppName}
ComponentsListTVStyle=true
ShowComponentSizes=false
Uninstallable=not IsComponentSelected('CDI\Portable')

[Languages]
Name: "Russian"; MessagesFile: "Russian.isl"

[CustomMessages]
Russian.Msg1=Перед установкой необходимо удалить предыдущую версию приложения. Продолжить?
Russian.MsgErorr=Удаление завершилось неудачей!

[Types]
Name: full; Description: Полная установка; Flags: iscustom

[Components]
Name: CDI; Description: {#MyAppName}; Flags: fixed; Types: full;
Name: CDI\instal; Description: Установить {#MyAppName}; Flags: exclusive
Name: CDI\Portable; Description: Распаковать {#MyAppName}; Flags: exclusive
Name: icons; Description: {cm:AdditionalIcons}; Types: full;
Name: icons\desktop; Description: {cm:CreateDesktopIcon}; Types: full;
Name: icons\quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; OnlyBelowVersion: 0,6.1; Types: full;
Name: icons\quicklaunchicon7; Description: {cm:CreateQuickLaunchIcon}; MinVersion: 0,6.1; Types: full;
Name: InterfaceLang; Description: {cm:InterfaceLang}; Flags: fixed; Types: full;
Name: InterfaceLang\ru; Description: Русский; Flags: exclusive;
Name: InterfaceLang\en; Description: Английский; Flags: exclusive;
Name: InterfaceLang\ua; Description: Украинский; Flags: exclusive;

[Files]
;Файлы распаковываемые в папку с игрой. Необходимы для деинсталлятора;
Source: WinTB.dll; Flags: dontcopy;
Source: ico.ico; DestDir: {app}; Flags: ignoreversion
Source: PinToTasckbar.vbs; DestDir: {tmp}; Flags: deleteafterinstall; Components: CDI\instal;
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов
Source: {app}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Components: "CDI\instal CDI\Portable";

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Components: CDI\instal;
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}; Components: CDI\instal;
Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}; Components: CDI\instal;
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Components: CDI\instal;
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: {app}\{#MyAppExeName}; Components: CDI\instal;

[Run]
Filename: {app}\{#MyAppExeName}; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait skipifsilent PostInstall;
Filename: {tmp}\PinToTasckbar.vbs; Parameters: """{app}\{#MyAppExeName}"""; Flags: shellexec; Components: CDI\instal;

[Code]
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif

const
///////////////////////////////////Относится к лого и изображениям мастера
RT_RCDATA = 10;

function UninstallMyApp(): Boolean;
var
Buff: String;
i: Integer;
begin
Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', Buff );
if not Result then Result := not FileExists(RemoveQuotes(Buff));
if not Result then if MsgBox(CustomMessage('Msg1'), mbError, MB_YESNO) = IDYES then
try
Exec(RemoveQuotes(Buff), '', ExtractFilePath(RemoveQuotes(Buff)), SW_SHOW, ewWaitUntilTerminated, i);
finally
Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', Buff );
if not Result then MsgBox(CustomMessage('MsgErorr'), mbError, MB_OK);
end;
end;

var
///////////////////////////////////Лого и изображения
lPLogo, bPicHandle, bPicHandle2, lPicHandle: THandle;
BtnImage: TBitmapImage;
///////////////////////////////////////////
CheckLicense: TCheckBox;
iInitialize: Boolean;
TDV: TFolderTreeView;
TFV: TStartMenuFolderTreeView;

///////////////////////////////////Ресурсы(относится к лого и изображениям мастера)
function GetFromRes(const ResName, SaveFileName: String): Boolean;
var
lResStream: TResourceStream;
begin
lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
try
lResStream.SaveToFile(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
finally
lResStream.Free;
Result := FileExists(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
end;
end;

procedure TDVOnChange(Sender: TObject);
begin
if IsComponentSelected('CDI\instal') then
WizardForm.DirEdit.Text:= AddBackslash(TDV.Directory)+'{#MyAppName}';
if IsComponentSelected('CDI\Portable') then
WizardForm.DirEdit.Text:= AddBackslash(TDV.Directory)+'{#MyAppName} Portable';

end;
////////////////////////////////

///////////////////////////////////Дерево выбора папки программ
procedure TFVOnChange(Sender: TObject);
begin
if IsComponentSelected('CDI\instal') then
WizardForm.GroupEdit.Text:= AddBackslash(TFV.Directory)+'{#MyAppName}';
if IsComponentSelected('CDI\Portable') then
WizardForm.GroupEdit.Text:= AddBackslash(TFV.Directory)+'{#MyAppName} Portable';
end;

function OnShouldSkipPage(Sender: TWizardPage): Boolean;
begin
if WizardForm.ComponentsList.Items.Count > 0 then WizardForm.Tag:= 1; // отображаются страницы выбора папки и компонентов
end;

function InitializeSetup:boolean;

begin
Result := UninstallMyApp();
end;

procedure CompNotEnabled(const CompName, InString: String);
var i:integer;
begin
with WizardForm.ComponentsList do
begin
for i:=1 to Items.Count-1 do
begin
if ItemCaption[i]=InString then break;
end;
Checked[i]:=not IsComponentSelected(CompName);
ItemEnabled[i]:=not IsComponentSelected(CompName);
end;
end;

procedure CompOnCheckClick(Sender: TObject);
begin
CompNotEnabled(ExpandConstant('CDI\Portable'),ExpandConstant('{cm:AdditionalIcons}'));
CompNotEnabled(ExpandConstant('CDI\Portable'),ExpandConstant('{cm:CreateDesktopIcon}'));
CompNotEnabled(ExpandConstant('CDI\Portable'),ExpandConstant('{cm:CreateQuickLaunchIcon}'));
end;

procedure InitializeWizard;
begin
WizardForm.ComponentsList.OnClickCheck:=@CompOnCheckClick;
PageFromID(wpSelectDir).OnShouldSkipPage:= @OnShouldSkipPage
with WizardForm do
begin

///////////////////////////////////Логотип и изображения мастера
iInitialize := True;
if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_BPIC', 'bPic.png') and GetFromRes('_IS_LIPIC', 'LiPic.png') and GetFromRes('_IS_APIC', 'aPic.png') then
begin
///////////////////////////////////Изображения
bPicHandle := ImgLoad(WelcomePage.Handle, ExpandConstant('{tmp}\aPic.png'), WizardBitmapImage.Left, WizardBitmapImage.Top, WizardBitmapImage.Width, WizardBitmapImage.Height, True, True);
WizardBitmapImage.Hide;
ImgSetVisibility(bPicHandle, True);
ImgApplyChanges(WelcomePage.Handle);

bPicHandle := ImgLoad(FinishedPage.Handle, ExpandConstant('{tmp}\bPic.png'), WizardBitmapImage2.Left, WizardBitmapImage2.Top, WizardBitmapImage2.Width, WizardBitmapImage2.Height, True, True);
WizardBitmapImage2.Hide;
ImgSetVisibility(bPicHandle, True);
ImgApplyChanges(FinishedPage.Handle);

lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
WizardSmallBitmapImage.Hide;
ImgSetVisibility(lPicHandle, True);
ImgApplyChanges(MainPanel.Handle);
////////////////////////////////////////////

///////////////////////////////////Логотип

lPLogo:= ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40), True, True);
ImgApplyChanges(WizardForm.Handle);
end;

///////////////////////////////////WinTB
ExtractTemporaryFile('WinTB.dll');
SetTaskBarProgressValue(0, 60);
SetTaskBarProgressState(0, TBPF_ERROR);
TaskBarV10(MainForm.Handle, WizardForm.Handle, false, false, 0, 0, _m_);
//////////////////////////////////////
TDV:= TFolderTreeView.Create(WizardForm);
TDV.Top:= WizardForm.DirEdit.Top+28;
TDV.Width:= 417;
TDV.Height:= 100;
TDV.OnChange:= @TDVOnChange;
TDV.Parent:= WizardForm.SelectDirPage;

TFV:= TStartMenuFolderTreeView.Create(nil);
TFV.Top:= WizardForm.GroupEdit.Top+28;
TFV.Width:= 417;
TFV.Height:= 100;
TFV.SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{userstartup}'),ExpandConstant('{commonstartup}'));
TFV.OnChange:= @TFVOnChange;
TFV.Parent:= WizardForm.SelectProgramGroupPage;

with TLabel.Create(WizardForm) do
begin
Parent:=WizardForm;
AutoSize:=False;
Transparent:= true;
SetBounds(ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40));
end;
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
Case CurPageID of
wpSelectProgramGroup:
begin
WizardForm.NoIconsCheck.Checked:=IsComponentSelected('CDI\Portable');
WizardForm.NoIconsCheck.Enabled:=not IsComponentSelected('CDI\Portable');
WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
end;
wpSelectDir: if WizardForm.Tag = 1 then
begin
WizardForm.SelectDirPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage;
WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectComponents);
WizardForm.Hint:= WizardForm.PageDescriptionLabel.Caption; // запомнить SetupMessage(msgSelectDirDesc)
WizardForm.PageDescriptionLabel.Caption:= SetupMessage(msgSelectComponentsDesc);
end;
wpSelectComponents: if WizardForm.Tag = 1 then
begin
WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectDirPage;
WizardForm.DiskSpaceLabel.Caption:= WizardForm.ComponentsDiskSpaceLabel.Caption;
WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectDir);
WizardForm.PageDescriptionLabel.Caption:= WizardForm.Hint; // иначе вместо названия программы [name]
if IsComponentSelected('CDI\Portable') then
begin
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppName} Portable'
WizardForm.GroupEdit.Text := (ExpandConstant('{#SetupSetting("DefaultGroupName")} Portable'))
end
end;
end;
end;

procedure DeinitializeSetup();
begin
if iInitialize then
begin
gdipShutdown;
TaskBarDestroy;
end;
end;

procedure InitializeUninstallProgressForm;
begin
with UninstallProgressForm do
begin
///////////////////////////////////Логотип и изображения мастера
if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_LIPIC', 'LIPic.png') then
begin
///////////////////////////////////Изображения
lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
WizardSmallBitmapImage.Hide;
ImgSetVisibility(lPicHandle, True);
ImgApplyChanges(MainPanel.Handle);

///////////////////////////////////Логотип
lPLogo:= ImgLoad(UninstallProgressForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40), True, True);
ImgApplyChanges(UninstallProgressForm.Handle);
end;

with TLabel.Create(nil) do
begin
Parent:=UninstallProgressForm;
AutoSize:=False;
Transparent:= true;
SetBounds(ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40));
end;
end;
end;

procedure DeinitializeUninstall();
begin
gdipShutdown;
end;


[Ini]
filename: {app}\DiskInfo.ini; Section: Setting; Key: Language; String: Russian; Components: InterfaceLang\ru;
filename: {app}\DiskInfo.ini; Section: Setting; Key: Language; string: English; Components: InterfaceLang\en;
filename: {app}\DiskInfo.ini; Section: Setting; Key: Language; string: Ukrainian; Components: InterfaceLang\ua;
[/more]
тест инсталлятор
Автор: tyumenik
Дата сообщения: 13.12.2013 22:48
Привет, всем! Нужен скрипт только на странице SelectComponentsPage!!!
Обнаружен HKEY_CURRENT_USER\Software\WinRAR, то выбрана галочка,
а не обнаружена, то невыбрана галочка... Заранее спасибо!!!
Автор: XPerformer
Дата сообщения: 14.12.2013 10:04
VCL Styles for Inno Setup
http://theroadtodelphi.wordpress.com/2013/12/11/vcl-styles-for-inno-setup/
Автор: log1stable
Дата сообщения: 14.12.2013 10:27
tyumenik, прочитай про RegKeyExists (или как-то так) в файле помощи.
Автор: VicF1
Дата сообщения: 14.12.2013 15:29
А как дела с определением версии DirectX?
Никто так и не реализовал?
ЗЫ Была ссылка на DXTest, но файл удален... может кто сохранил?
СПС
Автор: sjwrec
Дата сообщения: 14.12.2013 21:06
VicF1

Цитата:
определением версии DirectX


О моём DXTest.dll идёт речь?
Если да то вот: Скачать

Автор: tyumenik
Дата сообщения: 15.12.2013 10:22
log1stable, как мне найти этот RegKeyExists?
Автор: sjwrec
Дата сообщения: 15.12.2013 11:55
tyumenik

Цитата:
как мне найти этот RegKeyExists?


1. Скачайте из шапки форума Русская справка к версии 5.5.3 Chm-версия
2. Закиньте в папку с компилятором.
3. Запустите компилятор.
4. Нажмите клавишу F1 и ищите/читайте
Автор: Highpass
Дата сообщения: 15.12.2013 15:57
Anti F-Done v0.0.1
Небольшая утилита для защиты инсталляторов, написанных с помощью Inno Setup +
ISDone, от программы F-Done. Если кто не в курсе, то F-Done позволяет автоматом
извлекать пароли для arc архивов, так что теперь любой придурок может
посмотреть вашу строку сжатия и вообще прицепить ваш архив к своему инсталлу.
Скажу сразу что Anti F-Done весьма прост в своём алгоритме, так что никаких
гарантий. Используйте на свой страх и риск.

Файл anti_fdone.exe надо запускать из папки с вашим Inno Setup \ ResTools.
Выбрать скрипт установки, указать требуемый компилятор и нажать Compile.

http://yadi.sk/d/u3Y-JAivELxZV
Автор: R3Pa4eK
Дата сообщения: 15.12.2013 19:11
Highpass
Банальное переименование длл.. хоть бы что нибудь поинтереснее придумал, переименование импорта, например.
Автор: Edison007007
Дата сообщения: 15.12.2013 19:23
Ну. вообще есть куда более сложное решение, что бы в архивах не ковырялись, так-то)
Автор: tyumenik
Дата сообщения: 15.12.2013 20:10
Как сделать TypesCombo на станице SelectDirPage?
Автор: Highpass
Дата сообщения: 15.12.2013 20:13
R3Pa4eK

Цитата:
Банальное переименование длл.. хоть бы что нибудь поинтереснее придумал, переименование импорта, например.

Была идея с рандомным именем вызываемой функции и его подменой, но что-то у меня пока не вышло.
Как и писалось, алгоритм простой и реализован костылями на движке инсталлятора. Я не программер и не использую Inno, и сделал данную приблуду чисто ради интереса.
А что касается "поинтереснее придумал", то я могу тоже самое предъявить тебе: чтож ты не придумал ничего поинтереснее, чем отслеживание конкретного имени dll-ки
Автор: R3Pa4eK
Дата сообщения: 15.12.2013 20:22

Цитата:
чтож ты не придумал ничего поинтереснее, чем отслеживание конкретного имени dll-ки

Ну у меня ставятся хуки, а значит нужно знать имя длл. Конечно можно, как-то, искать сигнатурно пароль, но мне лень еще что либо писать.
Автор: Habib2302
Дата сообщения: 16.12.2013 18:49
кто-нибудь ответьте пожалуйста на мой вопрос
Автор: log1stable
Дата сообщения: 16.12.2013 23:09
Habib2302, я вообще в скрипте не видел этого компонента, когда читал вопрос.
Автор: Habib2302
Дата сообщения: 16.12.2013 23:21
log1stable
я имел в виду CDI\instal
instal - установка
Portable - распаковка
Автор: Genri
Дата сообщения: 17.12.2013 16:58
VicF1

Цитата:
как дела с определением версии DirectX?
-- не знаю что именно подразумевается под DXTest, но определить версию можно по ключу в реестре:
RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\DirectX', 'Version', sVersion );
[more=Пример использования]
Код: [no]
;This script at startup of setup check DirectX version,
;if version is not 4.08 warn user, and if user doesn't want to procede
;suggest to upgrade DirectX from Microsoft website http://www.microsoft.com/directx.

;DirectX version is stored in registry as 4.majorversion.minorversion
;DirectX 8.0 is 4.8.0
;DirectX 8.1 is 4.8.1
;DirectX 9.0 is 4.9.0

;Based on code provided by Mike C., NVRefreshTool

[Setup]
AppName=DirectX
AppVerName=DirectX
DefaultDirName={pf}\DirectX
DisableStartupPrompt=true
Uninstallable=false
DisableDirPage=true
OutputBaseFilename=DirectX
CreateAppDir=false
DisableProgramGroupPage=true

[Code]

procedure DecodeVersion( verstr: String; var verint: array of Integer );
var
i,p: Integer; s: string;
begin
// initialize array
verint := [0,0,0,0];
i := 0;
while ( (Length(verstr) > 0) and (i < 4) ) do
begin
    p := pos('.', verstr);
    if p > 0 then
    begin
if p = 1 then s:= '0' else s:= Copy( verstr, 1, p - 1 );
     verint[i] := StrToInt(s);
     i := i + 1;
     verstr := Copy( verstr, p+1, Length(verstr));
    end
    else
    begin
     verint[i] := StrToInt( verstr );
     verstr := '';
    end;
end;

end;

// This function compares version string
// return -1 if ver1 < ver2
// return 0 if ver1 = ver2
// return 1 if ver1 > ver2
function CompareVersion( ver1, ver2: String ) : Integer;
var
verint1, verint2: array of Integer;
i: integer;
begin

SetArrayLength( verint1, 4 );
DecodeVersion( ver1, verint1 );

SetArrayLength( verint2, 4 );
DecodeVersion( ver2, verint2 );

Result := 0; i := 0;
while ( (Result = 0) and ( i < 4 ) ) do
begin
    if verint1[i] > verint2[i] then
     Result := 1
    else
if verint1[i] < verint2[i] then
     Result := -1
     else
     Result := 0;

    i := i + 1;
end;

end;

// DirectX version is stored in registry as 4.majorversion.minorversion
// DirectX 8.0 is 4.8.0
// DirectX 8.1 is 4.8.1
// DirectX 9.0 is 4.9.0

function GetDirectXVersion(): String;
var
sVersion: String;
begin
sVersion := '';

RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\DirectX', 'Version', sVersion );

Result := sVersion;
end;


function InitializeSetup(): Boolean;
begin
// in this case program needs at least directx 8.0
if CompareVersion( GetDirectXVersion(), '4.8.0') < 0 then
begin
Result := MsgBox('DirectX 8 not found. The 3d test will not run and games may not perform optimally. Do you wish to continue?',
mbConfirmation, MB_YESNO) = idYes;
if Result = False then
MsgBox('Please upgrade your DirectX Version at http://www.microsoft.com/directx', mbInformation, MB_OK);
end
else
Result := true;
end;

[/no]
Автор: sjwrec
Дата сообщения: 17.12.2013 18:13
Genri
Ага и написать в реестре DX 14 тоже можно
А потом ещё всем хвастаться что у Вас DirectX 14 в системе установлен
Так что это не вариант.

Простите, не удержался, но правда не вариант.
Автор: Genri
Дата сообщения: 17.12.2013 21:24
sjwrec

Цитата:
написать в реестре DX 14 тоже можно
-- ну да. Можно. Но во-первых - это уже проблема пользователя, а не разработчика инсталлятора. Если пользователь вносит такие изменения в свой реестр, то должен сам представлять последствия.
Во-вторых, именно этим ключом и определяется установленная версия DirectX. Разумеется, можно определять версию отдельного API (DirectShow, DirectPlay и пр.). Но это будет именно версия API, а не DirectX. Версия DirectX определяется именно этим ключом. Для проверки достаточно внести изменения в реестр и посмотреть что возвращает утилита dxdiag, которую сам разработчик рекомендует использовать для проверки версии DirectX - http://support.microsoft.com/kb/157730
Хотя на мой взгляд, достаточно даже во-первых. Если пользователь хочет проблему - он ее получит
Автор: sjwrec
Дата сообщения: 18.12.2013 16:20
Genri

Цитата:
Во-вторых, именно этим ключом и определяется установленная версия DirectX


Да, но у меня однажды был глюк. На чистую только что установленную Windows 7 - установил DirectX 9.0c,

Захожу в DxDiag - а там Версия DirectX 9.0c ... Я чуть со стула не упал ))

Зашёл в реестр и подправил ключ.

Захожу в DxDiag - и там Версия DirectX 11

Так что оказывается не только пользователь может сменить этот ключ.
Автор: Genri
Дата сообщения: 18.12.2013 18:16
sjwrec

Цитата:
однажды был глюк. На чистую только что установленную Windows 7 - установил DirectX 9.0c
-- не совсем понял, зачем на Windows 7, которая насколько помню, штатно идет с DirectX 10, устанавливать DirectX 9.0c. Более того, в DirectX 9.0c поддержка Windows 7 и не заявлена - http://www.microsoft.com/ru-ru/download/details.aspx?id=34429
Если для совместимости требуется обновить библиотеки для софта, который требует именно DirectX 9.0c, достаточно обновить текущую версию - http://www.microsoft.com/ru-ru/download/details.aspx?id=34429
Но в любом случае, требовать от инсталлятора решения глюков стороннего софта, на мой взгляд не оправданно. Все должно работать так, как предусмотрено производителем. А не из расчета - что там у кого заглючит.


Цитата:
не только пользователь может сменить этот ключ
-- разумеется. Вполне естественно, что инсталлятор DirectX тоже меняет этот ключ. Более того - только инсталлятор DirectX и должен менять его. Не пользователь или сторонние программы, а только сам инсталлятор DirectX.
Автор: sjwrec
Дата сообщения: 19.12.2013 09:26
Genri

Цитата:
зачем на Windows 7, которая насколько помню, штатно идет с DirectX 10, устанавливать DirectX 9.0c.

Затем, что любая игра на DX9 напишет ошибку "Компонент .... не найден".

Штатно Windows 7 идёт с базовыми библиотеками:
DX 8 / 9.0L / 10 / 10.1 / 11 ,
а DX 9.0c не входит в комплект и ставится отдельно. И то что поддержка и не заявлена не мешает играм на DX9 прекрасно работать в среде Windows 7 / 8 / 8.1

Про остальное всё верно. Думаю нужно прекратить это обсуждать.
Автор: Vixoid
Дата сообщения: 20.12.2013 06:45
Кто подскажет, есть какие механизмы для работы с JSON?
Автор: TheMultiLamer
Дата сообщения: 21.12.2013 21:14
Здравствуйте.

1. Мне нужен скрипт для того что бы добавить отдельную картинку на страницу завершенной установки. Буду очень признателен.

2. У меня есть скрипт для добавления музыки в инсталятор, нужно только присобачить к нему кнопки Play/Pause, но как?
Автор: TheMultiLamer
Дата сообщения: 23.12.2013 04:06
Извиняюсь я не правильно выразился, мне нужно этого не скрипты а коды)
Автор: vint56
Дата сообщения: 23.12.2013 10:16
TheMultiLamer

[more= Примерн на Bmp][Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Files]
Source: "C:\Image2.bmp"; Flags: dontcopy solidbreak

[Code]
var
FinishedPage: TBitmapImage;

procedure InitializeWizard();
begin
WizardForm.WizardBitmapImage2.Hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.FinishedLabel.Hide;
FinishedPage := TBitmapImage.Create(WizardForm);
with FinishedPage do
begin
Parent := WizardForm.FinishedPage;
Left := ScaleX(0);
Top := ScaleY(0);
Width := ScaleX(497);
Height := ScaleY(313);
ExtractTemporaryFile('Image2.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image2.bmp'));
end;
end;[/more]

[more=Пример на Ботве]
[Setup]
AppName=My Program
AppVersion=1.5
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program


[Files]
Source: InstallFiles\botva2.dll; DestDir: {tmp}; Flags: dontcopy;
Source: InstallFiles\Finished.png; DestDir: {tmp}; Flags: dontcopy;

[Code]
var
Finished: Longint;

function ImgLoad(Wnd :HWND; FileName: PAnsiChar; Left, Top, Width, Height :integer; Stretch, IsBkg :boolean) :Longint; external 'ImgLoad@{tmp}\botva2.dll stdcall delayload';
procedure ImgSetPosition(img :Longint; NewLeft, NewTop, NewWidth, NewHeight :integer); external 'ImgSetPosition@{tmp}\botva2.dll stdcall delayload';
procedure ImgRelease(img :Longint); external 'ImgRelease@{tmp}\botva2.dll stdcall delayload';
procedure ImgSetVisibility(img :Longint; Visible :boolean); external 'ImgSetVisibility@{tmp}\botva2.dll stdcall delayload';
function ImgGetVisibility(img:Longint):boolean; external 'ImgGetVisibility@{tmp}\botva2.dll stdcall delayload';
procedure ImgApplyChanges(h:HWND); external 'ImgApplyChanges@{tmp}\botva2.dll stdcall delayload';
procedure gdipShutdown; external 'gdipShutdown@{tmp}\botva2.dll stdcall delayload';

function InitializeSetup: Boolean;
begin
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
if not FileExists(ExpandConstant('{tmp}\Finished.png')) then ExtractTemporaryFile('Finished.png');
Result:=True;
end;

procedure InitializeWizard;
begin
WizardForm.WizardBitmapImage2.hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.FinishedLabel.Hide;
Finished:=ImgLoad(WizardForm.FinishedPage.Handle,ExpandConstant('{tmp}\Finished.png'),ScaleX(0), ScaleY(0),ScaleX(508),ScaleY(313),True,True);
ImgApplyChanges(WizardForm.FinishedPage.Handle);
end;

procedure ShowComponents(CurPageID: Integer);
begin
case CurPageID of
wpWelcome: begin
ImgSetVisibility(Finished,True);
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
ImgSetVisibility(Finished,False);
ShowComponents(CurPageID);
ImgApplyChanges(WizardForm.Handle);
end;

procedure DeInitializeSetup();
begin
gdipShutdown;
end;[/more]

BASS v 1.4 от Shegorat [10.05.2012].
Модуль для проигрывания музыки. Используется библиотека BASS.DLL. Инструкции нет, но через примеры можно понять что к чему.
Список изменений:
-Обновлена библиотека Bass.dll до версии 2.4.9.0
-Улучшена функциональность тракбара
-Добавлен прогрессбар, показывающий длительность песни, а также прошедшее время
-Мелкие изменения
http://rghost.ru/51150403
PlayWith.Texture
http://rghost.ru/51150495
Автор: TheMultiLamer
Дата сообщения: 23.12.2013 23:39
За картинки спасибо. А библиотеку эту я знаю, по мне так это лажа. Она лиш нагружает инстал. Слишком много лишнего... Мне не целый плеер нужен в инстале а кнопки Play/Pause.
Автор: tuz1979
Дата сообщения: 24.12.2013 19:26
можете помочь?
Какой функцией удалить все содержимое папки, в которую будет устанавливаться программа?
Автор: TheMultiLamer
Дата сообщения: 25.12.2013 00:36
tuz1979, я так понимаю что у тебя не удаляются файлы установленные ISDone...



Добавлено:
tuz1979, я так понимаю что у тебя не удаляются файлы установленные ISDone...

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

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758

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


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