| Inno Setup Часто задаваемые вопросы |
Последнее обновление: 2004-03-15
Для того, чтобы перевести текст Inno Setup на другой язык, менять исходный код инсталятора не потребуется. Просто копируйте файл Default.isl (который находится в папке Inno Setup) и переведите на нужный язык текст в этом файле. (Не переводите оригинал Default.isl, т.к. эти изменения будут утеряны при установке новой версии Inno Setup). Для справки обратитесь к разделу "Секция [Messages]" файла помощи Inno Setup.
После создания нового .isl файла, в секции [Languages] надо указать компилятору, чтобы он начал его использовать:
[Languages]
Name: mytrans; MessagesFile: "compiler:MyTranslation.isl"При использовании версий старше 4.0 код будет следующим:
[Setup]
MessagesFile=compiler:MyTranslation.islСкачать готовые переводы можно на Inno Setup Third-Party Files, там же вы найдете программу, которая поможет отредактировать .isl файл.
Inno Setup 2.0.6 полностью поддерживает MBCS. Он выполняет проверку имени файла или константы и больше не выдает ошибку, если обнаружит следующие за ними бэкслеш ("\") или фигурную скобку ("{").
Версии до 2.0.6 не включают специальной поддержки MBCS.
На данный момент планов по выпуску Inno Setup с поддержкой Windows Installer нет. "Поддержка" Windows Installer, вероятно, приведет к полному переписыванию программы - на что нет ни времени, ни желания.
Иконку инсталятора можно поменять с помощью директивы SetupIconFile секции [Setup]. Для замены иконки деинсталятора используется директива UninstallIconFile.
В Inno Setup 4 добавлена эта возможность - она реализуется с помощью написания дополнительного скрипта на Pascal.
Внимание: в более ранних версиях Inno Setup можно только Установить различные файлы в зависимости от версии Windows.
Нет, и на момент написания FAQ планов по реализации этой возможности нет.
Нет и не будет. Если требуется свести к минимуму участие пользователя в установке, используйле директивы Disable* секции [Setup].
Да. Используйте константу {reg:...} в DefaultDirName. Например:
[Setup]
DefaultDirName={reg:HKLM\Software\My Program,Path|{pf}\My Program}
Для справки о константе {reg:...} обратитесь к разделу "Константы" файла помощи Inno Setup.
Обычно это сообщение выдается при попытке вставить символ кавычкек (") в данные параметра, но не сделали их двойными, как это положено. Прочитайте раздел "Параметры в секциях" файла помощи Inno Setup для справки.
Скорее всего ваше приложение не определяет путь к файлам, которые пытается открыть; оно ожидает найти их в заданной папке. По умолчанию Inno Setup не заполняет поле "Start In" для создаваемых им ярлыков; в этом случае Windows сама задает папку, которая чаще всего не является на самом деле папкой приложения.
В таких ситуациях следует исправить что-то в приложении. Правильно созданные GUI приложения не должны запускаться просто из заданной папки; все пути к запускаемым приложением файлам должны быть прописаны полностью. В Delphi или C++Builder, например, есть возможность получить полный путь к папке, содержащей ЕХЕ-файл приложения, вызовом: ExtractFilePath(ParamStr(0)). Для получения полного пути к файлу с именем "File.txt" папки приложения, используйте: ExtractFilePath(ParamStr(0)) + 'File.txt'.
Если по какой-либо причине исправить эту ошибку на уровне приложения не получается, можно задать Inno Setup заполнить поле "Start In", добавив "WorkingDir: {app}" в секцию [Icons].
Это сообщение отображается, когда файл, предназначенный для установки (т.е. setup.exe, setup.1) имеет неверный размер или часть файла имеет неверную контрольную сумму CRC check. В других случаях это сообщение не выдается.
Если файл-инсталятор вашего приложения распространяется через Internet и это сообщение об ошибке отображается несколько раз, возможно, что web-сервер разрывает связь прежде, чем файлы полностью успеют загрузиться. Предупредите пользователей, чтобы после загрузки они проверяли размер скачанных файлов.
Если файл-инсталятор приложения получен с CD-ROM'a или дискеты, причина может быть в испорченном носителе или некорректрой работе считывающего устройства.
Это происходит, если у версий приложения разный AppId, или, если AppId не указан, разные AppName. При этом инсталятор не знает, что имеет дело с двумя версиями одного приложения, поэтому создает новую запись в Установка и удаление программ панели управления. Кроме этого создается новый файл деинсталятора. Для того, чтобы этого не происходило, следует задавать двум инсталяторам одинаковые AppId или AppName.
Если необходимо изменить AppName для новой версии, задайте AppId то же значение, что и AppId или AppName предыдущей версии.
Это сообщение означает, что вы указали флаг "regserver" для файла, который не может быть зарегистрирован. Удалите флаг "regserver" у параметра в секции [Files], и сообщение перестанет отображаться.
Сцществует несколько причин, по которым папки не удаляются при удалении приложения:
- При установке приложения папки уже существовали. По умолчанию деинсталятор не удаляет папки, которые инсталятор не создавал.
- Папки содержат файлы или подпапки. Используйте [UninstallDelete], если хотите, чтобы деинсталятор удалял такие файлы/папки.
- При запуске папка используется как директория по умолчанию.
Внимание: В версиях Inno Setup, меньших 2.0.1, папки должны быть указаны в секциях [Dirs] или [UninstallDelete], чтобы деинсталятор смог их удалить. В более новых версиях Inno Setup папки, созданные в секции [Files], будут удалены деинсталятором автоматически, если они не существовали до начала установки.
Ответил Tim Rude:
Самый простой способ автоматически закрыть batch-файл при выходе - очистить экран с помощью команды CLS.--- batch file 1 ---
@echo off
echo Hello World
echo This batch file does NOT close on exit--- batch file 2 ---
@echo off
echo Hello World
echo This batch file DOES close on exit
cls
При старте инсталятор проверяет в реестре, устанавливалось ли приложение в системе ранее, и если так, то использует по умолчанию ту папку, в которую приложение по желанию пользователя было установлено раньше. Если вы удалите приложение и снова запустите инсталятор, он будет использовать новую DefaultDirName. Если нужно отменить эту опцию, задайте директиве UsePreviousAppDir значение "no".
Два файла не могут иметь одинаковые имена, а так как ярлыки являются файлами, они также не могут иметь совпадающих имен.
Во-первых, убедитесь, что вы не используете флаги "nowait" или "waituntilidle" для параметра секции [Run]. Эти флаги не позволяют инсталятору ждать завершения работы вызванных программ.
Если вы не используете эти флаги, а инсталятор все равно не дожидается завершения работы программы, то, возможно, вызываемый ЕХЕ-файл порождает другой процесс, а сам прекращает свою работу, и инсталятор думает, что программа завершила свою работу. Это происходит со старыми, основанными на InstallShield инсталяторами (для справки обратитесь к /SMS switch).
Проверить, совершает ли программа подобные действия, можно, запустив "START /WAIT ProgramName.exe" из командной строки, и посмотреть, вернетесь ли вы к командной строке раньше выхода из программы.
Начиная с Inno Setup 4.2.2, языки, заданные в секции [Languages], которые не поддерживаются текущей кодовой страницей Windows ANSI не отображаются в списке Выбор языка установки. Например, русский язык будет значиться в списке языков установки только в случае, когда используется кодовая страница 1251; если кодовая страница не 1251, русского языка в списке языков установки не будет.
В Windows XP текущая кодовая страница может быть изменена в разделе Язык и региональные стандарты Панели управления, секции Язык программ не поддерживающих Юникод вкладки Дополнительно. В Windows 2000 текущая кодовая страница может быть изменена в разделе Региональные стандарты Панели управления, где следует нажать кнопку Значения по умолчанию....
Если вы уверены, что инсталятор запущен при верно заданной кодовой странице, а язык все равно не значится в списке, скорее всего LanguageID в .isl-файле языка задан неверно.
Если вы хотите, чтобы все языки значились в списке независимо от возможности их корректного отображения при текущей кодовой странице, добавьте в скрипт следующую строку:
[LangOptions]
LanguageCodePage=0
Сначала создается файл с именем, например, "website.url", и в него записывается:
[InternetShortcut]
URL=http://web.site.address/В скрипт добавляется:
[Files]
Source: "website.url"; DestDir: "{app}"
[Icons]
Name: "{group}\Visit My Web Site"; Filename: "{app}\website.url"
В версиях начиная с Inno Setup 1.3.11:
[Icons]
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\My Program"; Filename: "{app}\MyProg.exe"
Используется параметр WorkingDir секции [Icons].
Сначала директиве "ChangesAssociations" секции [Setup] присваивается значение "yes". Затем задаются параметры секции [Registry], как показано ниже. Внимание: Ломаные линии означают, что далее следует продолжение той же строки -->
[Registry]
Root: HKCR; Subkey: ".myp"; ValueType: string; ValueName: ""; ValueData: "MyProgramFile"; Flags: uninsdeletevalue".myp" - расширение файла, с которым ассоциируется приложение. "MyProgramFile" - "внутреннее" имя типа файла, заданное в реестре. Убедитесь, что для этого вы используете уникальное имя, иначе можно нечаянно поменять ключи реестра других приложений.Root: HKCR; Subkey: "MyProgramFile"; ValueType: string; ValueName: ""; ValueData: "My Program File"; Flags: uninsdeletekey
"My Program File" - имя типа файла, отображаемое в Проводнике.Root: HKCR; Subkey: "MyProgramFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\MYPROG.EXE,0"
"DefaultIcon" - ключ реестра, указывающий имя файла иконки, который будет ассоциироваться с типом файла. ",0" указывает Проводнику использовать первую иконку из MYPROG.EXE. (",1" означает использование второй иконки).Root: HKCR; Subkey: "MyProgramFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\MYPROG.EXE"" ""%1"""
"shell\open\command" - ключ реестра, в котором указывается программа, которая должна будет запускаться при двойном щелчке в Проводнике на файле с указанным ранее расширением. Кавычки нужны для того, чтобы в командной строке длинные имена отображались правильно.
В Windows NT/2000/XP переменные среды зарезервированы в виде строковых значений в реестре, что дает возможность манипулировать ими с помощью секции [Registry]. Системные переменные среды находятся в:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\EnvironmentПользовательские переменные среды находятся в:
HKEY_CURRENT_USER\EnvironmentВ Windows 95/98/Me для задания переменных среды придется изменять AUTOEXEC.BAT. Inno Setup не имеет для этих целей встроенных функций, но вы можете написать маленькую программу модификации AUTOEXEC.BAT и затем запустить ее из секции [Run] (подробнее).
Inno Setup версий 1.3.15 и выше включает поддержку флагов "closeonexit" и "dontcloseonexit" для секции [Icons].
Inno Setup не имеет для этого специальных функций, но вы можете сделать копию файла перед его удалением с помощью параметров секции [Files]:
Source: "{app}\MyProg.exe"; DestDir: "{app}\backup"; Flags: external skipifsourcedoesntexist uninsneveruninstall
Реализуется с помощью директив MinVersion и/или OnlyBelowVersion. Для справки обратитесь к разделу Общие параметры файла справки Inno Setup.
Ниже приведен пример установки одного файла на платформу NT (Windows NT/2000/XP) и другого на не-NT платформу (Windows 95/98/Me):
[Files]
Source: "{app}\WinNT2000XP.exe"; DestDir: "{app}"; MinVersion: 0, 1
Source: "{app}\Win9598Me.exe"; DestDir: "{app}"; MinVersion: 1, 0"0" означает никогда не устанавливать; "1" означает устанавливать на любую версию (т.е. версию 1.0 и далее).
Внимание: Этот способ не применим к секции [Files]; MinVersion и OnlyBelowVersion используются в большинстве секций.
Начиная с Inno Setup 4.1.0, секции [Dirs], [Files], и [Registry] поддерживают параметры Permissions для задания разрешений для папок, файлов и ключей реестра соответственно.
Если требования более расширены, обратитесь к SetACL.
Обратитесь к статье How-To Implementing Custom Functionality.
Рекомендуется устанавливать файлы OCX так:
[Files]
Source: "ComCtl32.ocx"; DestDir: "{sys}"; CopyMode: alwaysskipifsameorolder; Flags: restartreplace sharedfile regserver
Обратитесь к this How-To article.
Обратитесь к this How-To article.
Если ваше приложение требует обновленную версию COMCTL32.DLL, можно указать пользователю скачать обновленный COMCTL32 с сайта Microsoft, или обновить COMCTL32 при установке приложения следующим образом:
[Files]
Source: "50comupd.exe"; DestDir: "{tmp}"
[Code]
function ShouldInstallComCtlUpdate: Boolean;
var
MS, LS: Cardinal;
begin
// Only install if the existing comctl32.dll is < 5.80
Result := False;
if GetVersionNumbers(ExpandConstant('{sys}\comctl32.dll'), MS, LS) then
if MS < $00050050 then
Result := True;
end;
[Run]
Filename: "{tmp}\50comupd.exe"; Parameters: "/r:n /q:1"; Check: ShouldInstallComCtlUpdateНе пытайтесь установить COMCTL32.DLL прямо из секции [Files]; Microsoft не поддерживает этого, кроме того это может привести к нежелательным последствиям.
Обратитесь к статье How-To Установка BDE для получения сведений об использовании 32-битной версии BDE, используемой в Inno Setup.
Обратитесь к этой статье How-To .
Поддерживаемые платформы: Windows 95, 98, 2000, XP, Me, и NT 4.0.
Автор использует для работы преимущественно Windows 2000, так что совместимость с Windows 2000 самая лучшая.
При появлении новых возможностей Inno Setup они тщательно тестируются автором на всех поддерживаемых платформах и версиях Windows.
16-битные версии Inno Setup не обновляются начиная с версии 1.3. Поддержка Windows NT 3.51 прекращена начиная с версии 3.0.
Типичная инсталяция Inno Setup для запуска не требует наличия у пользователя прав администратора или опытного пользователя. Тем не менее существуют исключения. Они описаны ниже.
В Windows NT/2000/XP требуются права администратора или опытного пользователя в следующих случаях:
- Если "AdminPrivilegesRequired=yes" в секции [Setup] скрипта. В этом случае инсталятор прервет установку и выдаст сообщение об ошибке, если текущий пользователь не наделен правами администратора. (По умолчанию "AdminPrivilegesRequired=no".)
- Используется флаг "restartreplace" секции [Files]. Этот флаг вынуждает Inno Setup вызвать функцию MoveFileEx, которая попытается сделать запись в "HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControlSet\ Control\ Session Manager". Запись в этот ключ разрешена только администратору.
- При записи в любой ключ из HKEY_USERS\.DEFAULT с помощью секции [Registry]. Запись в этот ключразрешена только администратору.
Что разрешается только пользователям, наделенным правами администратори или опытного пользователя в Windows 2000/XP:
- Использование флага "regserver" секции [Files]. В большинстве случаев регистрация DLL In most cases registering a DLL влечет за собой запись в HKEY_CLASSES_ROOT, что запрещено делать обычному пользователю.
- Использование флага "sharedfile" секции [Files]. Этот флаг вынуждает Inno Setup создать/обновить параметр в "HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows\ CurrentVersion\ SharedDLLs". Простые пользователи не могут делать записи в этом ключе.
- Использование параметра FontInstall секции [Files].
- Запись в любой из ключей HKEY_LOCAL_MACHINE или HKEY_CLASSES_ROOT с помощью секции [Registry]. Простые пользователи не могут делать записи в этих ключах.
Inno Setup сам посебе не может производить запись в директорию WINNT, или в ключи реестра, не упомянутые выше.
Что происходит, если установка запущена пользователем, не наделенным правами администратора?
- Ключ реестра для пункта Установка иудаление программ панели управления создается в HKEY_CURRENT_USER, а не в HKEY_LOCAL_MACHINE. Так что только пользователь, установивший программу, увидит запись в Установка и удаление программ.
- Константа "{group}" всегда указывает на профиль текущего пользователя, а не на профили всех пользователей.
- Все константы "{common...}" эквивалентны константам "{user...}".
- Программа может быть удалена любым пользователем. (Когда программу устанавливает администратор, удалить ее сможет только администратор).
Inno Setup не устанавливает ограничений на число файлов, ярлыков, параметров реестра и т.д., которые будут включены в установку. Впрочем, не следует забывать о том, что для каждого параметра, указанного в скрипте, требуется некоторое количество памяти. Например, примерно 120 байт памяти потребуется для каждого параметра секции [Files].
В Inno Setup 3.x и ранее инсталятор и отдельные файлы не могли превышать по размеру 2 GB. Это относится к Inno Setup 4.
При нажатии Cancel инсталятор отменяет изменения, сделанные им в ходе установки, почти как деинсталятор при удалении программы. Поэтому частично установленное приложение не останется в системе пользователя.