Inno setup.exe не работает с делением с плавающей запятой на ноль в Windows XP
У меня есть настройка inno script, которая устанавливает мое приложение. Результирующий файл setup.exe будет правильно установлен на windows vista/7, но с ошибкой деления на нуль на windows xp. Примеры скриптов inno работают на windows xp, поэтому это должно быть то, что я делаю.
Может ли кто-нибудь увидеть, что я делаю неправильно?
; Script generated by the Inno Setup Script Wizard.
#define app_src_path "..\MyApp"
#define app_exe_path "..\bin"
#define file_ver GetFileVersion(app_exe_path + "\win32\MyApp.exe")
#define app_ver Delete(file_ver, 6, 2)
[Setup]
AppId={{BBB40316-958C-446B-A08D-311273214AA6}
AppName=MyApp
AppVersion={#app_ver}
UninstallDisplayName=MyApp
AppPublisher=My Company US
DefaultDirName={pf}\My Company\MyApp
DisableDirPage=yes
DefaultGroupName=My Company
DisableProgramGroupPage=yes
#emit 'OutputBaseFilename="MyApp-Setup-' + app_ver + '"'
#emit 'SetupIconFile="' + app_src_path + '\rc\MyAppIcon.ico"'
Compression=lzma
SolidCompression=yes
ArchitecturesInstallIn64BitMode=x64
WizardImageFile=ZDS.bmp
WizardSmallImageFile=ZDSsmall.bmp
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[InstallDelete]
Type: filesandordirs; Name: "{app}\MyApp";
[Files]
; x64 files
Source: "{#app_exe_path}\x64\MyApp.exe"; DestDir: "{app}"; Flags: ignoreversion; Check: Is64BitInstallMode
; win32 files
Source: "{#app_exe_path}\win32\MyApp.exe"; DestDir: "{app}"; Flags: ignoreversion; Check: not Is64BitInstallMode
; platform independent
Source: "{#app_src_path}\rc\pic1-24.png"; DestDir: "{app}\rc"; Flags: ignoreversion nocompression
Source: "{#app_src_path}\rc\pic2-24.png"; DestDir: "{app}\rc"; Flags: ignoreversion nocompression
Source: "{#app_src_path}\rc\pic3-24.png"; DestDir: "{app}\rc"; Flags: ignoreversion nocompression
[Icons]
Name: "{group}\MyApp"; Filename: "{app}\MyApp.exe"
Name: "{commondesktop}\MyApp"; Filename: "{app}\MyApp.exe"; Tasks: desktopicon
Name: "{group}\{cm:UninstallProgram,MyApp}"; Filename: "{uninstallexe}"
[Run]
Filename: "{app}\MyApp.exe"; Description: "{cm:LaunchProgram,MyApp}"; Flags: nowait postinstall skipifsilent
EDIT:
Вот результат из /LOG
2012-07-14 10:07:50.855 Log opened. (Time zone: UTC-04:00)
2012-07-14 10:07:50.855 Setup version: Inno Setup version 5.5.1 (u)
2012-07-14 10:07:50.855 Original Setup EXE: E:\MyApp-Setup-0.0.0.exe
2012-07-14 10:07:50.855 Setup command line: /SL5="$801DE,623918,137216,E:\MyApp-Setup-0.0.0.exe" /LOG
2012-07-14 10:07:50.855 Windows version: 5.1.2600 SP3 (NT platform: Yes)
2012-07-14 10:07:50.855 64-bit Windows: No
2012-07-14 10:07:50.870 Processor architecture: x86
2012-07-14 10:07:50.870 User privileges: Administrative
2012-07-14 10:07:50.885 Exception message:
2012-07-14 10:07:50.885 Message box (OK):
Floating point division by zero.
2012-07-14 10:07:51.654 User chose OK.
2012-07-14 10:07:51.654 Deinitializing Setup.
2012-07-14 10:07:51.654 Log closed.
У меня нет секции [code], поэтому я запутался, откуда отправляется сообщение MessageBox (OK).
Ответы
Ответ 1
Дополнение к ответу Дэн, которое не вписывается в комментарий...
Для файлов изображений мастера я попытался почти все возможные перестановки глубины цвета и операционной системы (Windows 7 и Windows XP) с использованием GIMP 2.8 в качестве редактора изображений. Я придумал следующие результаты:
Не важно, какую глубину цвета вы используете; 8-битный, 16-битный, 24-битный или 32-разрядный. Что имеет смысл, когда вы думаете об этом, потому что Windows XP поддерживает 32-разрядные значки на рабочем столе. см. Ниже.
Дэн прибил его по голове, когда он рассказал о "коррумпированном" заголовке в растровом изображении. Оказывается, он не поврежден. По умолчанию GIMP 2.8 сохраняет информацию о цветовом пространстве в заголовке растрового файла. Innosetup или Windows XP (я не уверен, что) не знает, как правильно интерпретировать эту информацию.
Ключ должен убедиться, что эта информация о цветовом пространстве не сохранена в растровом файле. При экспорте растрового изображения из GIMP 2.8 у вас есть возможность проверить параметр "Не записывать информацию о цветовом пространстве", как показано на рисунке ниже.
![enter image description here]()
EDIT 2014-Mar-20
Некоторая обновленная информация: в версии InnoSetup 5.5.4 (запуск и установка в 64-разрядной ОС Windows 7) использование вышеуказанного метода с 32-разрядными изображениями приводит к ошибке bitmap image is not valid
при запуске скомпилированного установочного файла.
Переход на 24-битное изображение, все еще без информации о цветовом пространстве, разрешил проблему.
Ответ 2
Оказывается, проблема была в WizardImageFile и WizardImageFileSmall. Первоначально использовался 24-битный BMP файл. Я уменьшил глубину бит до 16, и теперь настройка будет работать под окнами xp. Это также уменьшило мой пакет установки, чтобы выиграть.
Ответ 3
Вы можете использовать инструменты netpbm для преобразования в bmp. т.е. из png:
pngtopnm icon.png | ppmtobmp - > icon.bmp
Ответы, приведенные выше, кажутся правильными, к сожалению, я в конечном итоге потратил много времени, прежде чем нашел их, и я мог бы поклясться, что пытался поставить гамму "без цвета". И поэтому это то, что я сделал вместо этого, которое может быть написано сценарием для преобразования многих значков, а также может помочь кому-то столкнуться с той же проблемой.