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

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

Автор: Snoopak96
Дата сообщения: 29.01.2012 09:23
ShkiPer92
в строке после imgload добавь end;
Автор: ShkiPer92
Дата сообщения: 29.01.2012 11:47
Ошибка
Snoopak96, а эту не подскажешь как исправить?
UPD
Ошибку исправил, но появляются ещё другие :\
Автор: SotM
Дата сообщения: 29.01.2012 15:31
ShkiPer92
Изучай Паскаль/Дельфи, иначе ты так про каждую ошибку будешь здесь спрашивать.
Автор: Gocha1
Дата сообщения: 29.01.2012 17:43
Помогите сделать такую фишку: http://rghost.ru/private/36189161/541107f2df4095ec70e04e2b0e4616fd
Автор: lmiol
Дата сообщения: 30.01.2012 10:52
доброго времени суток, у меня проблема, как сделать так как на картинке??? (картинку оформлял я http://i29.fastpic.ru/big/2012/0130/12/b0ee66822992843298272b3500a70a12.jpg )

смысл заключается в том что у пользователя перед компонентами вылетает выбор режима установки для Standart пользователя и для Premium пользователя
Для обоих вариантов вылетает список компонентов которые он не может выбрать (но может увидеть что они устанавливаются) и те которые может выбрать
Они идентичны только в разделе Premium устанавливается еще одна строчка

вот ниже код который я использовал для написания такого скрипта но не знаю как дальше писать
[more]

Код:
[Setup]
AppName=Quake Live
AppVerName="Quake Live"
AppPublisher=Mio Dark Project
CreateAppDir=no
DefaultGroupName=Mio Dark Project\Quake Live
AllowNoIcons=yes
OutputDir=Output
OutputBaseFilename=Quake Live
SetupIconFile=setup.ico
Compression=lzma/ultra
SolidCompression=yes
ShowTasksTreeLines=yes
DisableProgramGroupPage=yes
WizardImageFile=Big.bmp
WizardSmallImageFile=Small.bmp
UninstallDisplayIcon={app}\Uninstall\uninstall.ico
UninstallFilesDir={app}\Uninstall
WizardImageStretch=no
AlwaysShowComponentsList=no

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

[Types]
Name: "full"; Description: "Все компоненты";
Name: "custom"; Description: "Выбрать компоненты"; Flags: iscustom

[Components]
Name: "main"; Description: "Cтандартные файлы Quake Live"; Types: full custom; Flags: fixed
Name: "main2"; Description: "Премиум файлы Quake Live"; Types: full custom; Flags: fixed
Name: "plug"; Description: "Плагин Quake Live"; Types: full custom
Name: "browser"; Description: "Портативный Firefox под Quake Live"; Types: full custom
Name: "manual"; Description: "Руководство и Награды"; Types: full custom
Name: "anti"; Description: "Античит PunkBuster"; Types: full custom

[CustomMessages]
HeaderLabelPage=Выберите тип вашего аккаунта
MyRadioCaption_1=Standart
MyRadioCaption_2=Premium / Pro
PageTextHeader=На этой странице Вы можете выбрать тип вашего аккаунта, который вы используете в игре.
MyText_1=Будут установлены файлы которые доступны для игроков без подписки.
MyText_2=Будут установлены файлы которые доступны для игроков с Premium/Pro подпиской.


[Tasks]
Name: "desktopicon"; Description: "Создать ярлык на Рабочем Столе"; GroupDescription: "{cm:AdditionalIcons}"

[Files]
;source: "uninstall.ico"; Components: main; DestDir: "{code:DetectWindows}\uninstall"; Flags: ignoreversion
;Source: "usercur\*"; Components: main; DestDir: "{code:DetectWindows}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
;Source: "usercur2\*"; Components: manual; DestDir: "{code:DetectWindows}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
;Source: "programfiles\*"; Components: browser; DestDir: "{pf}\"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "pk31\*"; Components: main; DestDir: "{code:DetectWindows}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension nocompression
;Source: "pbsvc.exe" ;Components: anti;DestDir: "{tmp}"; Flags: ignoreversion
;Source: "QuakeLiveNP_433.msi" ;Components: plug;DestDir: "{tmp}"; Flags: ignoreversion

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

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



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}');
Checked := True;
Parent := MyNewPage.Surface;
end;

