2017.07.19

Inno Script Studioを使用してセットアップファイルを作成する

Inno Setupを使用したセットアップファイルの作成方法についてはWeb上に色々と情報が公開されていますが、Setup Scriptを簡単に作成できるInno Script Studioに関する情報が少ないようなので、自分自身の覚書としてまとめます。Inno Script StudioではWizard形式でプロジェクトの雛形を作成出来るようですが、よくわからないので今回はTouchを例にして空のプロジェクトから作成してみます。

Inno Script Studioを起動すると以下のダイアログが表示されますので、Blank Scriptを選択してOKボタンを押します。
00
0

まずは、左上のオプションボタンを押してプロジェクト全体のオプションを設定していきます。
1
アプリケーションのフォルダ名を設定します。デフォのフォルダ名に、{pf}\アプリケーションをインストールするフォルダ名を入れます{pf}はProgram Filesフォルダ(もしくはProgram Files(86)フォルダ)のことです。この例では\Program Files\Touchフォルダにインストールされます。

2
続いてプログラムグループを設定します。デフォのグループ名にグループ名を入れます。ここで設定したグループ名はプログラムメニューのフォルダ名になります。

3
再起動マネージャを設定します。デフォルトでは、アプリを再起動するにもチェックが入っていますので、インストール後にWindowsを再起動する必要が無い場合はこのチェックを外します。

4
動作環境を設定します。ここは設定しなくても構いませんが、Windows95/98にインストールされると問題が出るかもしれないので、一応Windows7(ウィンドウズNT欄の右側の参照ボタンを押して表示されるダイアログボックスでWindows7を選択する)以上に設定します。
他にも設定項目が色々とありますが、全てを設定する必要はないものの、発行者情報やユーザ情報、バージョン情報などは設定しておいたほうが良いでしょう。

プロジェクト全体の設定が終わったら、セットアップファイルを作成するための実際の作業に入ります。
5
まずは、インストールするアプリケーションの実行ファイルやヘルプファイルなど付属させるファイルを登録していきます。
アイテム追加ボタンを押すと以下のダイアログボックスが表示されます。
6
まず、ソースファイル名にインストールするファイルを指定します。次に宛先フォルダのドロップダウンリストからファイルをインストールするフォルダを指定します。最初に行ったプロジェクトオプション設定がきちんと行われていれば、ドロップダウンリストの一覧に{pf}\インストールフォルダ(この場合は{pf}\Touch)があるはずです。その他の項目は設定不要です。

皆さんはセットアップ実行中に「デスクトップにシィートカットを作成する」等の追加のオプション選択を見たことがあるでしょうか。ここではセットアップに「デスクトップにシィートカットを作成する」を追加してみたいと思います。
16
左側の選択メニューでタスクを選び(左側メニューの上から順番に設定していきたいところですが、ここは先に設定しておく必要があります)、アイテム追加ボタンを押します。

17
名前に適当な名前(日本語は設定できません)を付けて、セットアップ実行時に表示する文字列を説明欄に入力してOKボタンを押します。タスクで設定した項目はセットアップ実行時のオプション項目としてON/OFFを選択できるようになります。


タスクを追加したら、通常の作業に戻ります。次はプログラムメニュー等に登録するショートカットアイコンの設定です。
7_2

アイテム追加ボタンを押してアイテムを追加していきます。
8_3
ショートカットアイコンの名前を設定し、ファイル名はファイルで設定したアイテムがドロップダウンリストに表示されますので、ここから選択します。プログラムグループにアイコンを作成する場合の宛先は{group}です。この{group}はプロジェクトオプションで接待したプロジェクトグループフォルダのことです。この例ではアイコンファイル名も指定していますが省略しても構いません。省略した場合はデフォルトのアイコン(アプリケーションであれば、そのアプリケーションのデフォルトアイコン、その他のファイルであれば関連付けられたアイコン)を使用します。

9_2
また、プログラムグループにアンインストールメニューを追加したい場合は、適当な名前をつけて、ファイル名の一覧から{uninstallexe}を選択します。

