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.islInno Setup Third-Party Filesのページには,.islファイルの編集を補助するプログラムだけでなく,ダウンロード用に多くの翻訳ファイルが寄稿されています。
バージョン2.0.6よりMBCSが完全にサポートされています。ファイル名と定数の解析では全て,MBCSの1バイト目のチェックを行っています。したがって,2バイト目以降を ("\")や("{")と間違えないはずです。
バージョン2.0.6以前ではMBCSをサポートしていません。
現時点では,Windowsインストーラ版のInno Setupを作る予定はありません。Windowsインストーラをサポートするにはほぼ完全にプログラムを書き換えなければならないでしょう。私にはそんな暇も関心もありません。
インストーラのアイコンは,[Setup]セクションのSetupIconFile指令を設定することで変えられます。アンインストーラのアイコンを設定するには,UninstallIconFileを設定してください。
Inno Setup 4では新しいパスカル・スクリプトによりこれがサポートされるようになりました。
注:古いバージョンのInno Setupでは,Windowsのバージョンに応じて違うファイルをインストールすることが可能でした。
ありません。このFAQを書いている時点では,そのような機能を追加する予定もありません。
できません。そのような機能を追加する予定もありません(乱用されるでしょうから)。ユーザー側の操作を最小限にすることが目的なら,[Setup]セクションのDisable*指令を使用してください。
はい。DefaultDirNameの中で{reg:...}定数を使用してください。たとえば,
[Setup]
DefaultDirName={reg:HKLM\Software\My Program,Path|{pf}\My Program}
{reg:...}定数については,ヘルプファイルの定数の項目をご覧下さい。
このメッセージが表示される典型的な場合は,パラメータのデータ内に引用符(")を埋め込もうとしたときです。でも,引用符を重ねないでください。詳しくは,ヘルプファイル内の"セクション内のパラメータ"の項目をご覧下さい。
アプリケーションから開こうとしているファイルにパス名が指定されておらず,アプリケーションはファイルがカレントディレクトリにあるものと思って探している可能性がとても高いです。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に設定してください。
普通,このメッセージが表示されるのは,登録する能力を持たないファイルに"regserver"フラグを設定した場合です。[Files]セクションから"regserver"フラグを取り除けば,エラーメッセージは消えるでしょう。
ディレクトリが削除されない理由はいくつかあります。
- そのディレクトリがインストール前からもともとあった。デフォルトでは,アンインストーラは安全策をとり,インストーラが作成しなかったファイルを削除しません。
- そのディレクトリにファイルやサブディレクトリが残っている。アンインストーラに追加のファイルやディレクトリを削除させる必要があるなら,[UninstallDelete]セクションを使用してください。
- 実行中のプロセスがそのディレクトリをカレントディレクトリにしている。
注:バージョン2.0.1以前では,ディレクトリがアンインストーラによって削除されるには,[Dirs]セクションか[UninstallDelete]セクションで指定する必要がありました。より新しいバージョンでは,インストール前から存在していたのでなければ,[Files]セクションで作成されたディレクトリはアンインストーラによって自動的に削除されます。
Tim Rudeより
終了時にバッチファイルに自動的にウィンドウを閉じさせるには,終了時にCLSコマンドを使用してスクリーンをクリアするのが一番簡単です。--- バッチファイル 1 ---
@echo off
echo Hello World
echo このバッチファイルは終了時に閉じません--- バッチファイル 2 ---
@echo off
echo Hello World
echo このバッチファイルは終了時に閉じます
cls
起動時にセットアップ・プログラムはレジストリを探して,同じアプリケーションが既にインストールされているか調べます。インストールされている場合,旧バージョンのディレクトリをウィザード内でユーザーに提示するデフォルトのディレクトリとして使用します。そのアプリケーションをアンインストールして再びセットアップ・プログラムを実行すれば,新しいDefaultDirNameの設定を使用するでしょう。この機能を無効にしたければ,UsePreviousAppDir指令に"no"に指定してください。
2つのファイルが同じ名前を持つことはできません。ショートカットもファイルなので,2つのショートカットが同じ名前を持つこともできません。
最初に,[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
最初に,たとえば,"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\EnvironmentWindows 95/98/Meでは,環境変数を設定するのに,AUTOEXEC.BATを修正する必要があります。Inno Setupにこの機能は組み込まれていませんが,小さなプログラムを書いて[Run]セクションから実行させてもよいでしょう(詳しくはこちら)。
バージョン1.3.15より,[Icons]セクションでcloseonexitフラグとdontcloseonexitフラグがサポートされています。
現在,この機能はありませんが,次の例のように[Files]セクションを利用して,ファイルを置換する前にコピーしておけばよいでしょう。
Source: "{app}\MyProg.exe"; DestDir: "{app}\backup"; Flags: external skipifsourcedoesntexist uninsneveruninstall
エントリで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(アクセスコントロールリストの設定)をご覧下さい。
Knowledge Baseの記事 カスタム関数の実装をご覧ください。
OCXファイルをインストールするには次の方法をお勧めします。
[Files]
Source: "ComCtl32.ocx"; DestDir: "{sys}"; CopyMode: alwaysskipifsameorolder; Flags: restartreplace sharedfile regserver
こちらのKnowledge Baseの記事をご覧ください。
こちらのKnowledge Baseの記事をご覧ください。
アプリケーションで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をインストールしないでください。マイクロソフト社は許可していませんし,危険です(訳注:ヘルプファイルの「安全ではないファイル」にも関連する情報があります)。
Inno Setupを使用して,32ビット版のBDEを配布する方法の詳細に関しては,Knowledge BaseのBDEのインストールをご覧下さい。
こちらのKnowledge Baseをご覧ください。
現在サポートされているプラットフォームは,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で管理者権限が必要なもの:
- スクリプトの[Setup]セクションで,"AdminPrivilegesRequired=yes"を指定。ユーザーが管理者権限を持っていない場合,セットアップ・プログラムはエラーメッセージを表示して終了します(AdminPrivilegesRequired指令のデフォルト値はnoです)。
- [Files]セクションで,restartreplaceフラグを使用。このフラグを使用するとセットアップ・プログラムはMoveFileExを呼び出し,"HKEY_LOCAL_MACHINE\ SYSTEM\CurrentControlSet\Control\Session Manager"キーに書き込もうとします。このキーに対する書き込み権限は管理者にしかありません。
- [Registry]セクションで,"HKEY_USERS\.DEFAULT"以下にある任意のキーへの書き込み。このキーに対する書き込み権限は管理者にしかありません。
Windows 2000/XP/2003で管理者権限かパワーユーザー権限のどちらか が必要なもの:
- [Files]セクションで,regserverフラグの使用。たいていの場合,DLLを登録するにはHKEY_CLASSES_ROOTに書き込む必要がありますが,普通のユーザーはこの権限を持っていません。
- [Files]セクションで,sharedfileフラグの使用。Inno Setupは"HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows\ CurrentVersion\ SharedDLLs"に値を作成ないし更新しようとします。普通のユーザーはこのキーに書き込む権限を持っていません。
- [Files]セクションで,FontInstallパラメータの使用。
- [Registry]セクションで,HKEY_LOCAL_MACHINEないしHKEY_CLASSES_ROOT以下の任意のキーへの書き込み。普通のユーザーはこのキーに書き込む権限を持っていません。
Inno Setup自体はWINNTディレクトリや上記にないレジストリキーに対する書き込み権限を必要としません。
管理者権限を持たない ユーザーがインストールを実行したときの違いは何ですか?
- コントロールパネルのプログラムの追加と削除 のエントリに対するレジストリキーは,HKEY_LOCAL_MACHINEではなくHKEY_CURRENT_USERの下に作成されます。したがって,そのプログラムをインストールしたユーザーにしかプログラムの追加と削除 の該当エントリは見えません。
- "{group}"定数は,All Usersのプロファイルではなく,常に現在のユーザーのプロファイルを指します。
- "{common...}"形式の定数は全て"{user...}"形式の定数と等価です。
- プログラムはどのユーザーでもアンインストールできます(管理者がプログラムをインストールした場合は管理者しかアンインストールできません)。
Inno Setupはインストール物に含めることができるファイル,ショートカット,レジストリの項目などに制限を設けていません。しかしながら,スクリプトのエントリを記述するたびにInno Setupはメモリを必要とするということは忘れないでください。たとえば,[Files]セクションのエントリ1つにつきおよそ120バイトが必要になります。
バージョン3.x及びそれ以前では,ほとんどの場所で64ビットの計算を行っていないので,インストール物も個々のファイルも2GBを越えることはできません。バージョン4ではこれに対する対処がなされています。
[中止]をクリックすると,セットアップ・プログラムはアンインストーラとほぼ同様の方法で,その時点までに行った変更を元に戻し始めます。したがって,部分的にインストールされているアプリケーションでも後に残りません。