with TNewStaticText.Create(WizardForm) do
begin
Left := ScaleX(16);
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}');
Parent := MyNewPage.Surface;
end;

with TNewStaticText.Create(WizardForm) do
begin
Left := ScaleX(16);
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 = wpReady) and (MyRadioBtn_2.Checked) then
Result := True;
end;

procedure InitializeWizard();
begin
GetInstTypePage();
end;
function DetectWindows(s: string): string;
var
SubKeyName, ResultStr: string;
begin
SubKeyName:= 'Software\Microsoft\Windows NT\CurrentVersion';
RegQueryStringValue(HKLM, SubKeyName, 'ProductName', ResultStr);
if Pos('XP', ResultStr) > 0 then
Result:= ExpandConstant('{%APPDATA}\id Software')
else
if Pos('Vista', ResultStr) > 0 then
// не знаю, будет ли это C:\Users\Ваше_имя_пользователя\AppData\LocalLow\id Software
// проверить не где
Result:= ExpandConstant('{%APPDATA}\LocalLow\id Software')
else Result:= '{%APPDATA}\LocalLow\id Software'; // сюда нужно вписать путь по дефолту, т.е. если не XP или Vista
end;
Автор: GhoSt_1616
Дата сообщения: 30.01.2012 14:50
SotM, тут такие ошибки, что даже не паскаль надо учить, а скорее всего английский
Автор: lmiol
Дата сообщения: 30.01.2012 16:34
код подсказывали на соседнем форуме =D
Автор: Stalkersof
Дата сообщения: 30.01.2012 20:49
Извените не спец по кодам. Так только редактировать.
If (FileSearch('gamedata.dbc', ExpandConstant('{app}'))='')
or (FileSearch('gamedata.dbd', ExpandConstant('{app}'))='')then
путь app всегда заканчивается \mods вот кабы это удалить.
Нужно взять путь app сохранить в переменной посчитать количество символов обрезать(Удалить) последнии пять и использовать в коде выше для поиска файлов. Можно как то сделать. Заранее спасибо.
Автор: Kindly
Дата сообщения: 30.01.2012 20:55
Stalkersof, когда-то накидал такой скриптец, проанализируешь поймешь:
[more][Setup]
AppName=111
AppVerName=222
DefaultDirName={code:InstallPath}
OutputBaseFilename=Test
OutputDir=D:\OutRus
;CreateAppDir=no
;DisableDirPage=yes
DisableReadyPage=yes
DisableProgramGroupPage=yes

UsePreviousAppDir=no
UsePreviousGroup=no
UsePreviousSetupType=no

[LangOptions]
DialogFontName=Tahoma
DialogFontSize=8

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

[Files]
Source: D:\23\*; DestDir: {code:InstallPath}; Flags: ignoreversion recursesubdirs createallsubdirs;

[CodeDELETETHISSTRING]
const
regRoot = HKCU;
regKey32 = 'Software\Valve\Steam\ActiveProcess';
regKey64 = 'Software\Wow6432Node\Valve\Steam\ActiveProcess';
regValue = 'SteamClientDll';

var
PathStr,regKey: String;
ResultCode: Integer;

procedure CheckOSBit;
begin
if not IsWin64 then
begin
regKey:=regKey32;
end else
regKey:=regKey64;
end;

