12

アプリケーションをインストールする inno セットアップ スクリプトをセットアップしました。結果の 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

編集: /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) メッセージがどこから発信されているのか混乱しています。

4

3 に答える 3

19

コメントに収まらないダンの答えの補足...

ウィザードの画像ファイルについては、GIMP 2.8を画像エディタとして使用して、色深度とオペレーティングシステム(Windows7およびWindowsXP)の可能な限りすべての並べ替えを試しました。私は次の結果を思いついた:

使用する色深度は関係ありません。8ビット、16ビット、24ビット、または32ビット。Windows XPはデスクトップ上の32ビットアイコンをサポートしているので、これは考えてみると理にかなっています。 以下の編集を参照してください

ダンは、ビットマップの「破損した」ヘッダーについて話したときに、それを頭に釘付けにしました。破損していないことがわかります。デフォルトでは、GIMP2.8はビットマップファイルのヘッダーに「色空間情報」を保存します。InnosetupまたはWindowsXP(どちらかはわかりません)は、この情報を正しく解釈する方法を知りません。

重要なのは、この色空間情報がビットマップファイルに保存されていないことを確認することです。GIMP 2.8からビットマップをエクスポートする場合、下の画像に示すように、[色空間情報を書き込まない]オプションをオンにするオプションがあります。

ここに画像の説明を入力してください

2014年3月20日編集

いくつかの更新情報:InnoSetupバージョン5.5.4(Windows 7 64ビットOSでの実行とインストール)では、32ビットイメージで上記の方法を使用するとbitmap image is not valid、コンパイルされたインストールファイルの実行時にエラーが発生します。

色空間情報がないまま24ビット画像に変更すると、問題は解決しました。

于 2012-09-15T16:08:15.077 に答える
4

問題は WizardImageFile と WizardImageFileSmall にあることがわかりました。元々は 24 ビットの bmp ファイルを使用していました。ビット深度を 16 に減らしたところ、Windows XP でセットアップが機能するようになりました。これにより、インストールパッケージも小さくなったので、勝ちました。

于 2012-07-15T13:53:29.630 に答える