Войти

Показать полную графическую версию : Скрипты 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

vadjliss
13-09-2015, 14:15
парни подскажите скрипт что бы в 1 инстоляторе было и 32и 64 битная сис.
и чтоб автоматически выбирала систему
очень очень надо

AlekseyPopovv
13-09-2015, 14:30
vadjliss,
[Setup]
ArchitecturesInstallIn64BitMode=x64

[...]
; х64
Check: "Is64BitInstallMode";
; х86
Check: "not Is64BitInstallMode";

vadjliss
13-09-2015, 14:55
а на примере можешь показать куда и как ставить
я так понял вот так

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

[Setup]
AppId={{D19EE6F3-07CC-4C29-A911-0F50BC5F659F}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
ArchitecturesInstallIn64BitMode=x64

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

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

[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion


[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

; х64
Check: "Is64BitInstallMode";
; х86
Check: "not Is64BitInstallMode";

audiofeel
13-09-2015, 17:48
TryRooM, us_ov, Примерно так
Скрытый текст »
помоги разобраться в твоем примере, мне нужно лишь выбрать букву диска, все что смог " лишнее " убрал но появилась проблема, когда выбираешь диск через кнопку "обзор" то инфа в комбо бокс не обновляется, то есть если выбрал диск Д. то в комбо боксе остается С
пример

; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "Моя программа"
#define MyAppVersion "1.5"
#define MyAppPublisher "Моя компания, Inc."
#define MyAppURL "http://www.сайт.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppId={{B5BB5779-8526-4769-95BB-7F54ACCBC64A}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

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

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
[code]
var
cbDrive: TComboBox;
DrvLetters: array of string;

function GetDriveType(lpDisk: string): integer;
external 'GetDriveTypeA@kernel32.dll stdcall';

function GetLogicalDriveStrings(nLenDrives: LongInt; lpDrives: string): integer;
external 'GetLogicalDriveStringsA@kernel32.dll stdcall';

const
DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

function DriveTypeString(dtype: integer): string;
begin
case dtype of
DRIVE_NO_ROOT_DIR: Result:='';
DRIVE_REMOVABLE: Result:='';
DRIVE_FIXED: Result:='';
DRIVE_REMOTE: Result:='';
DRIVE_CDROM: Result:='';
DRIVE_RAMDISK: Result:='';
end;
end;

procedure cbDriveOnClick(Sender: TObject);
begin
WizardForm.DirEdit.Text := DrvLetters[cbDrive.ItemIndex] + '{#MyAppName}';
end;

procedure FillCombo();
var
drivesletters, drive, sd: string;
n, lenletters, disktype, posnull: integer;

begin
sd := UpperCase(ExpandConstant('{sd}'));
drivesletters := StringOfChar(' ', 64);
lenletters := GetLogicalDriveStrings(63, drivesletters);
SetLength(drivesletters, lenletters);
Drive := '';
n := 0;
while ((Length(Drivesletters) > 0)) do begin
posnull := Pos(#0, Drivesletters);
if posnull > 0 then begin
Drive := UpperCase(Copy(Drivesletters, 1, posnull-1));
disktype := GetDriveType(Drive);
if ( not ( disktype = DRIVE_REMOVABLE ) ) then
if ( not ( disktype = DRIVE_REMOTE ) ) then
if ( not ( disktype = DRIVE_CDROM ) ) then
if ( not ( disktype = DRIVE_RAMDISK ) ) then begin
cbDrive.Items.Add(Drive + DriveTypeString(disktype))
SetArrayLength(DrvLetters, N+1);
DrvLetters[n] := Drive;
if (Copy(Drive, 1, 2)=sd) then cbDrive.ItemIndex := n;
n := n+1;
end
Drivesletters := Copy(Drivesletters, posnull+1, Length(Drivesletters));
end;
end;
cbDriveOnClick(cbDrive);
end;

procedure InitializeWizard();
begin
cbDrive := TComboBox.Create(WizardForm.SelectDirPage);
with cbDrive do begin
Parent := WizardForm.DirEdit.Parent;
Left := 0;
Top := WizardForm.DirEdit.Top+WizardForm.DirEdit.Height*2-15;
Width := 40;
Style := csDropDownList;
end
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text+#0;
FillCombo;
cbDrive.OnClick := @cbDriveOnClick;
end;

El Sanchez
14-09-2015, 13:57
мне нужно лишь выбрать букву диска, все что смог " лишнее " убрал но появилась проблема, когда выбираешь диск через кнопку "обзор" то инфа в комбо бокс не обновляется, то есть если выбрал диск Д. то в комбо боксе остается С »
audiofeel, пример:

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
DRIVE_NO_ROOT_DIR = 1;
DRIVE_FIXED = 3;

var
cbDrive: TComboBox;

function GetLogicalDrives: DWORD; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(lpRootPathName: string): UINT; external 'GetDriveType{#A}@kernel32.dll stdcall';

procedure cbDriveOnClick(Sender: TObject);
var
DirValue: string;
begin
DirValue := WizardDirValue;
StringChangeEx(DirValue, AddBackslash(ExtractFileDrive(DirValue)), cbDrive.Items[cbDrive.ItemIndex], True);
WizardForm.DirEdit.Text := DirValue;
end;

procedure DirEditOnChange(Sender: TObject);
var
i: Integer;
begin
for i := 0 to cbDrive.Items.Count - 1 do
begin
if CompareText(cbDrive.Items[i], AddBackslash(ExtractFileDrive(WizardDirValue))) = 0 then
begin
cbDrive.ItemIndex := i;
Break;
end;
end;
end;

procedure FillCombo;
var
dwDrives: DWORD;
uDriveType: UINT;
szDriveLetter: string;
i: Integer;
begin
dwDrives := GetLogicalDrives;
for i := 2 to 25 do if dwDrives and (1 shl i) <> 0 then
begin
szDriveLetter := Chr(Ord('A') + i) + ':\';
uDriveType := GetDriveType(szDriveLetter);
case uDriveType of
DRIVE_FIXED:
begin
cbDrive.Items.Add(szDriveLetter);
if CompareText(cbDrive.Items[cbDrive.Items.Count - 1], AddBackslash(ExtractFileDrive(WizardDirValue))) = 0 then
cbDrive.ItemIndex := cbDrive.Items.Count - 1;
end;
DRIVE_NO_ROOT_DIR: Continue;
end;
end;
end;

procedure InitializeWizard;
begin
WizardForm.DirEdit.OnChange := @DirEditOnChange;
cbDrive := TComboBox.Create(WizardForm.SelectDirPage);
with cbDrive do
begin
Parent := WizardForm.DirEdit.Parent;
Top := WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + ScaleY(5);
Width := 40;
Style := csDropDownList;
OnClick := @cbDriveOnClick;
FillCombo;
end;
end;

audiofeel
14-09-2015, 14:25
El Sanchez,
просто отлично, все работает, только как теперь быть с лейблом "требуется место...." , он у меня менял цвет при нехватке

procedure DirEditOnChange(Sender: TObject);
var
FreeMB, TotalMB: cardinal;
begin
GetSpaceOnDisk(ExtractFileDrive(WizardForm.DirEdit.Text), True, FreeMB, TotalMB);
NeedSizeLbl.Caption:= ExpandConstant('{cm:NeedSize1} ' + MbOrTb({#NeedSize}) + ' {cm:NeedSize2}')
if (FreeMB<{#NeedSize}) then NeedSizeLbl.Font.Color:= clRed else
NeedSizeLbl.Font.Color:= clWhite;
end;

Snoopak96
14-09-2015, 14:35
El Sanchez,
Тебе видимо тут спокойно не живётся.

Аудиозоофил,
До оригинала тебе как от Москвы до Пекина пешком. На данный момент ты добился лишь того что мод VCL Styles Inno выпилен и новых версий не будет для паблика.

vadjliss
14-09-2015, 19:11
подскажите как сделать или хоть примерный скрипт 32-64 бит
имеется 2 папки одна 32 другая 64 бит программы
как их реализовать в один инстал. и автоматически что бы выбирала ось

Nordek
14-09-2015, 21:29
имеется 2 папки одна 32 другая 64 бит программы »
[Files]
Source: 32\*; DestDir: {app}; Check: not IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
Source: 64\*; DestDir: {app}; Check: IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs

habib2302
20-09-2015, 10:38
Доброе время суток. Подскажите как правильно сделать распаковку vcomp140.dll в sys и syswow64. Все перепробывал либо 1 файл не распаковывается либо оба файла в syswow64
Source: vcomp140.dll; DestDir: {sys}; Flags: ignoreversion; Check: IsWin64; Components: BDC\I;
Source: vcomp140_1.dll; DestDir: {syswow64}; Flags: ignoreversion; DestName: vcomp140.dll; Components: BDC\I;
Хочу чтобы vcomp140.dll распаковывался в System32, а vcomp140_1.dll в syswow64

El Sanchez
21-09-2015, 09:00
Хочу чтобы vcomp140.dll распаковывался в System32, а vcomp140_1.dll в syswow64 »
habib2302,
[Files]
Source: vcomp140.dll; DestDir: {sys}; Flags: ignoreversion 64bit; Check: IsWin64; Components: BDC\I;
Source: vcomp140_1.dll; DestDir: {sys}; Flags: ignoreversion; DestName: vcomp140.dll; Components: BDC\I;

marinaU
22-09-2015, 09:37
Добрый день уважаемые гуру! Прошу помочь начинающей.. :)

Нужно в зависимости от разрядности ОС (32 или 64) установить библиотеку (без регистрации) в нужную папку, т.е. если 32, то в папку system32, если 64 - в SysWOW64.
Как это сделать?

Dodakaedr
22-09-2015, 21:21
marinaU, [Files]
Source: файл.dll; DestDir: {sys};
На 32бит пойдет в system32, а на 64бит в - SysWOW64.

marinaU
23-09-2015, 09:57
Код:
[Files]
Source: файл.dll; DestDir: {sys};
На 32бит пойдет в system32, а на 64бит в - SysWOW64. »

Спасибо огромное!
Скажите пожалуйста, а будут ли заменены файлы при совпадении имен?

Dodakaedr
23-09-2015, 18:26
Скажите пожалуйста, а будут ли заменены файлы при совпадении имен? »
Если так
[Files]
Source: файл.dll; DestDir: {sys}; Flags: onlyifdoesntexist
то нет. К стате в справке про всё это очень хорошо написано, рекомендую прочесть.

R.i.m.s.k.y.
24-09-2015, 09:27
подскажите, пожалуйста, как опознаются в GetWindowsVersionEx винды 8, 8.1, 10

R.i.m.s.k.y.
24-09-2015, 10:57
инно от китайцев 5,5,1 для вин 8,1 и 10 возвращает
version.major=6 version.minor=2 version.build=9200
подскажите, пожалуйста, как их различать?

R.i.m.s.k.y.
24-09-2015, 12:46
еще вопросик - можно как-то свойствам ярлыка выставлять совместимость с вин хр сп2 к примеру?

El Sanchez
24-09-2015, 14:46
подскажите, пожалуйста, как опознаются в GetWindowsVersionEx винды 8, 8.1, 10 »
8.1 и 10 version.major=6 version.minor=2 version.build=9200 »
R.i.m.s.k.y., это документированое поведение (https://msdn.microsoft.com/en-us/library/windows/desktop/dn302074%28v=vs.85%29.aspx#manifestation) для исполняемых файлов, в манифесте которых нет нужных compatibility. Я так понимаю, что ты пользуешься китайской расширенной версией компилятора (5.5.1), где не прописаны нужные строки в манифесте. В официальном компиляторе поддержка Windows 8.1 появилась в версии 5.5.4, а Windows 10 в 5.5.6.
P.S. Во вложении китаец с правленным манифестом, чтобы у установщиков волосы были мягкими и шелковистыми. Бонус: командный файл внутри для быстрой смены компилятора с ANSI на Unicode и обратно.
еще вопросик - можно как-то свойствам ярлыка выставлять совместимость с вин хр сп2 к примеру? »
R.i.m.s.k.y., http://www.verboon.info/2011/03/running-an-application-as-administrator-or-in-compatibility-mode/

R.i.m.s.k.y., пост с картинкой удали/отредактируй, а то пожалуюсь.

TryRooM
24-09-2015, 14:47
R.i.m.s.k.y., GetWindowsVersionEx винды 8, 8.1, 10

function ForWindows10(): Boolean;
var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
// Windows 10 version is 6.4 (workstation)
if (Version.Major = 6) and
(Version.Minor = 4) and
(Version.ProductType = VER_NT_WORKSTATION)
then
Result := True
else
Result := False;
end;

function ForWindows8One(): Boolean;
var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
// Windows 8.1 version is 6.3 (workstation)
if (Version.Major = 6) and
(Version.Minor = 3) and
(Version.ProductType = VER_NT_WORKSTATION)
then
Result := True
else
Result := False;
end;

function ForWindows8(): Boolean;
var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
// Windows 8 version is 6.2 (workstation)
if (Version.Major = 6) and
(Version.Minor = 2) and
(Version.ProductType = VER_NT_WORKSTATION)
then
Result := True
else
Result := False;
end;




© OSzone.net 2001-2012