Inno Setup
Часто задаваемые вопросы

Последнее обновление: 2004-03-15

Выполняемые функции

Проблемы

Задания для установки

Как установить...?

Совместимость

Разное


Выполняемые функции

Перевод текста Inno Setup

Для того, чтобы перевести текст 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 файл.

Поддерживается ли MBCS (multi-byte character sets - многобайтовые наборы символов)?

Inno Setup 2.0.6 полностью поддерживает MBCS. Он выполняет проверку имени файла или константы и больше не выдает ошибку, если обнаружит следующие за ними бэкслеш ("\") или фигурную скобку ("{").

Версии до 2.0.6 не включают специальной поддержки MBCS.

Будет ли в будущем поддерживаться Windows Installer?

На данный момент планов по выпуску Inno Setup с поддержкой Windows Installer нет. "Поддержка" Windows Installer, вероятно, приведет к полному переписыванию программы - на что нет ни времени, ни желания.

Как изменить иконку Setup.exe?

Иконку инсталятора можно поменять с помощью директивы SetupIconFile секции [Setup]. Для замены иконки деинсталятора используется директива UninstallIconFile.

Можно ли в Inno Setup задать установку с условием - например, чтобы установка начиналась только если в реестре присутствует некоторый ключ или определенный файл уже имеется?

В Inno Setup 4 добавлена эта возможность - она реализуется с помощью написания дополнительного скрипта на Pascal.

Внимание: в более ранних версиях Inno Setup можно только Установить различные файлы в зависимости от версии Windows.

Можно ли создать "установку через web" ("web install")?

Нет, и на момент написания FAQ планов по реализации этой возможности нет.

Возможна ли быстрая и очень быстрая установка без использования параметров командной строки /SILENT или /VERYSILENT?

Нет и не будет. Если требуется свести к минимуму участие пользователя в установке, используйле директивы Disable* секции [Setup].

Может ли инсталятор использовать значение, взятое из реестра, в качестве имени папки по умолчанию?

Да. Используйте константу {reg:...} в DefaultDirName. Например:

[Setup]
DefaultDirName={reg:HKLM\Software\My Program,Path|{pf}\My Program}

Для справки о константе {reg:...} обратитесь к разделу "Константы" файла помощи Inno Setup.


Проблемы

Компилятор выдает сообщение: "Mismatched or misplaced quotes on parameter" ("Лишние кавычки у параметра").

Обычно это сообщение выдается при попытке вставить символ кавычкек (") в данные параметра, но не сделали их двойными, как это положено. Прочитайте раздел "Параметры в секциях" файла помощи 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].

Почему на некоторых системах появляется сообщение об ошибке "The setup files are corrupted" ("Файлы инсталятора повреждены")?

Это сообщение отображается, когда файл, предназначенный для установки (т.е. setup.exe, setup.1) имеет неверный размер или часть файла имеет неверную контрольную сумму CRC check. В других случаях это сообщение не выдается.

Если файл-инсталятор вашего приложения распространяется через Internet и это сообщение об ошибке отображается несколько раз, возможно, что web-сервер разрывает связь прежде, чем файлы полностью успеют загрузиться. Предупредите пользователей, чтобы после загрузки они проверяли размер скачанных файлов.

Если файл-инсталятор приложения получен с CD-ROM'a или дискеты, причина может быть в испорченном носителе или некорректрой работе считывающего устройства.

При установке новой версии приложения поверх старой, в Установка и удаление программ панели управления создается новая запись..

Это происходит, если у версий приложения разный AppId, или, если AppId не указан, разные AppName. При этом инсталятор не знает, что имеет дело с двумя версиями одного приложения, поэтому создает новую запись в Установка и удаление программ панели управления. Кроме этого создается новый файл деинсталятора. Для того, чтобы этого не происходило, следует задавать двум инсталяторам одинаковые AppId или AppName.

Если необходимо изменить AppName для новой версии, задайте AppId то же значение, что и AppId или AppName предыдущей версии.

Инсталятор выдает сообщение "Unable to register the DLL/OCX: DllRegisterServer export not found" ("Невозможно зарегистрировать DLL/OCX: DllRegisterServer не найден").

Это сообщение означает, что вы указали флаг "regserver" для файла, который не может быть зарегистрирован. Удалите флаг "regserver" у параметра в секции [Files], и сообщение перестанет отображаться.

После удаления приложения папки, созданные при установке, не удаляются.

Сцществует несколько причин, по которым папки не удаляются при удалении приложения:

Внимание: В версиях Inno Setup, меньших 2.0.1, папки должны быть указаны в секциях [Dirs] или [UninstallDelete], чтобы деинсталятор смог их удалить. В более новых версиях Inno Setup папки, созданные в секции [Files], будут удалены деинсталятором автоматически, если они не существовали до начала установки.

Я запускаю batch-файл в секции [Run], но окно остается на экране после выполнения. Хотелось бы, чтобы оно закрывалось после выполнения ("close on exit")

Ответил 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 в скрипте, но при запуске инсталятор по-прежнему выбирает по умолчанию папку, указанную раньше.

При старте инсталятор проверяет в реестре, устанавливалось ли приложение в системе ранее, и если так, то использует по умолчанию ту папку, в которую приложение по желанию пользователя было установлено раньше. Если вы удалите приложение и снова запустите инсталятор, он будет использовать новую DefaultDirName. Если нужно отменить эту опцию, задайте директиве UsePreviousAppDir значение "no".

В секции [Icons] два параметра с одним и тем же именем, но устанавливается только один из них.

Два файла не могут иметь одинаковые имена, а так как ярлыки являются файлами, они также не могут иметь совпадающих имен.

Инсталятор не ждет, пока программа, указанная в секции [Run], завершит свою работу.

Во-первых, убедитесь, что вы не используете флаги "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


Задания для установки

Создания ярлыков Internet (URL)

Сначала создается файл с именем, например, "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"

Заполнение поля "Start In" для ярлыка

Используется параметр 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] (подробнее).

Автоматическое закрытие окна после выполнения программы MS-DOS

Inno Setup версий 1.3.15 и выше включает поддержку флагов "closeonexit" и "dontcloseonexit" для секции [Icons].

Резервное копирование (Backup) перед удалением файлов

Inno Setup не имеет для этого специальных функций, но вы можете сделать копию файла перед его удалением с помощью параметров секции [Files]:

Source: "{app}\MyProg.exe"; DestDir: "{app}\backup"; Flags: external skipifsourcedoesntexist uninsneveruninstall

Установка различных файлов в зависимости от версии Windows

Реализуется с помощью директив 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.

Моя установка не может сделать чего-либо имеющимися средствами Inno Setup

Обратитесь к статье How-To Implementing Custom Functionality.


Как установить...?

Файлы OCX

Рекомендуется устанавливать файлы OCX так:

[Files]
Source: "ComCtl32.ocx"; DestDir: "{sys}"; CopyMode: alwaysskipifsameorolder; Flags: restartreplace sharedfile regserver

Системные файлы Visual Basic

Обратитесь к this How-To article.

Системные файлы Visual C++ (MFC)

Обратитесь к this How-To article.

COMCTL32.DLL

Если ваше приложение требует обновленную версию 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 не поддерживает этого, кроме того это может привести к нежелательным последствиям.

BDE (Borland Database Engine)

Обратитесь к статье How-To Установка BDE для получения сведений об использовании 32-битной версии BDE, используемой в Inno Setup.

MDAC, ADO, Jet, и т.д..

Обратитесь к этой статье 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.

Windows NT/2000/XP & администранивные привилегии

Типичная инсталяция Inno Setup для запуска не требует наличия у пользователя прав администратора или опытного пользователя. Тем не менее существуют исключения. Они описаны ниже.

В Windows NT/2000/XP требуются права администратора или опытного пользователя в следующих случаях:

Что разрешается только пользователям, наделенным правами администратори или опытного пользователя в Windows 2000/XP:

Inno Setup сам посебе не может производить запись в директорию WINNT, или в ключи реестра, не упомянутые выше.

Что происходит, если установка запущена пользователем, не наделенным правами администратора?


Разное

Существуют ли ограничения на число файлов и пр., включенных в установку?

Inno Setup не устанавливает ограничений на число файлов, ярлыков, параметров реестра и т.д., которые будут включены в установку. Впрочем, не следует забывать о том, что для каждого параметра, указанного в скрипте, требуется некоторое количество памяти. Например, примерно 120 байт памяти потребуется для каждого параметра секции [Files].

В Inno Setup 3.x и ранее инсталятор и отдельные файлы не могли превышать по размеру 2 GB. Это относится к Inno Setup 4.

Что именно происходит, если пользователь нажмет Cancel в процессе установки?

При нажатии Cancel инсталятор отменяет изменения, сделанные им в ходе установки, почти как деинсталятор при удалении программы. Поэтому частично установленное приложение не останется в системе пользователя.