function GetInstallPath(): Boolean;
begin
CheckOSBit; // считаем нужную ветку при различной битности ОС
if RegQueryStringValue(regRoot, regKey, regValue, PathStr) then
PathStr:=ExtractFilePath(PathStr) // нужно, если путь содержит файл
begin
if PathStr<>'' then
PathStr:=RemoveQuotes(PathStr);
StringChangeEx(PathStr, '\bin', '', True); // вариант вполне рабочий
begin
Result:=True;
if not RegValueExists(regRoot, regKey, regValue) then
begin
MsgBox('Left for Dead 2 не обнаружена.' #13#13 'Сначала установите игру.', mbError, mb_Ok);
Result:=False;
end;
end;
end;
end;

function InstallPath(Param: String): String;
begin
Result:=PathStr;
end;

function InitializeSetup(): Boolean;
begin
if GetInstallPath then
Result:=True;
end;[/more]
Автор: Stalkersof
Дата сообщения: 30.01.2012 21:12
Kindly Оно походу находит символы и заменяет на ничего.
StringChangeEx(PathStr, '\bin', '', True); // вариант вполне рабочий
Автор: Kindly
Дата сообщения: 30.01.2012 21:19
Stalkersof, а все, понял - тебе нужно тем что отрезали манипулировать в дальнейшем?
Автор: Stalkersof
Дата сообщения: 30.01.2012 21:23
Нет путь арр от него отрезать \mods и выкинуть \mods, а остальное использовать для поиска файлов. Проверка на патч сталкера 5 и 6 кроме 4.
Автор: Kindly
Дата сообщения: 30.01.2012 21:26
Так какие проблемы с StringChangeEx? PathStr получаешь как {app} и на выходе в поиске манипулируешь с PathStr.
Да и проверку этих патчей по-моему лучше через параметры реестра делать. Не?
Автор: Stalkersof
Дата сообщения: 30.01.2012 21:28
Все понял если чо созванимся
Так для уверености. А через реестр есть возможность попасть на кривую пиратку решил так.

Kindly Спасибо получилось
Автор: as45df
Дата сообщения: 31.01.2012 00:03
[more] Здравствуйте все!!! Скажите, а почему зависает isSlideShow v1.02 при использовании любого скина в установщике ( слайд шоу по процентам установки и от времени в окне инно), а потом ничего непроисходит? Вот навсякий случай скрипт:
[more]
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
Compression=lzma

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

[Files]
Source: C:\jpg\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: isSlideShow.dll; DestDir: {tmp}; Flags: dontcopy
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: Slides\Back.jpg; DestDir: {tmp}; Flags: dontcopy
Source: Slides\1.bmp; DestDir: {tmp}; Flags: dontcopy
Source: Slides\2.bmp; DestDir: {tmp}; Flags: dontcopy
Source: Slides\3.jpg; DestDir: {tmp}; Flags: dontcopy
Source: Slides\4.jpg; DestDir: {tmp}; Flags: dontcopy
Source: Slides\5.png; DestDir: {tmp}; Flags: dontcopy
Source: Slides\6.png; DestDir: {tmp}; Flags: dontcopy
Source: steam.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

[Icons]
Name: {group}\Удалить; IconFilename: {app}\unins000.exe; Filename: {app}\unins000.exe

[Code]
type
TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
TimerID: LongWord;
CurrentPicture:integer;
PicList: TStringlist;

function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
function GetSystemMetrics(nIndex:Integer):Integer; external 'GetSystemMetrics@user32.dll stdcall';
procedure InitializeSlideShow(Hwnd:Thandle; l,t,w,h:integer;Animate:boolean; Stretch:integer); external 'InitializeSlideShow@files:isslideshow.dll stdcall';
procedure DeinitializeSlideShow; external 'DeinitializeSlideShow@files:isslideshow.dll stdcall';
procedure ShowImage(ipath:PChar; Effect:integer); external 'ShowImage@files:isslideshow.dll stdcall';

procedure InitializeWizard1();
begin
PicList:=tstringlist.Create;
ExtractTemporaryFile('Back.jpg');
ExtractTemporaryFile('1.bmp');
ExtractTemporaryFile('2.bmp');
ExtractTemporaryFile('3.jpg');
ExtractTemporaryFile('4.jpg');
ExtractTemporaryFile('5.png');
ExtractTemporaryFile('6.png');
piclist.add(ExpandConstant('{tmp}') + '\1.bmp');
piclist.add(ExpandConstant('{tmp}') + '\2.bmp');
piclist.add(ExpandConstant('{tmp}') + '\3.jpg');
piclist.add(ExpandConstant('{tmp}') + '\4.jpg');
piclist.add(ExpandConstant('{tmp}') + '\5.png');
piclist.add(ExpandConstant('{tmp}') + '\6.png');
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
thePicture: integer;
delta: double;
begin
delta := WizardForm.ProgressGauge.Max / ( piclist.Count );
thePicture := round( WizardForm.ProgressGauge.Position / delta );
if( thePicture <> CurrentPicture ) then
begin
CurrentPicture := thePicture;
try
ShowImage(piclist.strings[CurrentPicture - 1], 1);
except
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpInstalling then
begin
InitializeSlideShow(WizardForm.Handle, 0, 0, ScaleX(501), ScaleY(314), true, 2);
ShowImage(ExpandConstant('{tmp}') + '\Back.jpg', 1);
TimerID:=SetTimer(0, 0, 200, WrapTimerProc(@OnTimer, 4));
WizardForm.ProgressGauge.parent:=WizardForm;
WizardForm.ProgressGauge.setbounds(ScaleX(10), ScaleY(325), ScaleX(385), WizardForm.ProgressGauge.height);
WizardForm.CancelButton.Left:=ScaleX(405);
WizardForm.CancelButton.Top:=ScaleY(325);
end;
if CurPageID=wpFinished then
begin
DeinitializeSlideShow;
WizardForm.ProgressGauge.visible:=false;
end;
end;

procedure DeinitializeSetup1();
begin
DeinitializeSlideShow;
KillTimer(0, TimerID);
end;
//////////////////-------------------------------------Загрузка скина--------------------------------------------------///////////////////////
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

function InitializeSetup:boolean;
begin
ExtractTemporaryFile('steam.cjstyles');
LoadSkin(ExpandConstant('{tmp}')+'\steam.cjstyles', '');
Result:=True;
end;

procedure InitializeWizard2;
begin
WizardForm.BeveledLabel.Enabled:=True;
end;

procedure DeinitializeSetup2;
begin
ShowWindow(WizardForm.Handle,0);
UnloadSkin();
end;

procedure InitializeWizard;
begin
InitializeWizard1();
InitializeWizard2();
end;

procedure DeinitializeSetup;
begin
DeinitializeSetup1();
DeinitializeSetup2();
end;
[/more]
[/more]
Автор: Genri
Дата сообщения: 31.01.2012 09:02
Stalkersof

Цитата:
путь app всегда заканчивается \mods вот кабы это удалить.
-- ExpandConstant('{app}\..')
хинт! Две точки в пути означает уровень вверх.
Автор: Gnom3
Дата сообщения: 31.01.2012 10:50
lmiol, в твоем случае, без содания дополнительной страницы компонентов, и описания кучи условий, вариант только такой:
[more=код]
Код:
[Setup]
AppName=Quake Live
AppVerName="Quake Live"
AppPublisher=Mio Dark Project
CreateAppDir=no

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

[Types]
Name: "full"; Description: "Все компоненты";
Name: "custom"; Description: "Выбрать компоненты"; Flags: iscustom

[Components]
Name: "main"; Description: "Cтандартные файлы Quake Live"; Types: full custom; Flags: fixed
Name: "main2"; Description: "Премиум файлы Quake Live"; Types: full custom;
Name: "plug"; Description: "Плагин Quake Live"; Types: full custom;
Name: "browser"; Description: "Портативный Firefox под Quake Live"; Types: full custom;
Name: "manual"; Description: "Руководство и Награды"; Types: full custom;
Name: "anti"; Description: "Античит PunkBuster"; Types: full custom;

[CustomMessages]
HeaderLabelPage=Выберите тип вашего аккаунта
MyRadioCaption_1=Standart
MyRadioCaption_2=Premium / Pro
PageTextHeader=На этой странице Вы можете выбрать тип вашего аккаунта, который вы используете в игре.
MyText_1=Будут установлены файлы которые доступны для игроков без подписки.
MyText_2=Будут установлены файлы которые доступны для игроков с Premium/Pro подпиской.


[*code]
var
MyNewPage: TWizardPage;
MyRadioBtn:ArraY[0..1]of TNewRadioButton;

procedure GetInstType;
begin
WizardForm.ComponentsList.ItemEnabled[1]:= MyRadioBtn[1].Checked or not MyRadioBtn[0].Checked;
WizardForm.ComponentsList.Checked[1]:=MyRadioBtn[1].Checked or not MyRadioBtn[0].Checked;
WizardForm.ComponentsList.Checked[4]:=MyRadioBtn[1].Checked or not MyRadioBtn[0].Checked;
end;

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

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

for i:=0 to 1 do
begin
MyRadioBtn[i] := TNewRadioButton.Create(WizardForm);
with MyRadioBtn[i] do
begin
Parent := MyNewPage.Surface;
Top := ScaleY(50+i*70);
Width := ScaleX(150);
case i of
0: begin
Caption := ExpandConstant('{cm:MyRadioCaption_1}');
Checked := True;
end;
1:Caption := ExpandConstant('{cm:MyRadioCaption_2}');
end;
end;

with TNewStaticText.Create(WizardForm) do
begin
Parent := MyNewPage.Surface;
SetBounds(ScaleX(16),ScaleY(68+i*70),WizardForm.InnerNotebook.Width - ScaleX(60),ScaleY(26));
WordWrap := True;
case i of
0:Caption := ExpandConstant('{cm:MyText_1}');
1:Caption := ExpandConstant('{cm:MyText_2}');
end;
end;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID <= wpSelectDir)
and (PageID = wpReady)
and (MyRadioBtn[1].Checked)
then Result := True;
end;

