PDA

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


Страниц : 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

Dodakaedr
23-11-2014, 22:58
тогда у меня пойдет, а у других людей будет писать World of Tanks не найден
Тогда сделайте так:

[Setup]
DefaultDirName={code:SetInstDir}

[Code]
function SetInstDir(const lpResult: String): String;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1\', 'InstallLocation', lpResult);
if lpResult <> '' then Result := RemoveBackslash(lpResult) else Result := ExpandConstant('{pf}\');
end;

function InitializeSetup(): Boolean;
begin
if not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1') then
MsgBox('Игра World_of_Tanks не найдена! Укажите путь к папке с игрой вручную!', mbinformation, mb_ok);
Result:=True;
end;


создает дополнительную страницу с чебоксами и радиобутанами »
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]
var
r1, r2: TNewRadioButton;
Page: TWizardPage;
But1, But2: TNewCheckBox;

procedure InitializeWizard();
begin
Page := CreateCustomPage(wpSelectTasks, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');

r1 := TNewRadioButton.Create(WizardForm);
with r1 do
begin
Parent := Page.Surface;
SetBounds(ScaleX(20), ScaleY(20), ScaleX(100), ScaleY(15));
Caption := 'Радиокнопка 1';
Checked := True;
end;

r2 := TNewRadioButton.Create(WizardForm);
with r2 do
begin
Parent := Page.Surface;
SetBounds(ScaleX(20), ScaleY(50), ScaleX(100), ScaleY(15));
Caption := 'Радиокнопка 2';
end;

But1 := TNewCheckBox.Create(WizardForm);
with But1 do
begin
Parent := Page.Surface;
SetBounds(ScaleX(20), ScaleY(80), ScaleX(100), ScaleY(15));
Caption := 'Кнопка 1';
end;

But1 := TNewCheckBox.Create(WizardForm);
with But1 do
begin
Parent := Page.Surface;
SetBounds(ScaleX(20), ScaleY(110), ScaleX(100), ScaleY(15));
Caption := 'Кнопка 2';
Checked := True;
end;

end;

P.S. Larkod, если игра официальная, то не будет.

saurn
23-11-2014, 23:00
тогда у меня пойдет, а у других людей будет писать World of Tanks не найден »
AppId игры будет одинаковым на любой машине.

-----------------------------------------------------------------------------------------------------------------
скрипт который создает дополнительную страницу с чебоксами и радиобутанами . »
Кастомная страница с кнопками »
Добавлю еще такой вариант:
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=...


[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Check: IsChecked( 0 );
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Check: IsChecked( 1 );
Source: compiler:Examples\Readme.txt; DestDir: {app}; Flags: isreadme; Check: IsChecked( 2 );


[Code]
var
TasksPage: TInputOptionWizardPage;


function IsChecked( const nIndex: Integer ): Boolean;
begin
Result := TasksPage.CheckListBox.Checked[nIndex];
end;


function CreateTasksPage( const nPageId: Integer ): TInputOptionWizardPage;
begin
TasksPage := CreateInputOptionPage( nPageId, 'Заголовок', 'Подзаголовок', 'Текст', False, False );

with TasksPage do
begin
Add( 'Задача 1' );
Add( 'Задача 2' );
Add( 'Задача 3' );

AddEx( 'Задача 4', 0, False );
AddEx( 'Радио 1', 1, True );
AddEx( 'Радио 2', 1, True );
end;

Result := TasksPage.ID;
end;


procedure InitializeWizard;
begin
CreateTasksPage( wpWelcome );
end;

Larkod
23-11-2014, 23:10
Dodakaedr, а нельзя сделать чтобы путь сам прописывался без окон всплывающих Укажите путь сам
saurn, может быть, но в данном коде писало бы так Танки не найдены

Painkiller
23-11-2014, 23:16
saurn , твой вариант я и искал . Вот только бы пример не помешал как привязать чебокс и радиобокс к действиям ???

Dodakaedr
23-11-2014, 23:17
saurn, А как изначально отмеченным сделать? Разобрался.
Larkod, удалите if not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1') then
MsgBox('Игра World_of_Tanks не найдена! Укажите путь к папке с игрой вручную!', mbinformation, mb_ok);

как привязать чебокс и радиобокс к действиям ??? »
Посмотрите на function IsChecked( const nIndex: Integer ): Boolean;
begin
Result := TasksPage.CheckListBox.Checked[nIndex];
end;

Painkiller
23-11-2014, 23:24
Dodakaedr ,saurn , все понял, сразу не заметил

Larkod
23-11-2014, 23:28
Есть еще предложения?

saurn
23-11-2014, 23:28
но в данном коде писало бы так Танки не найдены »
Если указан оригинальный AppId, то нет.
а нельзя сделать чтобы путь сам прописывался без окон всплывающих Укажите путь сам »
[code][Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={code:DefaultInstallDir}
OutputDir=...


[Code]
function DefaultInstallDir( const szResult: String ): String;
begin
RegQueryStringValue( HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1', 'InstallLocation', szResult );
if ( szResult <> '' ) then
Result := RemoveBackslash( szResult ) else Result := ExpandConstant( '{pf}\My Program' );
end;



-------------------------------------------------------------------------------
Вот только бы пример не помешал как привязать чебокс и радиобокс к действиям ??? »
Булевая функция IsChecked возвращает True, если отмечен чекбокс, номер которого указан во входной константе nIndex, нумерация идет с нуля:
Для секций вне кода:
Check: IsChecked( 0 );
Для секции :
if IsChecked( 0 ) then
...

---------------------------------------------------------------------
А как изначально отмеченным сделать? »

[code]with TasksPage do
begin
Add( 'Задача 1' );
Add( 'Задача 2' );
Add( 'Задача 3' );

AddEx( 'Задача 4', 0, False );
AddEx( 'Радио 1', 1, True );
AddEx( 'Радио 2', 1, True );

Values[2] := True; //отмечен контрол номер два
end;

Larkod
23-11-2014, 23:35
saurn, без изменений
вот мой скрипт https://docs.google.com/file/d/0B7YmBr5mYEh8UFliSzR0T2cyWHM/edit

saurn
23-11-2014, 23:40
без изменений »
Напортачил с функцией. Обновил пример постом выше, теперь будет работать, только ключ реестра укажите правильный.

Larkod
23-11-2014, 23:56
saurn, А это что такое? OutputDir=...

saurn
24-11-2014, 00:04
А это что такое? OutputDir=... »
Папка для скомпилированного инсталятора. Это вам не нужно. Ваш пример, все, что в секции и в секции [Setup] замените значение DefaultDirName на [code]DefaultDirName={code:DefaultInstallDir}

Larkod
24-11-2014, 00:09
saurn, теплее тока оно указывает на диск C:\Program Files (x86)\, а как сделать чтобы указывала на другой диск там где игра?

saurn
24-11-2014, 00:16
а как сделать чтобы указывала на другой диск там где игра? »
только ключ реестра укажите правильный. »
function DefaultInstallDir( const szResult: String ): String;
begin
// RegQueryStringValue( HKEY_LOCAL_MACHINE, 'Здесь ключ игры в реестре', 'Здесь строковый параметр, содержащий путь к папке с игрой', szResult );
{по типу - } RegQueryStringValue( HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1', 'InstallLocation', szResult );
if ( szResult <> '' ) then
Result := RemoveBackslash( szResult ) else Result := ExpandConstant( '{pf}\My Program' );
end;

Larkod
24-11-2014, 00:29
saurn, спасибо вроде получилось. Скажи еще вопрос есть он у меня указывает такой путь к игре F:\Games\World of Tanks вот а там когда моды лепить самому сделать, res_mods?Чтобы получилось
F:\Games\World of Tanks\res_mods\0.9.4 или и это прописать можено?

И еще вопрос. Как сделать так, чтобы установщик копировал папку audio из папки World Of Tanks/res в папку World Of Tanks/res_mods/0.9.4 ???

Nordek
24-11-2014, 01:04
Помогите пожалуйста с установщиком весь форум перелазил и прочитал многие разделы и перепробовал все. »#1264 (http://forum.oszone.net/post-2234320-1264.html), #1716 (http://forum.oszone.net/post-2272207-1716.html)

ахахххаах пишет World of Tanks не найден »ахахххаах сами бы попробовали хоть что нибудь сделать (Все такие умные, а сами сделать ничего не могут. Плиз, без сарказма.). Для начала (http://rghost.ru/users/Arsen19/releases/Russkaya-spravka-k-Inno-Setup).

а у других людей будет писать World of Tanks не найден »Вы смотрите внимательно расположение в реестре.
Сейчас установил World of Tanks, расположение деинсталляции было обнаружено в HKEY_CURRENT_USER, а не в HKEY_LOCAL_MACHINE.

Larkod
24-11-2014, 18:02
Nordek, будь добор кинь ключ реестара World of Tanks. Я у себя найти не могу. А uninstall Tool и Revo Uninstaller не видят World of Tanks

Larkod
24-11-2014, 18:28
Хорошо тогда еще вопрос. Как сделать, перед выбор папки куда устанавливать вверзу или внизу было написано "Пример: f:\Games\World of Tanks\res_mods\0.9.4". Спасибо за внимание

kotyarko@fb
24-11-2014, 19:17
ключ реестара World of Tanks. Я у себя найти не могу. »
RegQueryStringValue(HKLM, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1', 'InstallLocation', szResult);


Как сделать, перед выбор папки куда устанавливать вверзу или внизу было написано "Пример: f:\Games\World of Tanks\res_mods\0.9.4". »
[Code*]
Procedure InitializeWizard();
var
Primer: TLabel;
begin
Primer := TLabel.Create(WizardForm);
Primer.Parent := WizardForm.SelectDirPage;
Primer.SetBounds(WizardForm.DirEdit.Top + 20, 0, WizardForm.Width, 20);
Primer.Caption := 'Пример: f:\Games\World of Tanks\res_mods\0.9.4';
Primer.WordWrap := False;
end;

Larkod
24-11-2014, 20:03
kotyarko@fb, у меня почему то ключ не показывает просто пустая строка, наверно танки в реестре не прописано - очень странно. Кинул другу установщик тоже не работают работает пустое окно, где выбор папок должен быть. А запускаю моды от Джова находит путь все как надо
По поводу кода спасибо.

Хотя у себя вставил в реестр поиск {1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1 нашел
Еиньте пожалуйста код я лично пробую этот
[Code]
function DefaultInstallDir( const szResult: String ): String;
begin
// RegQueryStringValue( HKEY_LOCAL_MACHINE, 'Здесь ключ игры в реестре', 'Здесь строковый параметр, содержащий путь к папке с игрой', szResult );
{по типу - } RegQueryStringValue(HKLM, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1', 'InstallLocation', szResult);
if ( szResult <> '' ) then
Result := RemoveBackslash( szResult ) else Result := ExpandConstant( '' );
end;




© OSzone.net 2001-2012