Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]
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 бит программы
как их реализовать в один инстал. и автоматически что бы выбирала ось
имеется 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;
Добрый день уважаемые гуру! Прошу помочь начинающей.. :)
Нужно в зависимости от разрядности ОС (32 или 64) установить библиотеку (без регистрации) в нужную папку, т.е. если 32, то в папку system32, если 64 - в SysWOW64.
Как это сделать?
Dodakaedr
22-09-2015, 21:21
marinaU, [Files]
Source: файл.dll; DestDir: {sys};
На 32бит пойдет в system32, а на 64бит в - SysWOW64.
Код:
[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., пост с картинкой удали/отредактируй, а то пожалуюсь.
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.