10
次にいよいよデスクトップへのショートカットアイコン登録設定です。
名前とファイル名を設定したら、宛先ディレクトリの一覧から[commondesktop]を選択します。次にセットアップオプションでデスクトップショートカットを作成するかどうか切り替えられるように、ダイアログボックスのタブTasksを設定します。
11
先程タスクに追加したアイテムがリストに表示されていますので、このチェックをONにします。これで、このアイテムはセットアップ時に「デスクトップにショートカットを作成する」を選択した場合にだけ実行されるようになります。

続いて言語を設定します。言語を設定しないとセットアップが英語表示となります。
12
アイテム追加ボタンを押して言語アイテムを追加します。
13
名前にJapaneseを設定し、メッセージファイルの参照ボタンを押してJapanese.islを選択します。OKボタンを押せば登録は終わりです。

また、セットアップの最後に「Readme.txtを表示する」等の選択表示がある場合がありますが、これも設定してみます。
14
インスト時に実行でアイテム追加ボタンを押します。
15
ファイル名の一覧から実行したいファイルを選択して(この場合は「はじめに読んで下さい.txt」)、FlagsのGeneralでpostinstallとshellexec(この場合実行するのはテキストファイルなので、関連付けられたアプリケーションを起動する必要があるため)をチェックします。

これで一通り完了です。完成したInno Setup用のスクリプトファイルは「スクリプト」を選択することで確認できます。あとはプロジェクトメニューのコンパイルかスピードボタンでコンパイルすればセットアップファイルが作成されます。
18

上記の手順で作成したセットアップファイルの実行例

Setup1
{pf}Touchの通りになっています。

Setup2
プログラムグループも設定通りです。

Setup3
追加のオプションが表示されています。

Setup4

Setup5
セットアップの最後に「初めに読んで下さい.txtの表示」選択が表示されました。

Inno Setupの使い方は色々と情報がありますが、スクリプトをごりごりと直接記述する方法が殆どで初心者には敷居が高い感じがします。一方、Inno Script Studioを使用すれば上記のように、わかりやすいユーザインタフェースである程度のセットアップファイルを作成出来ますので便利ではないでしょうか。
尚、Inno Script Studioとその日本語化については以下情報があります。
Inno Script Studio https://www.kymoto.org/products/inno-script-studio
日本語化 https://www42.atwiki.jp/jfactory/pages/75.html


| | コメント (0) | トラックバック (0)

2017.07.09

MiGrep2がVectorの6月度ランキングに入りました

MiGrep2がVectorの6月度よく読まれた記事TOP10に入りました。

#Ver1.2正式版を早く公開できるようにしないと・・・

| | コメント (0) | トラックバック (0)

2017.07.04

送るメニューにフォルダへのコピーを追加する

プログラムを開発している中で本格的に動作を確認したいときに、そのプログラムをインストールしてあるフォルダにコピーしているのですが、作成した実行ファイルを開発用のフォルダでコピーしてインストールフォルダに貼り付ける操作が面倒なため、エクスプローラの「送る」メニューに追加する「フォルダにコピー」プログラムを作成して使用しています。取るに足らないものですが、一度コピーしたフォルダを履歴として記録して選択できるため一部の方には便利かも知れませんので、先出のMiCapture Liteに引き続いて公開します。

プログラムの内容は非常にシンプルなものですが、プログラムをインストールするProgram FilesもしくはProgram Files(x86)フォルダにファイルをコピーするためには、通常は管理者権限への昇格が必要だと思います。そのため、コピーするファイルもしくはフォルダをコピーして失敗した場合は、コピー用のサブ実行ファイル(ファイルサイズを小さくしたいためコンソールアプリケーションにしましたが、それでも962kb・・・)を監視者昇格モードで起動してコピーするようにしています。

送るメニュー
Filessenndto

ファイルをコピーを起動
Filessendto



