У меня не работает скрипт "Верхняя часть как в NSIS.iss", постоянно пишет "Unknown identifier 'ShowAccelChar'"
» Inno Setup (создание инсталяционных пакетов)
serg_aka_lain
Спасибо!
По 1 пункту будет вылетать страничка подтверждения а она мне не нужна. И это решается тем, что параметр /silent нужно устанавливать, только тогда другой код получится.
По 2 пункту: если допустим определённые папки (их не одна) я хочу связать их с этой страничкой? Но основные файлы установятся в любом случае. А те, которые будут связаны с чекбоксами, только если выделены. Как это осуществить?
Спасибо!
По 1 пункту будет вылетать страничка подтверждения а она мне не нужна. И это решается тем, что параметр /silent нужно устанавливать, только тогда другой код получится.
По 2 пункту: если допустим определённые папки (их не одна) я хочу связать их с этой страничкой? Но основные файлы установятся в любом случае. А те, которые будут связаны с чекбоксами, только если выделены. Как это осуществить?
Aion13
Цитата:
Цитата:
[more]
[Setup]
AppName=My Program
AppVerName=My Program v1.2
DefaultDirName={pf}\My Program
OutputDir=.
[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; Check: Checked; Flags: ignoreversion;
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; DestName: "MyProg_new.exe"; Check: Checked2; Flags: ignoreversion;
[Code]
var
Page: TInputOptionWizardPage;
function Checked: Boolean;
begin
Result := Page.Values[0];
end;
function Checked2: Boolean;
begin
Result := Page.Values[1];
end;
function InitializeSetup(): Boolean;
var
UnStr: String;
ErrorCode: Integer;
begin
Result := True;
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1', 'UninstallString', UnStr) then
begin
If UnStr <> '' then
begin
UnStr := RemoveQuotes(UnStr);
Exec(UnStr, '/silent', '', SW_Show, ewNoWait, ErrorCode);
Result := False;
Exit;
end;
end;
end;
procedure InitializeWizard();
begin
Page := CreateInputOptionPage(wpSelectTasks,'New Page', 'New Page Description.', 'Please check the box below, then click Next.', False, False);
Page.Add('Check the box');
Page.Values[0] := False;
Page.Add('Check the box2');
Page.Values[1] := False;
end;
[/more]
Цитата:
параметр /silent нужно устанавливать
Цитата:
По 2 пункту: если допустим определённые папки (их не одна) я хочу связать их с этой страничкой? Но основные файлы установятся в любом случае. А те, которые будут связаны с чекбоксами, только если выделены. Как это осуществить?
[more]
[Setup]
AppName=My Program
AppVerName=My Program v1.2
DefaultDirName={pf}\My Program
OutputDir=.
[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; Check: Checked; Flags: ignoreversion;
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; DestName: "MyProg_new.exe"; Check: Checked2; Flags: ignoreversion;
[Code]
var
Page: TInputOptionWizardPage;
function Checked: Boolean;
begin
Result := Page.Values[0];
end;
function Checked2: Boolean;
begin
Result := Page.Values[1];
end;
function InitializeSetup(): Boolean;
var
UnStr: String;
ErrorCode: Integer;
begin
Result := True;
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1', 'UninstallString', UnStr) then
begin
If UnStr <> '' then
begin
UnStr := RemoveQuotes(UnStr);
Exec(UnStr, '/silent', '', SW_Show, ewNoWait, ErrorCode);
Result := False;
Exit;
end;
end;
end;
procedure InitializeWizard();
begin
Page := CreateInputOptionPage(wpSelectTasks,'New Page', 'New Page Description.', 'Please check the box below, then click Next.', False, False);
Page.Add('Check the box');
Page.Values[0] := False;
Page.Add('Check the box2');
Page.Values[1] := False;
end;
[/more]
Итак, решил проблему лучшим способ, на сколько смог.
Если кому нужен код, который определяет установленное приложение и даёт выбор, начать удаление или продолжить установку, то вот:
Код: [Setup]
; Определит имя раздела в реестре с информацией для удаления
AppID=My Program //Можно задать любое значение, например: {0872DB47-24CB-4C7F-AC4B-E6EFC27BD244}
[Code]
var
ResultStr:string;
msgres, ResultCode: integer;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1', 'DisplayName', ResultStr)
if ResultStr='My Program Name '
then
msgres:=MsgBox('"'+ ResultStr + '" уже установлена на Ваш компьютер.'+#10#10+'Для новой установки следует удалить предыдущую. Удалить её?', mbInformation, MB_YESNO);
case msgres of
IdYes: begin
// Проверка правильности ключа удаления
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1', 'UninstallString', ResultStr)
then
begin
if ResultStr<>''
then
begin
ResultStr:=RemoveQuotes(ResultStr);
Exec(ResultStr, '/silent', '', SW_SHOWNORMAL, ewWaitUntilIdle, ResultCode)
end else
// Если не были найдены файлы удаления, то выдаётся сообщение об ошибке
if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilIdle, ResultCode)
then
MsgBox('Ошибка удаления. ' #10#10 '' + SysErrorMessage(ResultCode) + '.' #10#10 'Вероятно, файл был перемещен, удален или переименован.', mbError, MB_OK);
end
end;
IdNo: Result:= False;
end;
if ResultStr<>''
then
Result := True;
end;
Если кому нужен код, который определяет установленное приложение и даёт выбор, начать удаление или продолжить установку, то вот:
Код: [Setup]
; Определит имя раздела в реестре с информацией для удаления
AppID=My Program //Можно задать любое значение, например: {0872DB47-24CB-4C7F-AC4B-E6EFC27BD244}
[Code]
var
ResultStr:string;
msgres, ResultCode: integer;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1', 'DisplayName', ResultStr)
if ResultStr='My Program Name '
then
msgres:=MsgBox('"'+ ResultStr + '" уже установлена на Ваш компьютер.'+#10#10+'Для новой установки следует удалить предыдущую. Удалить её?', mbInformation, MB_YESNO);
case msgres of
IdYes: begin
// Проверка правильности ключа удаления
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1', 'UninstallString', ResultStr)
then
begin
if ResultStr<>''
then
begin
ResultStr:=RemoveQuotes(ResultStr);
Exec(ResultStr, '/silent', '', SW_SHOWNORMAL, ewWaitUntilIdle, ResultCode)
end else
// Если не были найдены файлы удаления, то выдаётся сообщение об ошибке
if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilIdle, ResultCode)
then
MsgBox('Ошибка удаления. ' #10#10 '' + SysErrorMessage(ResultCode) + '.' #10#10 'Вероятно, файл был перемещен, удален или переименован.', mbError, MB_OK);
end
end;
IdNo: Result:= False;
end;
if ResultStr<>''
then
Result := True;
end;
Aion13
Ты уже определись, что тебе нужно.
Цитата:
теперь понадобилось через case... ?
Ты уже определись, что тебе нужно.
Цитата:
Как сделать обнаружение установки\удаления программы вот по такой схеме:
- запускаем инсталлятор в 1 раз --> идёт установка программы
- запускаем его 2 раз --> появляется окошко, о том чтобы удалить, но НЕ через команду MsgBox, а стандартное сообщение об удалении. На панели задач в это время висит ТОЛЬКО процесс удаления.
теперь понадобилось через case... ?
serg_aka_lain
Не, я просто код поинтереснее нашёл и всё. И единственное что мне не удалось реализовать в нём (см. выше), так это если добавить кнопку отмены в case, то чтобы она вообще отменяла установку. Ты сможешь этот недочёт исправить?
p.S Большое спасибо что помогаешь.
p.p.S Может кто-нибудь внесёт разобранное в справку? Я не настаиваю просто очень полезные вещи, а главное лучше предыдущих кодов, особенно с меседжами.
Добавлено:
serg_aka_lain
А как на это второй страничке сделать выбор пункта в пункте? Т.е. как выбрал пункт 2, открывается ещё пункты с выбором (или появляются, или с самого начала неактивны, т.е. их нельзя выбрать), ниже этого пункта и чуть правее. Лучше конечно, чтобы появлялись.
Не, я просто код поинтереснее нашёл и всё. И единственное что мне не удалось реализовать в нём (см. выше), так это если добавить кнопку отмены в case, то чтобы она вообще отменяла установку. Ты сможешь этот недочёт исправить?
p.S Большое спасибо что помогаешь.
p.p.S Может кто-нибудь внесёт разобранное в справку? Я не настаиваю просто очень полезные вещи, а главное лучше предыдущих кодов, особенно с меседжами.
Добавлено:
serg_aka_lain
А как на это второй страничке сделать выбор пункта в пункте? Т.е. как выбрал пункт 2, открывается ещё пункты с выбором (или появляются, или с самого начала неактивны, т.е. их нельзя выбрать), ниже этого пункта и чуть правее. Лучше конечно, чтобы появлялись.
У меня не работает скрипт "Верхняя часть как в NSIS.iss", постоянно пишет "Unknown identifier 'ShowAccelChar'"
Что делать? У меня 5.2.3.e4 (ISPP 5.2.3.0)
Что делать? У меня 5.2.3.e4 (ISPP 5.2.3.0)
Цитата:
Не, я просто код поинтереснее нашёл и всё. И единственное что мне не удалось реализовать в нём (см. выше), так это если добавить кнопку отмены в case, то чтобы она вообще отменяла установку. Ты сможешь этот недочёт исправить?
Предложу [more=Так]
function InitializeSetup(): Boolean;
var
UnStr: String;
ErrorCode, Mesages: Integer;
begin
Result := True;
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1', 'UninstallString', UnStr) then
begin
If UnStr <> '' then
begin
Mesages := MsgBox('My Program уже установлена на Ваш компьютер.'+#10#10+'Для новой установки следует удалить предыдущую. Удалить её?', mbInformation, MB_YESNOCANCEL);
case Mesages of
idYes:
begin
UnStr := RemoveQuotes(UnStr);
Exec(UnStr, '/silent', '', SW_Show, ewWaitUntilTerminated, ErrorCode);
Result := True;
end
idNo:
begin
Result := True;
end
idCancel:
begin
Result := False;
end;
end;
end;
end;
end;
[/more]
Цитата:
А как на это второй страничке сделать выбор пункта в пункте? Т.е. как выбрал пункт 2, открывается ещё пункты с выбором (или появляются, или с самого начала неактивны, т.е. их нельзя выбрать), ниже этого пункта и чуть правее. Лучше конечно, чтобы появлялись.
[more=Так]
[Code]
var
Page: TInputOptionWizardPage;
procedure InitializeWizard();
begin
Page := CreateInputOptionPage(wpSelectTasks,'New Page', 'New Page Description.', 'Please check the box below, then click Next.', False, False);
Page.Add('Check the box');
Page.Values[0] := False;
Page.Add('Check the box2');
Page.AddEx('Sub Check the box2', 1, True);
Page.Values[2] := True;
Page.AddEx('Sub 2 Check the box2', 1, True);
end;
[/more]
serg_aka_lain
Большое человеческое СПАСИБО тебе, Добрый Человек!
Очень мне помог, просто таки выручил. Радости нет предела!
И ещё: в коде на опрделение установки можно ли на несколько долей секунды задежать выполнение установки после удаления?
Большое человеческое СПАСИБО тебе, Добрый Человек!
Очень мне помог, просто таки выручил. Радости нет предела!
И ещё: в коде на опрделение установки можно ли на несколько долей секунды задежать выполнение установки после удаления?
Aion13
Цитата:
Sleep();
т.е.
Exec(UnStr, '/silent', '', SW_Show, ewWaitUntilTerminated, ErrorCode);
Result := True;
Sleep(2000);
end
Цитата:
И ещё: в коде на опрделение установки можно ли на несколько долей секунды задежать выполнение установки после удаления?
Sleep();
т.е.
Exec(UnStr, '/silent', '', SW_Show, ewWaitUntilTerminated, ErrorCode);
Result := True;
Sleep(2000);
end
Можно ли установить для создаваемого ярлыка (запускаемая программа консольная типа FAR) следующие параметры : тип и размер шрифта, размеры окна и буфера экрана (ширина и высота) ?
2ALL
Помогите разобраться с нижеследующим кодом.
Здесь представлено создание 2 страницы доп задач с привязкой к папкам.
Как мне сделать так, чтобы, например "Подпапку 1" НЕЛЬЗЯ было выбрать, пока не выбран пункт "Основные папки" (они должны будут быть выделены серым в таком случае)
Код: [Code]
// Создание страницы с чекбоксами
var
Page: TInputOptionWizardPage;
[Files]
Source: подпапка 1\*; DestDir: "{app}\cstrike"; Check: SubChecked1; Flags: ignoreversion recursesubdirs createallsubdirs;
Source: подпапка 2\*; DestDir: "{app}\cstrike"; Check: SubChecked2; Flags: ignoreversion recursesubdirs createallsubdirs;
// Привязка папок из секции [Files] к чекбоксам страницы CreateInputOptionPage
function SubChecked1: Boolean;
begin
Result := Page.Values[1];
end;
function SubChecked2: Boolean;
begin
Result := Page.Values[3];
end;
// Страница чекбоксов с выбором папок
procedure InitializeWizard();
begin
Page := CreateInputOptionPage(wpSelectTasks,
'Выбор дополнительных карт', 'Какие карты Вы желаете установить?',
'Выберете карты, которые Вы хотите дополнительно установить на сервер', False, False);
Page.Add('Основные паки');
Page.AddEx('Подпапка 1', 1, False);
Page.Values[1] := True;
Page.Add('Другие папки');
Page.AddEx('Подпапка 2', 1, False);
Page.Values[3] := True;
end;
Помогите разобраться с нижеследующим кодом.
Здесь представлено создание 2 страницы доп задач с привязкой к папкам.
Как мне сделать так, чтобы, например "Подпапку 1" НЕЛЬЗЯ было выбрать, пока не выбран пункт "Основные папки" (они должны будут быть выделены серым в таком случае)
Код: [Code]
// Создание страницы с чекбоксами
var
Page: TInputOptionWizardPage;
[Files]
Source: подпапка 1\*; DestDir: "{app}\cstrike"; Check: SubChecked1; Flags: ignoreversion recursesubdirs createallsubdirs;
Source: подпапка 2\*; DestDir: "{app}\cstrike"; Check: SubChecked2; Flags: ignoreversion recursesubdirs createallsubdirs;
// Привязка папок из секции [Files] к чекбоксам страницы CreateInputOptionPage
function SubChecked1: Boolean;
begin
Result := Page.Values[1];
end;
function SubChecked2: Boolean;
begin
Result := Page.Values[3];
end;
// Страница чекбоксов с выбором папок
procedure InitializeWizard();
begin
Page := CreateInputOptionPage(wpSelectTasks,
'Выбор дополнительных карт', 'Какие карты Вы желаете установить?',
'Выберете карты, которые Вы хотите дополнительно установить на сервер', False, False);
Page.Add('Основные паки');
Page.AddEx('Подпапка 1', 1, False);
Page.Values[1] := True;
Page.Add('Другие папки');
Page.AddEx('Подпапка 2', 1, False);
Page.Values[3] := True;
end;
Большая просьба к специалистам -- пожалуйста, помогите мне решить вопросы, сформулированные мною на 94 странице. Без этого я и к новому году не реализую задуманное. Буду рад Вашей помощи!
Здравствуйте, помогите пожалуйста исправить [more=код][Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
[Files]
Source: ReadMe1.rtf; Flags: dontcopy
Source: ReadMe2.rtf; Flags: dontcopy
Source: ReadMe3.rtf; Flags: dontcopy
[_Code]
var
Page: TWizardPage;
ListBox: TNewCheckListBox;
Memo: TRichEditViewer;
CheckLabel: TLabel;
MouseY: integer;
procedure CheckOnClick (Sender: TObject);
begin
if MouseY < ListBox.Items.Count then
ListBox.Checked[MouseY]:= Not(ListBox.Checked[MouseY]);
end;
procedure CheckMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
MouseY:= Y/ScaleY(16);
if MouseY < ListBox.Items.Count then
Memo.RTFText:= TStrings(ListBox.ItemObject[MouseY]).Text;
end;
Procedure InitializeWizard();
begin
ExtractTemporaryFile('ReadMe1.rtf');
ExtractTemporaryFile('ReadMe2.rtf');
ExtractTemporaryFile('ReadMe3.rtf');
Page:=CreateCustomPage(3, 'Интерфейс', 'Выберите компоненты, которые вы хотите установить.')
ListBox:= TNewCheckListBox.Create(Page);
with ListBox do
begin
Left := 15
Top := 0
Width := 200
Height := 149
Parent := Page.Surface
AddCheckBox('aaa', 'ddd', 0, True, True, False, True, TStringList.Create); // здесь ругается
AddCheckBox('bbb', 'eee', 0, True, True, False, True, TStringList.Create); // здесь ругается
AddCheckBox('ccc', 'fff', 0, True, True, False, True, TStringList.Create); // здесь ругается
TStrings(ItemObject[0]).LoadFromFile(ExpandConstant('{tmp}\ReadMe1.rtf'));
TStrings(ItemObject[1]).LoadFromFile(ExpandConstant('{tmp}\ReadMe2.rtf'));
TStrings(ItemObject[2]).LoadFromFile(ExpandConstant('{tmp}\ReadMe3.rtf'));
end;
Memo:= TRichEditViewer.Create(Page);
with Memo do
begin
Left := ListBox.Left + ListBox.Width + 8;
Top := ListBox.Top;
Width := ListBox.Width
Height := ListBox.Height
Color := clBtnFace
Enabled := False
BorderStyle := bsNone
Parent := Page.Surface
end;
CheckLabel:= TLabel.Create(Page);
with CheckLabel do
begin
Width :=ListBox.Width
Height :=ListBox.Height
Autosize :=False
Transparent :=True
OnMouseMove :=@CheckMouseMove
OnClick :=@CheckOnClick
Parent :=ListBox
end;
end;[/more], а то при компиляции ругается на недействительное значение параметра...
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
[Files]
Source: ReadMe1.rtf; Flags: dontcopy
Source: ReadMe2.rtf; Flags: dontcopy
Source: ReadMe3.rtf; Flags: dontcopy
[_Code]
var
Page: TWizardPage;
ListBox: TNewCheckListBox;
Memo: TRichEditViewer;
CheckLabel: TLabel;
MouseY: integer;
procedure CheckOnClick (Sender: TObject);
begin
if MouseY < ListBox.Items.Count then
ListBox.Checked[MouseY]:= Not(ListBox.Checked[MouseY]);
end;
procedure CheckMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
MouseY:= Y/ScaleY(16);
if MouseY < ListBox.Items.Count then
Memo.RTFText:= TStrings(ListBox.ItemObject[MouseY]).Text;
end;
Procedure InitializeWizard();
begin
ExtractTemporaryFile('ReadMe1.rtf');
ExtractTemporaryFile('ReadMe2.rtf');
ExtractTemporaryFile('ReadMe3.rtf');
Page:=CreateCustomPage(3, 'Интерфейс', 'Выберите компоненты, которые вы хотите установить.')
ListBox:= TNewCheckListBox.Create(Page);
with ListBox do
begin
Left := 15
Top := 0
Width := 200
Height := 149
Parent := Page.Surface
AddCheckBox('aaa', 'ddd', 0, True, True, False, True, TStringList.Create); // здесь ругается
AddCheckBox('bbb', 'eee', 0, True, True, False, True, TStringList.Create); // здесь ругается
AddCheckBox('ccc', 'fff', 0, True, True, False, True, TStringList.Create); // здесь ругается
TStrings(ItemObject[0]).LoadFromFile(ExpandConstant('{tmp}\ReadMe1.rtf'));
TStrings(ItemObject[1]).LoadFromFile(ExpandConstant('{tmp}\ReadMe2.rtf'));
TStrings(ItemObject[2]).LoadFromFile(ExpandConstant('{tmp}\ReadMe3.rtf'));
end;
Memo:= TRichEditViewer.Create(Page);
with Memo do
begin
Left := ListBox.Left + ListBox.Width + 8;
Top := ListBox.Top;
Width := ListBox.Width
Height := ListBox.Height
Color := clBtnFace
Enabled := False
BorderStyle := bsNone
Parent := Page.Surface
end;
CheckLabel:= TLabel.Create(Page);
with CheckLabel do
begin
Width :=ListBox.Width
Height :=ListBox.Height
Autosize :=False
Transparent :=True
OnMouseMove :=@CheckMouseMove
OnClick :=@CheckOnClick
Parent :=ListBox
end;
end;[/more], а то при компиляции ругается на недействительное значение параметра...
Serega0675
У меня твой код спокойно скомпилялся (правда пришлось закоментить раздел Files и строки распаковки и загрузки *.rtf) и запустился.
У меня твой код спокойно скомпилялся (правда пришлось закоментить раздел Files и строки распаковки и загрузки *.rtf) и запустился.
Извеняюсь за беспокойство, проблема решилась и очень просто
SotM
Цитата:
Да интересная штука... Использую ispack-5.2.3.exe с препроцессором, обновленный Inno Setup до расширенной версии от ResTools и думал всё нормально, а именно при таком наборе и выдаёт ошибку. Нашёл в каталоге программ старого компьютера обычный Inno Setup и действительно всё скомпилировалось без проблем...
Цитата:
У меня твой код спокойно скомпилялся (правда пришлось закоментить раздел Files и строки распаковки и загрузки *.rtf) и запустился.Спасибо.
Да интересная штука... Использую ispack-5.2.3.exe с препроцессором, обновленный Inno Setup до расширенной версии от ResTools и думал всё нормально, а именно при таком наборе и выдаёт ошибку. Нашёл в каталоге программ старого компьютера обычный Inno Setup и действительно всё скомпилировалось без проблем...
Такой вопрос.
Создаётся апдейтер для программы.
Основной инсталлятор проги пишет в реестр нужные данные.
Апдейтер же проверяет их наличие в реестре и при этом обновляет только те компоненты, что установлены.
Т.е. грубо говоря имеется параметр в реестре. Если у него в значении к примеру единичка - компонент ставится. Если 0 - соответственно нет.
Вопрос традиционно упёрся в реализацию.
Выдернуть параметр из реестра можно с помощью {reg:параметр}, а вот как заставить делать проверку.
Создаётся апдейтер для программы.
Основной инсталлятор проги пишет в реестр нужные данные.
Апдейтер же проверяет их наличие в реестре и при этом обновляет только те компоненты, что установлены.
Т.е. грубо говоря имеется параметр в реестре. Если у него в значении к примеру единичка - компонент ставится. Если 0 - соответственно нет.
Вопрос традиционно упёрся в реализацию.
Выдернуть параметр из реестра можно с помощью {reg:параметр}, а вот как заставить делать проверку.
Serega0675
Цитата:
Ну дык, у него ведь, насколько я знаю, другое количество параметров передаваемых в функции AddCheckBox...
LordVeider
Ты бы привел пример скрипта. В хелпе написано:
RegGetSubkeyNames
RegGetValueNames
ну и т.д.
Думаю не трудно будет найти то, что нужно. К тому же, здесь время от времени это повторяется. Поиск по форуму тебе в помощь.
Цитата:
обновленный Inno Setup до расширенной версии от ResTools
Ну дык, у него ведь, насколько я знаю, другое количество параметров передаваемых в функции AddCheckBox...
LordVeider
Ты бы привел пример скрипта. В хелпе написано:
RegGetSubkeyNames
RegGetValueNames
ну и т.д.
Думаю не трудно будет найти то, что нужно. К тому же, здесь время от времени это повторяется. Поиск по форуму тебе в помощь.
SotM
Цитата:
Цитата:
Ну дык, у него ведь, насколько я знаю, другое количество параметров передаваемых в функции AddCheckBox...Я не силён в программировании и не знал об этом...
SotM
Гхм. Спасибо. Будем разбираться с пасквилем...
Ещё одна задача:
При выборе нужного компонента к нужному ярлыку будет добавляться нужный параметр.
Пример: есть компонент isolatedmode, если его выбрать при установке - к параметрам ярлыка программы допишется /isolated.
Таких компонентов планируется несколько, при выборе каждого к параметрам опять же будет дописываться соответствующий компоненту параметр. Поэтому вариант "тупо создать 2 варианта ярлыков" тут не катит.
Понятно что без пасквиля и тут не обойтись, но опять не понятно в какую сторону копать.
Добавлено:
Вот кстати реализация первой задачи.
Цитата:
В основной инсталлятор:
Код: [Components]
Name: component_name; Description: component_description; Types: full compact custom
[Registry]
Root: HKLM; Subkey: Software\program_name; ValueName: component_reg_name; ValueType: String; ValueData: 1; Components: component_name
Гхм. Спасибо. Будем разбираться с пасквилем...
Ещё одна задача:
При выборе нужного компонента к нужному ярлыку будет добавляться нужный параметр.
Пример: есть компонент isolatedmode, если его выбрать при установке - к параметрам ярлыка программы допишется /isolated.
Таких компонентов планируется несколько, при выборе каждого к параметрам опять же будет дописываться соответствующий компоненту параметр. Поэтому вариант "тупо создать 2 варианта ярлыков" тут не катит.
Понятно что без пасквиля и тут не обойтись, но опять не понятно в какую сторону копать.
Добавлено:
Вот кстати реализация первой задачи.
Цитата:
Создаётся апдейтер для программы.Может кому пригодится.
Основной инсталлятор проги пишет в реестр нужные данные.
Апдейтер же проверяет их наличие в реестре и при этом обновляет только те компоненты, что установлены.
Т.е. грубо говоря имеется параметр в реестре. Если у него в значении к примеру единичка - компонент ставится. Если 0 - соответственно нет.
В основной инсталлятор:
Код: [Components]
Name: component_name; Description: component_description; Types: full compact custom
[Registry]
Root: HKLM; Subkey: Software\program_name; ValueName: component_reg_name; ValueType: String; ValueData: 1; Components: component_name
Использую такой [more=код][Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
[Tasks]
Name: alluser; Description: Создать иконку для всех пользователей; GroupDescription: {cm:AdditionalIcons}; Flags: exclusive
Name: user; Description: Создать иконку только для данного пользователя; GroupDescription: {cm:AdditionalIcons}; Flags: exclusive unchecked
[Dirs]
Name: {commonprograms}\My Program; Attribs: readonly; Tasks: alluser
Name: {userprograms}\My Program; Attribs: readonly; Tasks: user
[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}
[INI]
Filename: {commonprograms}\My Program\Desktop.ini; Section: .ShellClassInfo; Key: IconFile; String: {app}\MyProg.exe; Tasks: alluser
Filename: {commonprograms}\My Program\Desktop.ini; Section: .ShellClassInfo; Key: IconIndex; String: 0; Tasks: alluser
Filename: {userprograms}\My Program\Desktop.ini; Section: .ShellClassInfo; Key: IconFile; String: {app}\MyProg.exe; Tasks: user
Filename: {userprograms}\My Program\Desktop.ini; Section: .ShellClassInfo; Key: IconIndex; String: 0; Tasks: user
[UninstallDelete]
Type: files; Name: {commonprograms}\My Program\Desktop.ini; Tasks: alluser
Type: files; Name: {userprograms}\My Program\Desktop.ini; Tasks: user
[Icons]
Name: {commonprograms}\My Program\My Program; Filename: {app}\MyProg.exe; WorkingDir: {app}; Tasks: alluser
Name: {userprograms}\My Program\My Program; Filename: {app}\MyProg.exe; WorkingDir: {app}; Tasks: user
[_Code]
var
ErrorCode: Integer;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
Exec('attrib', ' +h +s ' + '"' + ExpandConstant('{commonprograms}\My Program\Desktop.ini') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
end;
end;
[/more], вопрос: как на файл поставить Attribs: hidden system, в зависимости от выбора расположения ярлыка? Понимаю, что нужно скорей всего использовать функцию IsTaskSelected, но каким образом не могу разобраться... Может, кто-нибудь поможет?
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
[Tasks]
Name: alluser; Description: Создать иконку для всех пользователей; GroupDescription: {cm:AdditionalIcons}; Flags: exclusive
Name: user; Description: Создать иконку только для данного пользователя; GroupDescription: {cm:AdditionalIcons}; Flags: exclusive unchecked
[Dirs]
Name: {commonprograms}\My Program; Attribs: readonly; Tasks: alluser
Name: {userprograms}\My Program; Attribs: readonly; Tasks: user
[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}
[INI]
Filename: {commonprograms}\My Program\Desktop.ini; Section: .ShellClassInfo; Key: IconFile; String: {app}\MyProg.exe; Tasks: alluser
Filename: {commonprograms}\My Program\Desktop.ini; Section: .ShellClassInfo; Key: IconIndex; String: 0; Tasks: alluser
Filename: {userprograms}\My Program\Desktop.ini; Section: .ShellClassInfo; Key: IconFile; String: {app}\MyProg.exe; Tasks: user
Filename: {userprograms}\My Program\Desktop.ini; Section: .ShellClassInfo; Key: IconIndex; String: 0; Tasks: user
[UninstallDelete]
Type: files; Name: {commonprograms}\My Program\Desktop.ini; Tasks: alluser
Type: files; Name: {userprograms}\My Program\Desktop.ini; Tasks: user
[Icons]
Name: {commonprograms}\My Program\My Program; Filename: {app}\MyProg.exe; WorkingDir: {app}; Tasks: alluser
Name: {userprograms}\My Program\My Program; Filename: {app}\MyProg.exe; WorkingDir: {app}; Tasks: user
[_Code]
var
ErrorCode: Integer;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
Exec('attrib', ' +h +s ' + '"' + ExpandConstant('{commonprograms}\My Program\Desktop.ini') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
end;
end;
[/more], вопрос: как на файл поставить Attribs: hidden system, в зависимости от выбора расположения ярлыка? Понимаю, что нужно скорей всего использовать функцию IsTaskSelected, но каким образом не могу разобраться... Может, кто-нибудь поможет?
Может кто-нибудь поможет решить проблемку!!!!
Инстал почти готов, осталась только вот она:
http://forum.ru-board.com/topic.cgi?forum=5&topic=27438&start=1900#4
Инстал почти готов, осталась только вот она:
http://forum.ru-board.com/topic.cgi?forum=5&topic=27438&start=1900#4
Цитата:
Victor_Dobrov
Вот так я представляю примерно страницу лицензии (извените что так долго, просто руки ни как до photoshop не доходили)
http://pic.ipicture.ru/uploads/081216/TQSzQzMnqQ.jpg
Genri -- очень нуждаюсь в Вашей помощи. На странице 94 я задал два, конструктивных, на мой взгляд, вопроса. Поиск по форуму ничего не дал. Постараюсь еще детальнее описать суть проблемы. В моем инсталляторе путь установки считывается по ключу системного реестра, а страница выбора директории установки отключена. В чем проблема? Необходимо реализовать следующее, при условии, что ключ системного реестра (отражающий путь установки) не обнаружен: 1) организовать проверку (по имени и md5) наличие определенного файла рядом с исполнительным файлом инсталлятора, и если этот файл найден, то происходит распаковка инсталла "тут же"; 2) если данный файл не найден, то должно появляться диалоговое окно выбора каталога установки, и при нажати "OK" происходит распаковка файлов (в указанную папку). Буду благодарен за Ваши рекомендации. Если, конечно в Inno Setup можно реализовать эти действия.
Есть ли у каго исходники демки
http://forum.ru-board.com/topic.cgi?forum=5&topic=27438&start=1360#17 [?]
и скрипт для распаковки архивов FreeArc с отображением в прогрессбаре.
http://forum.ru-board.com/topic.cgi?forum=5&topic=27438&start=1360#17 [?]
и скрипт для распаковки архивов FreeArc с отображением в прогрессбаре.
Можно ли вставить в любое окно инсталлятора изображение не .bmp а .png
Нужно это затем, что формат .png поддерживает прозрачность – вот она собственно и интересует. Есть код для вставки [more=.bmp][Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[Files]
Source: compiler:WizModernSmallImage.bmp; Flags: dontcopy
[_Code]
procedure InitializeWizard();
var
BitmapImage: TBitmapImage;
BitmapFileName: String;
begin
BitmapFileName := ExpandConstant('{tmp}\WizModernSmallImage.bmp');
ExtractTemporaryFile(ExtractFileName(BitmapFileName));
BitmapImage := TBitmapImage.Create(WizardForm);
BitmapImage.Top := WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + ScaleY(8);
BitmapImage.Left := WizardForm.DirEdit.Left;
BitmapImage.AutoSize := True;
BitmapImage.Bitmap.LoadFromFile(BitmapFileName);
BitmapImage.Parent := WizardForm.SelectDirPage;
WizardForm.TasksList.Width := ScaleX(290);
end;[/more] и [more=.png но Splash][Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[Files]
Source: arrowright.png; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
[_Code]
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';
procedure InitializeWizard;
begin
WizardForm.Position:=poScreenCenter;
ExtractTemporaryFile('arrowright.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\arrowright.png',1000,3000,1000,0,255,False,$FFFFFF,10);
end;[/more], взял из GameScript Generator – может как то поможет (это все, что нашел), может уже есть готовое решение этого. Не оставьте без внимания!
Просмотрел все четыре части форума по Инно, но толи тему эту не поднимали, то ли читал (искал) не внимательно. Но факт остается фактом.
Нужно это затем, что формат .png поддерживает прозрачность – вот она собственно и интересует. Есть код для вставки [more=.bmp][Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[Files]
Source: compiler:WizModernSmallImage.bmp; Flags: dontcopy
[_Code]
procedure InitializeWizard();
var
BitmapImage: TBitmapImage;
BitmapFileName: String;
begin
BitmapFileName := ExpandConstant('{tmp}\WizModernSmallImage.bmp');
ExtractTemporaryFile(ExtractFileName(BitmapFileName));
BitmapImage := TBitmapImage.Create(WizardForm);
BitmapImage.Top := WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + ScaleY(8);
BitmapImage.Left := WizardForm.DirEdit.Left;
BitmapImage.AutoSize := True;
BitmapImage.Bitmap.LoadFromFile(BitmapFileName);
BitmapImage.Parent := WizardForm.SelectDirPage;
WizardForm.TasksList.Width := ScaleX(290);
end;[/more] и [more=.png но Splash][Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[Files]
Source: arrowright.png; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
[_Code]
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';
procedure InitializeWizard;
begin
WizardForm.Position:=poScreenCenter;
ExtractTemporaryFile('arrowright.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\arrowright.png',1000,3000,1000,0,255,False,$FFFFFF,10);
end;[/more], взял из GameScript Generator – может как то поможет (это все, что нашел), может уже есть готовое решение этого. Не оставьте без внимания!
Просмотрел все четыре части форума по Инно, но толи тему эту не поднимали, то ли читал (искал) не внимательно. Но факт остается фактом.
Может найдётся добрый человек и ответить вот на это: http://forum.ru-board.com/topic.cgi?forum=5&topic=27438&start=1900#4
Вторую задачу кто решить поможет ?
Добавлено:
И такое ещё.
Нужно список компонентов сделать таким:
Уже спрашивали, да.
Единственный предложенный вариант - китайский мод для IS.
Качал, смотрел, не разобрался =(
Добавлено:
И такое ещё.
Нужно список компонентов сделать таким:
Уже спрашивали, да.
Единственный предложенный вариант - китайский мод для IS.
Качал, смотрел, не разобрался =(
Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
Предыдущая тема: Презентация
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.