Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 9]
ErikPshat
31-07-2018, 12:48
nik1967, Классно, спасибо, отлично работает!!! Понятно, где я допустил ошибку в фигурных скобках.
Можно ещё развить тему?...
А теперь я пытаюсь распаковать архивы с мультивыбором GetOpenFileNameMulti.
Всё то же самое, в справке Inno Setup есть пример кода.
Но почему-то компилятор выдаёт ошибку "Unknown Identifier 'GetOpenFileNameMulti'".
Может есть рабочий пример аналогичного кода?
ErikPshat, скорее всего пользуешься расширенным компилятором. А GetOpenFileNameMulti прикрутили в поздних версиях инно. У меня в 5.5.9 уже не ругается. в справке Inno Setup »Эта справка для 5.6.1, на сколько я помню.
Ребята помогите пожалуйста, разобратся в скрите. Еле откопал в интернете вот этот скрипт:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultGroupName=My Program
DefaultDirName={pf}\My Program
DisableDirPage=yes
[Files]
Source: "D:\!ZBFlash\!АБУБоекомплект\InnoSetup\Projects\ABU\Core\Myprog1.exe"; DestDir: "C:\ABUTemp"
Source: "D:\!ZBFlash\!АБУБоекомплект\InnoSetup\Projects\ABU\Core\Myprog2.exe"; DestDir: "C:\ABUTemp"
[code]
var
MyOptionsPage: TInputOptionWizardPage;
procedure InitializeWizard;
begin
MyOptionsPage := CreateInputOptionPage(wpWelcome, 'Caption', 'Description',
'SubCaption', True, False);
MyOptionsPage.Add('install Myprog1');
MyOptionsPage.Add('install Myprog1');
MyOptionsPage.Values[0] := True;
end;
function ShouldInstallIcon: Boolean;
begin
Result := MyOptionsPage.Values[0];
end;
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
end;
и не могу понят куда и как написать, чтоб при соотвествуюшем выборе радио кнопки запускалась соотвествующий ехешник (Myprog1.exe или Myprog2.exe).
R.i.m.s.k.y.
31-07-2018, 14:21
zbz, читать в справке про секцию components
[Components]
Name: Myprog; Description: Myprog;
Name: Myprog\Myprog1; Description: Myprog1; Flags: exclusive
Name: Myprog\Myprog2; Description: Myprog2; Flags: exclusive
[Files]
Components: Myprog\Myprog1; Source: "D:\!ZBFlash\!АБУБоекомплект\InnoSetup\Projects\ABU\Core\Myprog1.exe"; DestDir: "C:\ABUTemp"
Components: Myprog\Myprog2; Source: "D:\!ZBFlash\!АБУБоекомплект\InnoSetup\Projects\ABU\Core\Myprog2.exe"; DestDir: "C:\ABUTemp"
Components: Myprog\Myprog1; Source: "D:\!ZBFlash\!АБУБоекомплект\InnoSetup\Projects\ABU\Core\Myprog1.exe"; DestDir: "C:\ABUTemp" Components: Myprog\Myprog2; Source: "D:\!ZBFlash\!АБУБоекомплект\InnoSetup\Projects\ABU\Core\Myprog2.exe"; DestDir: "C:\ABUTemp" »
она же только копирует ехешники, а мне надо чтоб ехешник запускалось (или я что то не понял?!)
ErikPshat
31-07-2018, 14:48
Да, ошибку выбивает китайский 5.5.1 ee2. Переключился на компилятор 5.6.1, проходит нормально. Но при условии, если я делаю через ExpandConstsnt:
MsgBox('Выбраны PKG: '+ExpandConstant('FileNameList'), mbInformation, MB_OK);
Позволяет выбрать множество файлов и парсит все выбранные файлы в одну строку, каждый в кавычках, как и должно быть. Но при попытке распаковать, MsgBox выводит необработанную строку:
Выбраны PKG: FileNameList
При нормальных условиях, без ExpandConstant, при компиляции выдаёт ошибку: Type mismatch.
Что-то не так снова в этой конструкции.
R.i.m.s.k.y.
31-07-2018, 14:59
zbz, а) в твоем скрипте я не увидел запуска
б) лучше не использовать модификации инно если можно использовать стандартные средства инно
убрать кусок
MyOptionsPage: TInputOptionWizardPage;
procedure InitializeWizard;
begin
MyOptionsPage := CreateInputOptionPage(wpWelcome, 'Caption', 'Description',
'SubCaption', True, False);
MyOptionsPage.Add('install Myprog1');
MyOptionsPage.Add('install Myprog1');
MyOptionsPage.Values[0] := True;
end;
function ShouldInstallIcon: Boolean;
begin
Result := MyOptionsPage.Values[0];
end;
в) про запуск читать про секцию Run
[Run]
Components: Myprog\Myprog1; Filename: "C:\ABUTemp\Myprog1.exe"; Description: "Myprog1.exe"; Flags: skipifsilent runhidden
Components: Myprog\Myprog2; Filename: "C:\ABUTemp\Myprog2.exe"; Description: "Myprog2.exe"; Flags: nowait skipifsilent
Это мой первый пост, я использовал или просматривал OSZONE в течение нескольких месяцев (помог мне много ... :) новичок здесь).
У меня вопрос о наложении Thumbail для панели задач ... в частности, показывается ход установки. Я добавил скриншот, чтобы уточнить.
https://imgur.com/a/duLH1r7
Im в настоящее время использует (wintb) .dll для наложения эскизов и работает нормально, но я хочу, чтобы он отображал дополнительную информацию, например. ход установки и оставшееся время.
Если это возможно? отправляем. любая помощь оценена. Спасибо!
im с использованием inno 5.6.1 (u) и последней улучшенной.
mubbii, почитай здесь (http://krinkels.org/threads/wintb.1952/).
Относительно недавно начал изучать конструкция написания скрипта для Inno Setup. И тут возникла проблема: На странице, где необходимо выбрать путь, куда будет устанавливаться программа, по умолчанию стоит путь, который прописан в DefaultDirName, к примеру это DefaultDirName={pf}. В том проблема, что если требуется изменить путь в ручную, то все к выставленному пути приписывается значение DefaultDirName, то есть я хочу установить путь на E:\Games, но выставляется в итоге E:\Games\Program Files , мне требуется, чтобы значение DefaultDirName не выставлялось при изменении пути.
В интернете искал как и на этом форуме, особо толку такого не нашёл. Помогите пожалуйста разобраться в данной проблеме.
ChopMan,
[Setup]: AppendDefaultDirName
Возможные значения:
yes или no
Значение по умолчанию:
yes
Описание:
По умолчанию при указании пути на странице Выбор папки назначения с помощью кнопки Обзор... (Browse...) инсталлятор автоматически добавляет в конце имя папки, указанной в директиве DefaultDirName, в которую будет установлена программа. Например, если DefaultDirName={pf}\My Program и пользователь выбрал в обзоре диск "Z:\", то программа установится в "Z:\My Program".
Если значение директивы no, то папка с указанным DefaultDirName именем в конечном каталоге создаваться не будет. На странице выбора появится кнопка "Создать папку" (Make New Folder).
El Sanchez
05-10-2018, 09:26
Можете обновить примеры для inno setup закрепления ярлыка на панели задач и в меню пуск? Те что есть не закрепляют на win10 pro.
function PinToTaskbar(const FileName: string; IsPin: Boolean): Boolean;
// FileName : full path to executable file
// IsPin : False - unpin from TaskBar, True - pin to TaskBar
var
ShellApp: Variant;
Verb: string;
begin
Result := False;
if not FileExists(FileName) then Exit;
try
if IsPin then
Verb := 'taskbarpin' else
Verb := 'taskbarunpin';
ShellApp := CreateOleObject('Shell.Application');
ShellApp.Windows.Item.Document.Application.NameSpace(ExtractFileDir(FileName)).ParseName(ExtractFile Name(FileName)).InvokeVerb(Verb);
Result := True;
except
ShowExceptionMessage;
end;
end;
function PinToStartMenu(const FileName: string; const IsPin: Boolean): Boolean;
// FileName : full path to exe- or lnk-file
// IsPin : False - unpin from StartMenu, True - pin to StartMenu
var
ShellApp, FolderItem: Variant;
Verb, LnkName: string;
begin
Result := False;
if not FileExists(FileName) then Exit;
try
ShellApp := CreateOleObject('Shell.Application');
FolderItem := ShellApp.Windows.Item.Document.Application.NameSpace(ExtractFileDir(FileName)).ParseName(ExtractFile Name(FileName));
if GetWindowsVersion < $06020000 then // below Windows 8
begin
if IsPin then
Verb := 'startpin' else
Verb := 'startunpin';
FolderItem.InvokeVerb(Verb);
Result := True;
end
else // Windows 8 and above
begin
if not FolderItem.IsLink then
begin
LnkName := FolderItem.ExtendedProperty('FileDescription');
if LnkName = '' then
LnkName := ExtractFileName(FileName);
LnkName := ExpandConstant('{commonprograms}\') + ChangeFileExt(LnkName, '.lnk');
if IsPin then
Result := not FileExists(LnkName) and
FileExists(CreateShellLink(LnkName, '', FileName, '', '', '', 0, SW_SHOWNORMAL))
else
Result := DeleteFile(LnkName);
end
else
begin
LnkName := ExpandConstant('{commonprograms}\') + ExtractFileName(FolderItem.Path);
if IsPin then
Result := not FileExists(LnkName) and
FileCopy(FolderItem.Path, LnkName, False)
else
Result := DeleteFile(LnkName);
end;
end;
except
ShowExceptionMessage;
end;
end;
ROMKA-1977
08-10-2018, 14:31
Здраствуйте. Помогите пож. разобратся с ярлыком деинсталятора в меню пуск.
Всегда указывал так:
[Icons]
Name: {group}\{cm:UninstallProgram,{#MyName}}; Filename: {uninstallexe}; Check: CheckError
Ярлык деинсталятора в меню пуск Win 7 отображался. Установив прогу в Win 10 ярлык деинсталятора не отображается. Заметил что такая же проблема и в инсталяторах других разработчиков.
Запустив установку в Win 10 в режиме совместимости с Win 7 всё нормально, рабочий ярлык на своём месте.
Прописал следующее:
[Icons]
Name: {group}\Деинсталлировать {#MyName}; Filename: {uninstallexe}; Check: CheckError
После этого всё норм, рабочий ярлык на своём месте.
В чем же проблема в первом случае ?
ErikPshat
08-10-2018, 19:32
{cm:UninstallProgram,{#MyName}}; »
Наверное лучше писать так: {cm:UninstallProgram} {#MyName};
ErikPshat
09-10-2018, 15:12
Ребята, нубский вопрос...
Как средствами Inno Setup создать новый пустой текстовой файл?
Я знаю только один хак создания через лист:
var
List: TStringList; txt: string; res: Integer;
begin
txt:= ExpandConstant('{tmp}\file.txt');
List:= TStringList.Create;
List.Add('Добавляем первую строку в файл');
List.SaveToFile(txt);
List.Free;
end;
Может быть можно просто написать эту строку отдельно, как самостоятельную:
SaveToFile(file.txt);
Но по-моему к этому должна предшествовать какая-та трансляция.
El Sanchez
09-10-2018, 15:50
Всегда указывал так:
[Icons]
Name: {group}\{cm:UninstallProgram,{#MyName}}; Filename: {uninstallexe}; Check: CheckError »
ROMKA-1977, если UninstallProgram вынесен во внешний файл, то проверьте его кодировку, должна быть UTF-8. Либо CheckError возвращает False на Win 10.
Наверное лучше писать так: »
ErikPshat, там все правильно написано, читайте справку.
Как средствами Inno Setup создать новый пустой текстовой файл? »
ErikPshat,
SaveStringToFile(ExpandConstant('{tmp}\file.txt'), '', False);
ErikPshat
09-10-2018, 16:09
El Sanchez, о да, спасибо, проверил работает.
Если указано False, тогда перезаписывает файл, а если указать True, тогда записывает строку в конец файла.
А я перелопатил в документации весь хэлп и почему-то пропустил эту команду. Оказывается она там есть )))
Спасибо ещё раз!
ErikPshat
09-10-2018, 18:47
Подскажите пожалуйста, как проверить наличие записи в INI-файле?
У меня в секцию [CONFIG] записывается ключ "InstallDirectory" с путём в параметре. И я делаю отдельную функцию на его считывание:
function InsDir(Default:String):String;
Begin
Result:= GetIniString('CONFIG','InstallDirectory','',ExpandConstant('{tmp}\config.ini'));
end;
А теперь мне нужно проверить, присутствует ли ключ с параметром. Если да, то я его считываю. Если нет, то я беру данные из другого ключа. Ну типа как-то так:
if (ExpandConstant('{code:InsDir}') > 0) then begin DIR:= ExpandConstant('{code:InsDir}') end else
if (ExpandConstant('{code:NewDir}') > 0) then begin DIR:= ExpandConstant('{code:NewDir}') end;
То есть, я не знаю с чем сравнивать. Правильно ли будет узнавать наличие ключа, потому что он больше нуля?
Мне нужно на переменную DIR назначить существующий ключ.
ROMKA-1977
09-10-2018, 20:47
{cm:UninstallProgram} {#MyName}; »
В данном вами примере инсталятор берёт полное название ярлыка из файла Russian.isl и получается в итоге - Деинсталлировать %1MyName
Может есть какойто метод оптимизации секции [Icons] не прибегая к подробному тексту - Name: {group}\Деинсталлировать {#MyName}; Filename: {uninstallexe}; Check: CheckError
Уточняю проблему - это только но win 10 и подобное не только у моих инсталяшек
ErikPshat
09-10-2018, 21:08
ROMKA-1977, вам выше совет дал El Sanchez, вы читали?
То есть, вы вписали ключ MyName в файл Russian.isl и теперь хотите вывести его в секции [Icons]?
А почему бы в шапке не написать через #define MyName "Моё Название" а потом выводить куда захочешь?
Или в секцию CustomMessage через en. и ru.
Кстати, нужно бы параметры в кавычки брать, а у вас без кавычек. Просто в Inno Setup иногда запятая всё решает.
Из меня правда плохой советчик, кто бы мне самому подсказал, но у меня в секции [Icons] всегда так:
[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyName}}"; Filename: "{uninstallexe}"; Check: "CheckError";
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.