Inno Setup
よく寄せられる質問(FAQ)

Last Updated: 2005-01-05
Translated : 2005-02-21 (by mystral_kk)

機能

トラブル

インストール時のタスク

各種ファイルのインストール方法

互換性

その他


機能

セットアップが表示するメッセージの翻訳

セットアップが表示するメッセージを他の言語に翻訳するのにソースコードを修正する必要はありません。同梱されているDefault.islファイルをコピーして,その中のテキストを編集するだけでよいのです(Default.islを直接編集しないでください。Inno Setupの新しいバージョンをインストールするときに失われてしまいます)。重要な点については,ヘルプファイルの[Messages]セクションをご覧下さい。

新しい.islファイルができたら,次のような[Languages]セクションを作成して,コンパイラに指示してください。

[Languages]
Name: mytrans; MessagesFile: "compiler:MyTranslation.isl"

バージョン4.0以前のInno Setupを使用している場合は,代わりに次のようにしてください。

[Setup]
MessagesFile=compiler:MyTranslation.isl

Inno Setup Third-Party Filesのページには,.islファイルの編集を補助するプログラムだけでなく,ダウンロード用に多くの翻訳ファイルが寄稿されています。

MBCS(マルチバイト文字)をサポートしていますか?

バージョン2.0.6よりMBCSが完全にサポートされています。ファイル名と定数の解析では全て,MBCSの1バイト目のチェックを行っています。したがって,2バイト目以降を ("\")や("{")と間違えないはずです。

バージョン2.0.6以前ではMBCSをサポートしていません。

将来,Windowsインストーラをサポートするつもりはありますか?

現時点では,Windowsインストーラ版のInno Setupを作る予定はありません。Windowsインストーラをサポートするにはほぼ完全にプログラムを書き換えなければならないでしょう。私にはそんな暇も関心もありません。

Setup.exeのアイコンの変更法

インストーラのアイコンは,[Setup]セクションのSetupIconFile指令を設定することで変えられます。アンインストーラのアイコンを設定するには,UninstallIconFileを設定してください。

条件付きのインストールができますか? たとえば,あるレジストリ・キーやファイルが存在する場合に限って先へ進むなど。

Inno Setup 4では新しいパスカル・スクリプトによりこれがサポートされるようになりました。

注:古いバージョンのInno Setupでは,Windowsのバージョンに応じて違うファイルをインストールすることが可能でした。

インターネットを用いてインストールする機能(web install)はありますか?

ありません。このFAQを書いている時点では,そのような機能を追加する予定もありません。

/SILENTや/VERYSILENTなどのコマンドライン・オプションを指定せずに,サイレント・インストールできますか?

できません。そのような機能を追加する予定もありません(乱用されるでしょうから)。ユーザー側の操作を最小限にすることが目的なら,[Setup]セクションのDisable*指令を使用してください。

デフォルトのディレクトリ名としてレジストリ・キーの値を使用できますか?

はい。DefaultDirNameの中で{reg:...}定数を使用してください。たとえば,

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

{reg:...}定数については,ヘルプファイルの定数の項目をご覧下さい。


トラブル

コンパイラがパラメータの引用符が合っていないか場所がおかしいと表示します。

このメッセージが表示される典型的な場合は,パラメータのデータ内に引用符(")を埋め込もうとしたときです。でも,引用符を重ねないでください。詳しくは,ヘルプファイル内の"セクション内のパラメータ"の項目をご覧下さい。

セットアップ・プログラムが作成したショートカットから起動すると,アプリケーションが関連ファイルを見つけることができません。アプリケーションの.EXEファイルをエクスプローラからダブルクリックしたときには大丈夫なのですが。

アプリケーションから開こうとしているファイルにパス名が指定されておらず,アプリケーションはファイルがカレントディレクトリにあるものと思って探している可能性がとても高いです。Inno Setupは,デフォルトでは,作成するショートカットの"作業ディレクトリ"を設定しません。このため,Windows自身がディレクトリを選択しますが,たいていはアプリケーションが含まれているディレクトリにはならないでしょう。

ほとんどの場合,これはアプリケーション・レベルで修正すべき事柄です。きちんと設計されたGUIなら,特定のディレクトリから起動されるのを期待しないはずです。つまり,オープンするファイルに常に完全なパス名を指定するでしょう。たとえば,DelphiやC++Builderでは,ExtractFilePath(ParamStr(0))を呼び出してアプリケーションが含まれるディレクトリの完全なパス名を取得することができます。アプリケーションのディレクトリにある"File.txt"という名前を持つファイルの完全なパス名を取得するには, ExtractFilePath(ParamStr(0)) + 'File.txt' を使用してください。

何らかの理由で,アプリケーション・レベルでこの問題を修正できないのなら,[Icons]セクションに "WorkingDir: {app}" を追加して,"作業ディレクトリ"を設定するようInno Setupに指示すればよいでしょう。

一部のシステムで,「セットアップ・プログラムが壊れています」というエラーメッセージが表示されるのはなぜですか?

このエラーメッセージが表示されるのは,インストール物(たとえば,setup.exe, setup.1)に付随するファイルのサイズが正しくなかったり,ファイルの一部でCRCチェックに失敗するときです。それ以外の理由では表示されません。

インストール物がインターネットで配布されており,かつこのエラーメッセージがたくさん表示される場合は,たぶんWebサーバーが早々と接続を断ってしまい,ファイルの一部しか送っていないのでしょう。影響を被ったユーザーにダウンロードしたファイルのバイト数を確認してもらってください。

インストール物をCD-ROMやフロッピーディスクで配布しているなら,たぶんメディアの不良か,ひょっとするとドライブの欠陥かもしれません。

アプリケーションの古いバージョンをアンインストールせずに新しいバージョンをインストールすると,コントロールパネルのプログラムの追加と削除 に別のエントリができてしまいます。

このようなことが起こるのは,バージョンが変わったときにAppIdを変更したか,AppIdを指定していなくてAppNameを変更した場合です。こうなると,セットアップ・プログラムは2つのバージョンが同じアプリケーションなのか知る手立てがないため,プログラムの追加と削除 に新しいエントリを作成してしまいます。その上,新しいアンインストールログ(unins???.dat)も作成されるでしょう。これに対する明らかな解決策はAppIdやAppNameを変更しないことです。

新しいバージョンでAppNameを変更しなければならないのなら,AppIdを旧バージョンのAppIdかAppNameに設定してください。

セットアップ・プログラムが「DLL/OCXを登録できませんでした: DllRegisterServerエクスポートが見つかりませんでした」というエラーメッセージを表示します。

普通,このメッセージが表示されるのは,登録する能力を持たないファイルに"regserver"フラグを設定した場合です。[Files]セクションから"regserver"フラグを取り除けば,エラーメッセージは消えるでしょう。

アンインストールをしてもインストール時に作成したディレクトリが残ってしまいます

ディレクトリが削除されない理由はいくつかあります。

注:バージョン2.0.1以前では,ディレクトリがアンインストーラによって削除されるには,[Dirs]セクションか[UninstallDelete]セクションで指定する必要がありました。より新しいバージョンでは,インストール前から存在していたのでなければ,[Files]セクションで作成されたディレクトリはアンインストーラによって自動的に削除されます。

[Run]セクションからバッチファイルを実行すると,終了後も画面にウィンドウが残ってしまいます。終了時にウィンドウを閉じたいのですが。"

Tim Rudeより
終了時にバッチファイルに自動的にウィンドウを閉じさせるには,終了時にCLSコマンドを使用してスクリーンをクリアするのが一番簡単です。

--- バッチファイル 1 ---

@echo off
echo Hello World
echo このバッチファイルは終了時に閉じません

--- バッチファイル 2 ---

@echo off
echo Hello World
echo このバッチファイルは終了時に閉じます
cls

スクリプト内でDefaultDirNameを変更しましたが,セットアップ・プログラムを実行すると以前のディレクトリがデフォルトになってしまいます。

起動時にセットアップ・プログラムはレジストリを探して,同じアプリケーションが既にインストールされているか調べます。インストールされている場合,旧バージョンのディレクトリをウィザード内でユーザーに提示するデフォルトのディレクトリとして使用します。そのアプリケーションをアンインストールして再びセットアップ・プログラムを実行すれば,新しいDefaultDirNameの設定を使用するでしょう。この機能を無効にしたければ,UsePreviousAppDir指令に"no"に指定してください。

[Icons]セクションに同名のエントリが2つあるのですが,一方しかインストールされません。

2つのファイルが同じ名前を持つことはできません。ショートカットもファイルなので,2つのショートカットが同じ名前を持つこともできません。

セットアップ・プログラムが[Run]セクションで実行したプログラムが終了するのを待ってくれません。

最初に,[Run]セクションのエントリで"nowait"フラグや"waituntilidle"フラグを使っていないことを確認してください。これらのフラグがあると,セットアップ・プログラムはそのプロセスが完全に終了するまで待たなくなります。

これらのフラグを使用しておらず,かつそれでもセットアップ・プログラムがプログラムの終了を待たないようなら,ありそうなのは,実行している.EXEファイルが他のプロセスをフォークして自分自身をすぐに終了させるため,セットアップ・プログラムはプログラムの実行が終了したと考えているのでしょう。古いInstallShieldを元にしたインストーラにも起こることが知られています(回避策として,/SMS switch)を試しに使用してください)。

プログラムがこのような振る舞いをしているかどうかを確認するには,コマンドラインから"START /WAIT プログラム名"を実行してプログラムが終了する前にコマンド・プロンプトに戻されるかどうかを確かめるのが簡単です。

「言語の選択」ダイアローグで一部の言語が表示されません。あるいは,ダイアローグが全く表示されません。

Inno Setup 4.2.2から,現在アクティブになっているWindowsのコードページで表示できない[Languages]セクションの言語は,セットアップ言語の選択ダイアローグで一覧に載らないようになっています。たとえば,ロシア語の文章はコードページ1251でしか表示できません。ユーザーの実行環境でコードページ1251でなければ,ロシア語の選択肢は表示されません。

Windows XPでは,コントロールパネルの「地域と言語のオプション」で「詳細設定」の「Unicode対応でないプログラムの言語」を設定することによりコードページを変えられます。Windows 2000では,コントロールパネルの「地域のオプション」で「デフォルトの設定」をクリックすることにより設定できます。

正しいコードページで実行している自信があるのに表示されない言語がある場合,その言語の.islファイル中でLanguageIDの設定が間違っている可能性が最も高いです。

現在のコードページで適切に表示できるかどうかにかかわらず全ての言語を強制的に表示したい場合には,次の行をスクリプトに追加してください。

[LangOptions]
LanguageCodePage=0


インストール時のタスク

インターネット(URL)・ショートカットの作成

最初に,たとえば,"website.url"という名前のファイルを作成し,その中に次のように記述してください。

[InternetShortcut]
URL=http://web.site.address/

それから,次の行をスクリプト・ファイルに付け加えてください。

[Files]
Source: "website.url"; DestDir: "{app}"

[Icons]
Name: "{group}\作者のWebサイトを訪問"; Filename: "{app}\website.url"

クイック起動バーにショートカットを作成

少なくともバージョン1.3.11にアップグレードしてから,次のようにしてください。

[Icons]
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\My Program"; Filename: "{app}\MyProg.exe"

ショートカットの作業フォルダ設定

[Icons]セクションのエントリで,WorkingDirパラメータを使用してください。

ファイル関連づけの作成

まず,[Setup]セクションのChangesAssociations指令を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"なら2番目のアイコンです)。

Root: HKCR; Subkey: "MyProgramFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\MYPROG.EXE"" ""%1"""

"shell\open\command"は,エクスプローラでダブルクリックしたときに実行するプログラムを指定します。長いファイル名も正しく扱えるよう,コマンドラインに引用符を入れています。

環境変数の設定

Windows NT/2000/XP/2003では,環境変数は文字列としてレジストリキーに保存されますので,[Registry]セクションを利用して,環境変数を操作することができます。システム全体に関する環境変数は次の箇所に保存されています。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

ユーザー毎の環境変数は次の箇所に保存されています。

HKEY_CURRENT_USER\Environment

Windows 95/98/Meでは,環境変数を設定するのに,AUTOEXEC.BATを修正する必要があります。Inno Setupにこの機能は組み込まれていませんが,小さなプログラムを書いて[Run]セクションから実行させてもよいでしょう(詳しくはこちら)。

MS-DOSプログラムで"終了時にウィンドウを閉じる"の設定

バージョン1.3.15より,[Icons]セクションでcloseonexitフラグとdontcloseonexitフラグがサポートされています。

ファイルを置換する前にバックアップを作成

現在,この機能はありませんが,次の例のように[Files]セクションを利用して,ファイルを置換する前にコピーしておけばよいでしょう。

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

Windowsのバージョンに応じて違うファイルをインストール

エントリでMinVersionパラメータないしOnlyBelowVersionパラメータ,またはこの両方を使用することで達成できます。詳しくは,ヘルプファイルの「共通パラメータ」の項をご覧下さい。

次に示すのは,あるファイルをNTプラットフォーム(Windows NT/2000/XP/2003)にインストールし,違うファイルを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パラメータはほとんどのセクションで使用できます。

ファイル,ディレクトリ,レジストリキーのパーミッション設定

バージョン4.1.0より,ファイル,ディレクトリ,レジストリキーのパーミッションを設定するために,[Dirs], [Files], [Registry]セクションでPermissionsパラメータがサポートされています。

より高度なことをする必要があるなら,SetACL(アクセスコントロールリストの設定)をご覧下さい。

Inno Setupになさそうな機能を実行したいのですが。

Knowledge Baseの記事 カスタム関数の実装をご覧ください。


各種ファイルのインストール方法

OCXファイル

OCXファイルをインストールするには次の方法をお勧めします。

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

Visual Basicのシステムファイル

こちらのKnowledge Baseの記事をご覧ください。

Visual C++のシステムファイル(MFCなど)

こちらのKnowledge Baseの記事をご覧ください。

COMCTL32.DLL

アプリケーションでCOMCTL32.DLLのアップデート版が必要なら,ユーザーにCOMCTL32のアップデートをマイクロソフト社から ダウンロードする よう指示するか,次の例のようにインストール物からCOMCTL32のアップデートを呼び出せばよいでしょう。

[Files]
Source: "50comupd.exe"; DestDir: "{tmp}"

[Code]
function ShouldInstallComCtlUpdate: Boolean;
var
  MS, LS: Cardinal;
begin
  // 既存のcomctl32.dllのバージョンが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

[Files]セクションを利用して,直接COMCTL32.DLLをインストールしないでください。マイクロソフト社は許可していませんし,危険です(訳注:ヘルプファイルの「安全ではないファイル」にも関連する情報があります)。

BDE (ボーランド・データベースエンジン)

Inno Setupを使用して,32ビット版のBDEを配布する方法の詳細に関しては,Knowledge BaseのBDEのインストールをご覧下さい。

MDAC, ADO, Jetなど

こちらのKnowledge Baseをご覧ください。


互換性

OSの互換性

現在サポートされているプラットフォームは,Windows 95, 98, 2000, 2003, XP, Me, and NT 4.0です。サポートされているプラットフォームでは,サービスパックやOSのアップデートは不要です。

今はもっぱらWindows 2000を利用して開発を行っていますので,Windows 2000との互換性が一番あります。

新しい主な機能を導入するときには,ふつう,サポートされている全てのWindowsのバージョンで個人的にテストしています。

16ビット版のInno Setupはバージョン1.3よりなくなりました。Windows NT 3.51はバージョン3.0よりサポートされなくなりました。

Windows NT/2000/XP/2003と管理者権限

Windows NT/2000/XP/2003で実行されるインストールでは,たいてい管理者権限やパワーユーザー権限は不要です。しかし,以下に示す例外もあります。

Windows NT/2000/XP/2003で管理者権限が必要なもの:

Windows 2000/XP/2003で管理者権限かパワーユーザー権限のどちらか が必要なもの:

Inno Setup自体はWINNTディレクトリや上記にないレジストリキーに対する書き込み権限を必要としません。

管理者権限を持たない ユーザーがインストールを実行したときの違いは何ですか?


その他

インストール物に含めることができるファイル数などの制限はありますか?

Inno Setupはインストール物に含めることができるファイル,ショートカット,レジストリの項目などに制限を設けていません。しかしながら,スクリプトのエントリを記述するたびにInno Setupはメモリを必要とするということは忘れないでください。たとえば,[Files]セクションのエントリ1つにつきおよそ120バイトが必要になります。

バージョン3.x及びそれ以前では,ほとんどの場所で64ビットの計算を行っていないので,インストール物も個々のファイルも2GBを越えることはできません。バージョン4ではこれに対する対処がなされています。

インストール中にユーザーが[中止]をクリックしたとき,正確には何が起こるのですか?

[中止]をクリックすると,セットアップ・プログラムはアンインストーラとほぼ同様の方法で,その時点までに行った変更を元に戻し始めます。したがって,部分的にインストールされているアプリケーションでも後に残りません。


Current category: Alphisation - Misc > Documents > Inno Setup, ISTool, ヘルプファイルの日本語化 | Salvaged by: Nardog