// 管理者権限で外部アプリを呼ぶ
// 参照元:KINOさんのflow of water http://fow.minim.ne.jp/blog/?p=88
function RunAsAdmin(hParent: HWND; const ExeFileName, Param: string): Boolean;
var
sei: TShellExecuteInfoW;
begin
FillChar(sei, SizeOf(sei), 0);
sei.cbSize := SizeOf(sei);
sei.Wnd := hParent;
sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
sei.lpVerb := 'runas';
sei.lpFile := PChar(ExeFileName);
sei.nShow := SW_SHOWNORMAL;
sei.lpParameters := PChar(Param);
Result := ShellExecuteEx(@sei);
end;

procedure TForm1.CopyFiles(DstFolder: string);
var
srcfile, dstfile, fname, folder: string;
i: integer;
begin
folder := DstFolder;
for i := 1 to ParamCount do
begin
srcfile := ParamStr(i);
if TDirectory.Exists(srcfile, False) then
begin
fname := srcfile + '.$$$';
fname := ExtractFileName(fname);
fname := ChangeFileExt(fname, '');
dstfile := folder + '\' + fname;
try
TDirectory.Copy(srcfile, dstfile);
// Copyに失敗したら相手先フォルダ書き込みにAdmin権限が必要と判断して
// RunAsAdminでコピー用のコンソールアプリAdminCopy.exeを呼ぶ
except
RunAsAdmin(Handle, '.\AdminCopy.exe', '/D "' + srcfile + '" "' + dstfile + '"');
end;
end else begin
fname := ExtractFIleName(srcfile);
dstfile := folder + '\' + fname;
try
TFile.Copy(srcfile, dstfile, True);
// Copyに失敗したら相手先フォルダ書き込みにAdmin権限が必要と判断して
// RunAsAdminでコピー用のコンソールアプリAdminCopy.exeを呼ぶ
except
RunAsAdmin(Handle, '.\AdminCopy.exe', '/F "' + srcfile + '" "' + dstfile + '"');
end;
end;
end;
if IsShowResult.Checked then
MessageDlg(DstFolder +'に'+#13#10 + IntToStr(ParamCount)
+ ' 個のファイルまたたフォルダをコピーしました.',
mtInformation, [mbOK], 0);
Close;
end;


AdminCopy.exeのプロジェクト

program AdminCopy;

{$APPTYPE CONSOLE}

{$R *.res}

uses
System.SysUtils,
System.IOUtils;

var
Mode, Src, Dst: string;

begin
try
if ParamCount < 3 then
Exit
else begin
Mode := ParamStr(1);
Src := ParamStr(2);
Dst := ParamStr(3);
if Mode = '/D' then
TDirectory.Copy(Src, Dst)
else
TFile.Copy(Src, Dst, True);
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.

また、セットアッププログラムの作成にはInno Setup + Setup Scriptを使用しています。実行ファイル本体はインストールフォルダにコピーして、「送る」フォルダにショートカットを作成することが出来ますのでとても便利です。
公開ファイルにはセットアップファイルと、Inno setup scriptプロジェクトファイルを含むソースファイルを同梱しました。

「fssetup.zip」をダウンロード

| | コメント (0) | トラックバック (0)

2017.07.02

MiCapture Lite ver1.0

昔公開していた画面キャプチャソフトMiCaptureを、MiGrep2やMiBarcode用のヘルプファイル作成用画像編集のために、一から作り直しました。
Liteとつけたのは、旧版にあった簡易図形描画機能を省いたからです。逆に範囲を指定しての画像のぼかし機能を追加しています。

Micaplite

試作版なので実行ファイル本体のみです。

「MiCapLite.zip」をダウンロード

| | コメント (0) | トラックバック (0)

MiGrep2 ver1.2先行版の公開

MiGrep2 ver1.0ですが、色々と不具合が見つかってきたため修正中です。
取り敢えず更新版候補が出来ましたのでMiGrep2本体のみを公開します。ダウンロードしたZIP書庫を解凍して、MiGrep2.exeをMiGrep2をインストールしたフォルダに上書きコピーして下さい(コピーには管理者権限が必要な場合があります)。
尚、本バージョンでオプションメニューと設定パネルの仕様を変更しましたのでご注意下さい。

Ver1.2での変更点

不具合修正
・ファイル名を相対パスで表示する際に、書庫ファイル内のファイルの表示がおかしかった不具合を修正
・エクスプローラのコンテキストメニューからMiGrep2を実行する際に、選択したフォルダもしくはファイルが一つしかない場合にうまく検索できない場合があった不具合を修正
・文字コードの自動判定で、UTF-8Nを正常に判定出来ない場合があった不具合を修正(おそらく旧版MiGrepも同じ不具合があったはず)
・文字コードの自動判定でUnicode Big-Endianを正常に判定出来ない場合があった不具合を修正(Delphiの内部・文字コードがUnicodeになったための不具合)
機能の修正・追加
・ファイル読み込み時の文字コード変換を自前処理からDelphi標準のTEncodingを使用した処理に変更
・一覧のカラムをクリックするとリストをソートする機能を追加
・文字コード自動判定時に選択したファイルの文字コードをステータスバーに表示する機能を追加(文字コード自動変換時のみ)
・一括置換のメニューとスピードボタンを追加。機能自体は未実装
・オプションメニューの項目と設定パネルの項目を整理(設定切替をメニューに移動)

Ver1.1での変更点(非公開)
・ポップアップにファイルのフルパス名を表示する機能を追加
・その他細かな修正

「MiGrep2v1.2.zip」をダウンロード


| | コメント (0) | トラックバック (0)

2017.06.19

MiGrep2がVector新着ソフトレビューで紹介されました

紹介記事

こういった紹介記事って何年振りなのかもう忘れてしまいましたが嬉しいものです・・・

#ちなみにMiGrep2ですが、自分でいくつか不具合を見つけてしまい現在誠意修正中です。

| | コメント (0) | トラックバック (0)

2017.06.11

Visual studio 2017の価格

Visual Studio Professional 2017が60,295円で購入できます
一方、Delphi 10.2 ProfessionalのXE6までのユーザ(ちなみに私はXE2 Pro版ユーザ)のバージョンアップ価格は120,110円です
しかもDelphiのPro版ではモバイル開発をサポートしていませんが、VSではXamarinでの開発をサポートしています。
まぁ、個人的にはモバイル開発のニーズはないんですが、値段と提供されている価値を考えますと、Delphi(Embarcadero)にももっと頑張ってほしいなぁと思います。
Delphiのバージョンアップ価格がVS Proと同等以下であればバージョンアップするのですが、VS Pro版を購入しちゃおうかなぁと思案中です。

| | コメント (0) | トラックバック (0)

2017.05.28

Delphi 10.1 Starterでの多言語化

Delphi XEではプロジェクトメニューの言語言語→追加で多言語化が出来ますが、Starter版にはこの機能はありません。そこでネット上を探したところtokibitoさんの記事を見つけました。
で早速試してみたのですが、Delphi 10.1 Starter版ではそのままでは実現できなかったため、備忘録として残しておきます。

まずはhttps://sourceforge.net/projects/dxgettext/からGNU Gettext for Delphi, C++ and Kylixをダウンロードしてgnugettextをインストールする。
このセットアップでインストールされるgnugettext.pasはDelphi XE以降ではコンパイルエラーとなるため、https://sourceforge.net/p/dxgettext/patches/26/からgnugettext.pasをダウンロードして置き換える。次に追加する言語を編集するためにhttps://ja.osdn.net/projects/sfnet_poedit/releases/からpoedit-1.5.7-setup.exeをダウンロードしてインストールする。
これで準備完了です。

ますはプロジェクトフォルダにgnugettext.pasをコピーして、プロジェクトソースのusesにgnugettextを追加します。

program Project1;

uses
Vcl.Forms,
gnugettext in 'gnugettext.pas', //この一行を追加
Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

続いてプログラムソース本体のusesにもgnugettextを追加します。
gnugettextは自動でフォームの文字列を抽出してくれますが、そのままではソースコード内の文字列は抽出してくれません。ソースコード中の多言語化したい文字列を_( )で括ります。

unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Menus,
  gnugettext; // gnugettextユニットを追加
 
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    F1: TMenuItem;
    E1: TMenuItem;
    O1: TMenuItem;
    X1: TMenuItem;
    C1: TMenuItem;
    V1: TMenuItem;
    P1: TMenuItem;
    N1: TMenuItem;
    Language1: TMenuItem;
    J1: TMenuItem;
    English1: TMenuItem;
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure J1Click(Sender: TObject);
    procedure English1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Label2.Caption := _('これはプログラムコード中の文字列を切り替える確認です.'); // 多言語化したい文字列を_()で括る
end;
 
procedure TForm1.English1Click(Sender: TObject);
begin
  English1.Checked := True;
  UseLanguage('en_US');          // 英語(US)に切り替える
  ReTranslateComponent(Self); // 表示し直す
end;
 
procedure TForm1.J1Click(Sender: TObject);
begin
  J1.Checked := True;
  UseLanguage('ja');         // 日本語に切り替える
  ReTranslateComponent(Self);  // 表示し直す
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  TranslateComponent(Self); // これを追加
end;
 
end.

ソースコードの修正が終わったら、プロジェクトフォルダーでコマンドプロンプトを開き(エクスプローラでフォルダを選択して、SHIFTキーを押しながら右クリックするとコマンドウィンドウをここで開くメニューが出ます)、コマンドラインから
dxgettext --delphi --nonascii
を実行します。
すると言語ファイルであるdefault.poが作成されていますので、このファイルをpoeditで編集します。

Poedit
ここで日本語の対訳を入れていきます。尚、編集ファイルを保存することで自動的に実行に必要なファイルが一種に作成されます(拡張子が.moのファイルです)。
また、この時カタログメニューの設定で基本情報を入れておきます。
Posetting

編集で出来上がったmoファイルをプロジェクト実行ファイルがあるフォルダにサブフォルダlocale\言語名\LC_MESSAGESフォルダを作成して、そこに保存します(ファイル名はdefault.moのままで構いません。またdefault.poは不要です)。

で動作確認結果は以下の通りです。

通常
Testjp

English化
Testeng


「Project1.zip」をダウンロード

のダウンロード


| | コメント (0) | トラックバック (0)

2017.05.20

MiGrep2 ver1.0フルパッケージ版の公開

MiGrep2に当初考えていた機能を実装出来ましたので公開します。

Migrep2

ファイルやフォルダー、ZIP/LZH/CAB書庫ファイルを指定して、その中のファイルをGrep(検索ワードがあるか検索)します。ZIP/LZH/CAB書庫ファイル内の検索はWindowsシェルの標準機能を使用していますので、外部ライブラリファイルは不要です。また、テキストファイルの文字コードは、標準でShift-JIS, UTF-8, Unicode BE, Unicode LEに対応、オプション設定でUTF-8N, JIS, EUCを自動判別します。

検索できるファイルは標準ではテキストファイルだけですが、hishidaさんが公開しているxdoc2txtを使用することで、MS OfficeファイルやPDFファイル等も検索できるようになります。また、各社が公開しているiFilterも使用することが出来ます。
※詳細はヘルプファイル(手抜きですが)を参照して下さい。

「mig2setup.zip」をダウンロード

ダウンロードしたファイルを解凍して、mig2setup.exeを実行して下さい。

尚、セットアップファイルの作成にはInno Setupを使用しました。

| | コメント (0) | トラックバック (0)

2017.05.19

MiBarcode ver7.1アップデート

先日公開のVer7.1にいくつかの不具合があったのでアップデート版を公開します。
不具合;ヘルプメニューの目次でヘルプファイルが表示されない、タスクバーのアイコンが二重になる、の2点を修正しています。

Ver7.1をインストール済みの場合は上書きでインストールして下さい。

「Mibarcd71.zip」をダウンロード

| | コメント (0) | トラックバック (0)

より以前の記事一覧

その他のカテゴリー

Nightly Build