procedure InitializeWizard();
begin
GetInstTypePage;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectComponents then GetInstType;
end;
Автор: lmiol
Дата сообщения: 31.01.2012 14:07
ооо =)) отлично
почти то что нужно
но вот как с раздела стандарт убрать вообще премиум а не устанавливать его поумолчанию? так как в таком инсталяторе быстро меняешь все компоненты туда назад он все равно выбирается и хочет устанавливаться

мб както еще вариант с перепиской компонентов и прочего с другой страницей??? вы мне покажитте ссылки и примеры я сам все сделаю, я просто сколько нигуглил ни нишел ничерта
а за ответ спасибо хоть уже от чегонибуть буду отталкиваться
Автор: as45df
Дата сообщения: 31.01.2012 14:24
А меня, что все игнарируют?
Автор: lmiol
Дата сообщения: 31.01.2012 16:15
вроде бы разобрался и ковыраюсь сейчас в Inno Setup Form Designer но не пойму как страницы привызявать друг другу, и как вообще сделать через него список компонентов
Автор: Zloy_Gelud
Дата сообщения: 31.01.2012 17:49
Могу отдать какому-нить кодеру/релиз-группе, но только тем, чьи ники у меня на слуху, одну DLL + исходники для создания модуля (ISS) и выкладывания в последующем его здесь на паблик. Испр.: Библиотека отдана, так что ждем-с.
DLL может применять стиль Aero, накладывать тень и скинировать (скины очень небольшого размера (20-30 кб) ваши инсталлы на WinXP.
Я не особо шарю в Inno, но вот примерный скрин того, что может эта DLL на WinXP:

ЗЫ. Предложения в личку. Если будут вопросы по сорцам - помогу через ICQ. Копирайт останется за тем, кто сделает модуль.
Автор: Tapas77789
Дата сообщения: 01.02.2012 21:42
Модуль для вставки лого через Fairy
Автор: Sergey_Demchuk
Дата сообщения: 02.02.2012 00:09
Кто подскажет
LanguageDetectionMethod по какому принципу работает?
У меня на вполне стандартной русской винде 7 определяет язык английский....
Автор: Karbid87
Дата сообщения: 02.02.2012 07:00
Tapas77789
через fairy плохо то, что лого появляется до загрузки инсталла.
Автор: nik1967
Дата сообщения: 02.02.2012 07:38
Sergey_Demchuk
[more=Из справки][Setup]: LanguageDetectionMethod
Возможные значения:
uilanguage, locale, none
Значение по умолчанию:
uilanguage

Описание:
При значении uilanguageинсталлятор будет использовать принятый по умолчанию язык, который он определит по значению "UI language" (взяв значение в GetUserDefaultUILanguage(), либо, в версиях Windows, не поддерживающих эту функцию, взяв значение из реестра). Этот метод рекомендует Microsoft. "UI language" - язык, используемый в диалоговых окнах Windows. Так, в английских версиях Windows английский будет языком по умолчанию, а в русских версиях - русский.

При значении localeинсталлятор будет использовать язык, указанный в GetUserDefaultLangID(). Эта функция возвращает значение "Your locale", заданное в Панели управления - Язык и стандарты. Следует заметить, что в Windows 2000 и более поздних Windows опции "Your locale" не затрагивает языки, имеются только "числа, валюта, время и даты".

При значении none инсталлятор будет использовать первый язык, указанный в секции [Languages] как язык по умолчанию.
[/more]
Автор: Sergey_Demchuk
Дата сообщения: 02.02.2012 12:03
nik1967
Это я и сам читал. Вопрос в том, почему на русской винде оно определяет UI language как английский?
Автор: Gnom3
Дата сообщения: 02.02.2012 17:46
Sergey_Demchuk
у меня вот прямо так правильно отработало:

Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Languages]
Name: "English"; MessagesFile: "compiler:Languages\English.isl"
;если в папке Languages нет English.isl, использовать эту строчку:
;Name: "English"; MessagesFile: "compiler:Default.isl"
Name: "Russian"; MessagesFile: "compiler:Languages\Russian.isl"
Автор: Sergey_Demchuk
Дата сообщения: 02.02.2012 18:49
Gnom3
Этим я и пользовался доселе. Но вот возникла необходимость после установки программы изменить язык ее интерфейса согласно языку Окошек. Это все делается изменением строчки English на Russian или другой в некоем текстовом файле.

ShowLanguageDialog=no
LanguageDetectionMethod=locale
...
if GetUILanguage = $0422 then StringChangeEx (f[i],'Russian.txt','English.txt',True);
if GetUILanguage = $0419 then StringChangeEx (f[i],'Russian.txt','English.txt',True);
if GetUILanguage = $0410 then StringChangeEx (f[i],'Italiano.txt','English.txt',True);
...

Врет функция GetUILanguage. Возвращает значение $0409
Или может это мне кажется что у меня Окошки русские .
Автор: Gnom3
Дата сообщения: 02.02.2012 19:15
В принципе если пользуешься сборкой - может быть запросто. Иногда сборщики берут аглицкий дистр и русифицируют, отчего он русским не становится, на самом деле.
Цитата:
LanguageDetectionMethod=locale

Почему не UILanguage?
Автор: Sergey_Demchuk
Дата сообщения: 02.02.2012 19:29

Цитата:
Почему не UILanguage?

Пробовал и так и так.
Важно все таки вот это
...GetUILanguage ...

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177

Предыдущая тема: поиск


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