Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]
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, если игра официальная, то не будет.
тогда у меня пойдет, а у других людей будет писать 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;
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 , все понял, сразу не заметил
но в данном коде писало бы так Танки не найдены »
Если указан оригинальный 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;
saurn, без изменений
вот мой скрипт https://docs.google.com/file/d/0B7YmBr5mYEh8UFliSzR0T2cyWHM/edit
без изменений »
Напортачил с функцией. Обновил пример постом выше, теперь будет работать, только ключ реестра укажите правильный.
saurn, А это что такое? OutputDir=...
А это что такое? OutputDir=... »
Папка для скомпилированного инсталятора. Это вам не нужно. Ваш пример, все, что в секции и в секции [Setup] замените значение DefaultDirName на [code]DefaultDirName={code:DefaultInstallDir}
saurn, теплее тока оно указывает на диск C:\Program Files (x86)\, а как сделать чтобы указывала на другой диск там где игра?
а как сделать чтобы указывала на другой диск там где игра? »
только ключ реестра укажите правильный. »
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;
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 ???
Помогите пожалуйста с установщиком весь форум перелазил и прочитал многие разделы и перепробовал все. »#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.
Nordek, будь добор кинь ключ реестара World of Tanks. Я у себя найти не могу. А uninstall Tool и Revo Uninstaller не видят World of Tanks
Хорошо тогда еще вопрос. Как сделать, перед выбор папки куда устанавливать вверзу или внизу было написано "Пример: 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;
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC