PostgreSQLのサイレントインストール
EDBから入手可能なPostgreSQLのインストーラは、引数に --help をつけることで様々なオプションを表示できる。主要なオプションは以下の通り。
--mode unattended: unattended(無人)モードをオンにし、ユーザーが操作せずにインストールできる。--unattendedmodeui none:--mode unattendedと併用することでサイレントインストールになる。--enable-components server,pgAdmin,stackbuilder,commandlinetools: インストールするコンポーネント--prefix "C:\Program Files\PostgreSQL\14": インストール先--datadir "C:\Program Files\PostgreSQL\14\data": データ格納先--superpassword postgres: スーパーユーザー(postgres)のパスワード--serverport 5432: ポート
使用例
デフォルト設定でサイレントインストールする。
postgresql-14.13-2-windows-x64.exe ^
--mode unattended ^
--unattendedmodeui none ^
--superpassword postgres ^
--serverport 5432
おまけ PostgreSQL 14 インストーラのヘルプ
PostgreSQL 14
Usage:
--help Display the list of valid options
--version Display product information
--unattendedmodeui <unattendedmodeui> Unattended Mode UI
Default: minimal
Allowed: none minimal minimalWithDialogs
--optionfile <optionfile> Installation option file
Default:
--debuglevel <debuglevel> Debug information level of verbosity
Default: 2
Allowed: 0 1 2 3 4
--mode <mode> Installation mode
Default: qt
Allowed: qt win32 unattended
--debugtrace <debugtrace> Debug filename
Default:
--enable-components <enable-components> Comma-separated list of components
Default: server,pgAdmin,stackbuilder,commandlinetools
Allowed: server pgAdmin stackbuilder commandlinetools
--disable-components <disable-components> Comma-separated list of components
Default:
Allowed: server pgAdmin stackbuilder commandlinetools
--installer-language <installer-language> Language selection
Default: en
Allowed: en es fr
--extract-only <extract-only>
Default: 0
--superaccount <superaccount> Sets the user name of the database superuser. Defaults to 'postgres'.
Default: postgres
--servicename <servicename> Sets the name of the database service.
Default:
--serviceaccount <serviceaccount> Sets the operating system user account that owns the server process. Defaults to 'postgres'.
Default:
--servicepassword <servicepassword> Sets the password for the operating system user account that owns server process. Defaults to superuser password.
Default:
--install_runtimes <install_runtimes> Specifies whether or not install the Microsoft Visual C++ runtimes before the installation proceeds.
Default: 1
--enable_acledit <enable_acledit> Check and give the read permissions on the complete data directory path for the service account.
Default: 0
--create_shortcuts <create_shortcuts> Specifies whether or not menu shortcuts should be created.
Default: 1
--prefix <prefix> Installation Directory
Default: C:\Program Files\PostgreSQL\14
--datadir <datadir> Data Directory
Default: C:\Program Files\PostgreSQL\14\data
--superpassword <superpassword> Password
Default:
--serverport <serverport> Port
Default: 5433
--locale <locale> Locale
Default:
Bitnamiインストーラを使わずにRedmine5.xをWindowsにインストールする方法
Bitnamiインストーラを使わずにRedmineをインストールする手順をまとめる。 なお、管理者権限とインターネット接続が必須である。オフラインインストールの手順については気が向いたらまとめる予定。
- 1. Gitをセットアップする
- 2. Rubyをセットアップする
- 3. ImageMagickをセットアップする
- 4. Ghostscriptをセットアップする
- 5. PostgreSQLをセットアップする
- 5-1. インストールと初期化
- 5-2. ユーザーの追加
- 5-3. データベースの追加
- 6. Redmineをセットアップする
- 6-1. ダウンロード
- 6-2. 初期設定
- 6-3. パッケージのインストール
- 6-4. 起動テスト
Microsoft Expression Blend SDKのダウンロードリンク
Microsoft Visual Studio Community 2017の消滅に伴い、Microsoft Expression Blend SDK のダウンロードリンクも消滅しているため、メモする。 なお、下記URLはVisual Studio 2017のVisual Studio Installerが内部処理で使用するインストーラの直リンクとなっており、いつまでも使用できる保証はない。
Microsoft Expression Blend SDK for .NET 4.0
Microsoft Expression Blend SDK for .NET 4.5
補足
SDKのインストール先は C:\Program Files (x86)\Microsoft SDKs\Expression\Blend\.NETFramework。
インストールされるDLLは以下の通り。
- Microsoft.Expression.Controls.dll
- Microsoft.Expression.Drawing.dll
- Microsoft.Expression.Effects.dll
- Microsoft.Expression.Interactions.dll
- Microsoft.Expression.Prototyping.Interactivity.dll
- Microsoft.Expression.Prototyping.SketchControls.dll
- System.Windows.Interactivity.dll
たいていの場合使用するのは System.Windows.Interactivity.dll だろうが、Behaviorはオープンソース化され、nugetパッケージとしてMicrosoftから公式に配布されている。
星形や吹き出しなどのShape類を使わなければ Microsoft.Xaml.Behaviors.Wpf で用が足りる。
過去のVisual Studio Communityのダウンロードリンク
Microsoft のサイトからVisual Studio Community 2017のダウンロードリンクが消滅していたため、メモを兼ねて記録する。 なお、2023/1/31時点で下記URLは利用できるが、公式にはリンクを消しているため、数年のうちにダウンロードもできなくなる可能性が高い。
通常は古いバージョンをダウンロードする必要はないが、特殊な事情がある場合にどうぞ。
Visual Studio Community 2017
https://visualstudio.microsoft.com/ja/thank-you-downloading-visual-studio/?sku=Community&rel=15
Visual Studio Community 2019
https://visualstudio.microsoft.com/ja/thank-you-downloading-visual-studio/?sku=Community&rel=16
Visual Studio Community 2022
https://visualstudio.microsoft.com/ja/thank-you-downloading-visual-studio/?sku=Community&rel=17
または
Windows COM操作用のProgIDとCLSIDの一覧
よく忘れるし、まとまった情報が無いためメモする。自力で探したいときは Computer\HLEY_CLASSES_ROOT\CLSID 以下のレジストリキーを見る。
List of common Windows COM ProgID and CLSID
| Name | ProgID | CLSID |
|---|---|---|
| Microsoft Word | Word.Application |
{000209FF-0000-0000-C000-000000000046} |
| Microsoft Excel | Excel.Application |
{00024500-0000-0000-C000-000000000046} |
| Microsoft PowerPoint | PowerPoint.Application |
{91493441-5A91-11CF-8700-00AA0060263B} |
| Microsoft Access | Access.Application |
{73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9} |
| Microsoft Graph | MSGraph.Application |
{00024502-0000-0000-C000-000000000046} |
| Microsoft Publisher | Publisher.Application |
{0002123D-0000-0000-C000-000000000046} |
| Microsoft Outlook | Outlook.Application |
{0006F03A-0000-0000-C000-000000000046} |
| Microsoft OneNote | OneNote.Application |
{DC67E480-C3CB-49F8-8232-60B0C2056C8E} |
| Shell Automation Service | Shell.Application |
{13709620-C279-11CE-A49E-444553540000} |
ターミナルで無変換キーを押すとアットマーク(@)が挿入される問題の調査と解決方法
概要
いわゆる「Mac方式」のIMEにカスタマイズしている場合に発生する問題で、「無変換キー=IMEオフ」「変換キー=IMEオン」に割り当てているとき、無変換キーを押すとターミナルに半角@(アットマーク)が入力される問題がある。
とりあえずアルファベットを打ちたいときに無変換キーを連打することに慣れてしまった人(私)にとって地獄のような状態であるため、原因を調査した。
この記事の内容は、GitHubのIssueで語られている内容を引用している。
結論
発生原因は、旧Microsoft IME の仕様 および ターミナルの実装が不運にもミスマッチしたためと考えられる。解決方法は以下の2種類がある。
(1)IMEを変える
古い Microsoft IME の利用をやめ、新しいMicrosoft IMEを使う。新しいMicrosoft IMEの設定方法は以下の記事が参考になる。
(2)キー割り当てを変更する(一時的な対処)
下記の記事を参考に、Windows ターミナルの設定から、vk29を別の機能に割り当てる。これはWindowsターミナルでは有効だが、PowerShellを直接起動した際には無効。
調査
IMEにより「無変換キー」を押したときに送出されるキーコード(一覧はこちら)を調べた。
| No. | 条件 | 旧IME | 新IME |
|---|---|---|---|
| 1 | IMEオフ & KeyDown | 0x1D | 0xE5 |
| 2 | IMEオフ & KeyUp | 0x1D | 0x1D |
| 3 | IMEオン & KeyDown | 0xE5 | 0xE5 |
| 4 | IMEオン & KeyUp | 0x1D | 0x1D |
表の横方向が同じ値になっている場合、新旧IMEが同じ動作であることを表す。
注目すべきはNo.1 「IMEオフで無変換キーを押下したとき」 であり、新旧で送出される仮想キーコードが異なる。
これが旧IMEで無変換キーを連打するとアットマークが挿入される正体である。
考察
- 無変換キー押下(KeyDown)で送出される仮想キーコードは、
VK_PROCESSKEYとVK_NONCONVERTのどちらが正しいのか?- 調べても分からなかった。
- 個人的感想だが、何が正しいかというよりは、何が使われてきたかという歴史的経緯であると思った。
VK_PROCESSKEYの意味は?VK_PROCESSKEYは、IMEによって処理されたキー入力であることを表す。VK_PROCESSKEYは、ImmGetVirtualKey function (imm.h)で実際に入力されたキーボードの仮想キーコードを取り出すことができる。
というわけで以下のようなコード(抜粋)を使い、TextBoxで無変換キーを押したときの VK_PROCESSKEY から仮想キーコードを取り出してみた。
public override bool PreProcessMessage(ref Message msg) { if (msg.Msg == 0x0100 /*WM_KEYDOWN*/) { Console.WriteLine($"WParam: {msg.WParam}"); if (msg.WParam.ToInt32() == 0xE5 /*VK_PROCESSKEY*/) { uint vk = ImmGetVirtualKey(msg.HWnd); Console.WriteLine($"VK: {vk}"); } } return base.PreProcessMessage(ref msg); }
無変換キーを押したときに得られた出力は以下。IMEが処理した無変換キー(0x1D = 29)であることが分かる。
WParam: 229 VK: 29
結局どうすれば良いか?
先の結論に挙げた通り、Windowsターミナルは新IMEの仕様に合わせて作られているため、新IMEを使用すればよい。ただし、新IMEは Windows 10 (2004) 以降でのみ使用可能。
追記 2022/7/6:
新しいIMEを使っていると、日本語が2重に入力される現象が発生中。これが発生すると変換ができず、「テスト」と入力すると「ttええssううttおお」となる。 仕方なく旧IMEに戻したがアットマークは再燃した...
参考
- PowerShellで無変換キーを押すとアットマークが入力される問題を回避する - Qiita
- Some keys on Japanese layout keyboards are incorrectly interpreted as @ · Issue #2206 · PowerShell/PSReadLine · GitHub
- Virtual-Key Codes (Winuser.h) - Win32 apps | Microsoft Docs
- PSReadLine/Keys.cs at ad74cef2501709d2a60a58f61d7cac32d185209f · PowerShell/PSReadLine · GitHub
- Re[8]: IME入力中のキー入力を取得したい
- API 関数解説
Windowsプログラムのインストーラを作成する
Visual Studio を使ったインストーラの作成について纏める。
対象の読者
この記事は下記の読者を想定している。
- Visual Studio でプログラムを開発している(Console, Forms, WPFなど)
- インストーラで何ができるのか興味がある
- 無料で使えるインストーラ製品を探している
インストーラとは
インストーラとは、プログラムをコンピュータ上で実行できるよう、動作環境一式を自動でインストールするソフトウェアである。
インストーラは exe ファイルをコピーするだけでなく、プログラムを正常に動作させるための準備作業や、ユーザの利便性向上のためのリンク作成などが自動実行できる。
インストーラの機能
インストーラの持つ一般的な機能を纏める。
上記の機能が不要な場合には、インストーラを作る必要はない。
無料で使用できるインストーラ製品の一覧
無料で利用可能なインストーラ製品を以下に纏める。
Wix Toolset
Wix Toolset は、XML形式の設定ファイルからインストーラを生成することができるオープンソースソフトウェア。2004年から開発しており、2022年5月時点でバージョン3.11.2が最新安定版。
特徴
- XML形式の設定ファイル
- Visual Studio の GUI から管理可能
- 高機能、拡張可能
- 日本語の情報は少ない
導入方法
GitHub のリリースページ からダウンロードする。同時に Wix Toolset の Visual Studio 拡張機能 の導入も推奨。
参考リンク
- 公式ホームページ(英語)
- [WiX] ウェルカムダイアログ、進行状況ダイアログ、インストール完了ダイアログを持つインストーラーの作成 | iPentec
- GitHub - kurtanr/WiXInstallerExamples: Installer examples created using WiX toolset
Visual Studio Installer Projects
Visual Studio Installer Projects は、Microsoft Windows Installerを作成するためのツールである。
Visual Studio 2010 までは Visual Studio の一機能として提供されていたものである。できることは多くないが、作るのは簡単。
特徴
- 独自形式の設定ファイル
- Visual Studio の GUI から管理可能
- ユーザインストールでも管理者権限が必要
- 古い機能との親和性が高い(SandCastleとの統合等)
- 日本語の情報は割とある
導入方法
Visual Studio Marketplace からダウンロードする。
参考リンク
まとめ
各種インストーラ製品の使い方は、参考リンクにわかりやすく紹介しているサイトがある。 次回の記事では Wix Toolset の機能や使い方を掘り下げてみる予定。
Prism.DryIoc でも Microsoft.Extensions.Logging や Microsoft.EntityFrameworkCore が使いたい
WPF の優れたフレームワークの1つである Prism (PrismLibrary) の悩み事の1つに、そのままでは Microsoft.Extensions.DependencyInjection (以下、MSDI) の機能が利用できないことがある。
Prism では Microsoft.Extensions.Logging (以下、MSLogging) が使用できるだろうか?答えは YES である。
結論
DryIoc.Microsoft.DependencyInjection のNuGetパッケージをインストールし、App.xaml.cs を以下のように編集する。
// 以下のusingは拡張メソッドのために必須 using DryIoc.Microsoft.DependencyInjection; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Prism.Ioc; public partial class App : Prism.DryIoc.PrismApplication { // ...中略... protected override Prism.Ioc.IContainerExtension CreateContainerExtension() { var serivces = new ServiceCollection(); services.AddLogging(options => { // Todo: ここにLoggerの設定を記述 }); services.AddDbContext<DbContext>(/*Todo: ここにDatabaseの設定を記述*/); var container = new DryIoc.Container(CreateContainerRules()) .WithDependencyInjectionAdapter(services); return new Prism.DryIoc.DryIocContainerExtension(container); } }
これにより、以下のようなクラス名をカテゴリとする ILogger
public class SampleClass { public SampleClass(Microsoft.Extensions.Logging.ILogger<SampleClass> logger) { logger.LogInformation("SampleClass created."); } }
また、Microsoft.EntityFrameworkCore の内部で使用されるログ情報も正常に取得できるようになった。
参考
Python Jinja2入門 その2 Jinja2スクリプトの作成
前回に引き続き、Jinja2を使ったテキストテンプレート機能の作成方法を紹介する。
前回の記事は以下。
スクリプトの作成
まず、template.txt という名前で以下のテンプレートテキストファイルを作成する。
こんにちは、{{name}}さん!
次に main.py という名前で以下のスクリプトを作成する。
from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('./')) template = env.get_template('template.txt') data = { 'name': '田中' } print(template.render(data))
Pythonでmain.pyを実行すると、{{name}}部分が「田中」に置換された結果が画面に表示される。
PS> python main.py こんにちは、田中さん!
足早に説明したが、これからスクリプトを1行ずつ紐解いていく。
スクリプトの説明
1~2行目 - 宣言
1~2行目は、jinja2のPythonモジュールを使用する宣言である。
from jinja2 import Environment, FileSystemLoader
EnvironmentはJinja2を実行する環境を定義するクラスで、様々な基本設定を行う。FileSystemLoaderはテンプレートの読み込み方を定義するクラスで、テンプレートをテキストファイルからを読み込むことができる。
FileSystemLoader以外にも様々な読み込み方があるが、それは後日の紹介とする。
3行目 - 実行環境定義
3行目は、Jinja2の実行環境を新規作成している。
env = Environment(loader=FileSystemLoader('./'))
- 変数
envにJinja2実行環境インスタンスを代入する。 loaderにはテンプレートの読み込み方を定義するインスタンスを設定する。FileSystemLoader('./')は、カレントディレクトリを基準のパスとして、テンプレートファイルを探索するというインスタンスである。
4行目 - テンプレートエンジン作成
4行目は、テンプレート実行インスタンス(テンプレートエンジン)を新規作成している。
template = env.get_template('template.txt')
- 変数
templateにテンプレート実行インスタンスを代入する。 get_template('template.txt')では、3行目に指定した場所を基準としたテンプレートファイルの名前 を指定し、テンプレート実行インスタンスを作成する。
5行目 - データモデル作成
5行目は、テンプレートに適用するデータを定義している。
data = { 'name': '田中' }
- 変数
dataに辞書を代入する。 - 辞書のキーに「name」、値に「田中」を指定しており、これはテンプレート内の変数「name」を「田中」に置き換えるという意味になる。
今回はデータをスクリプト上で作成しているが、実際にはCSVファイルにしたり、YAMLファイルにしたり、様々な方法で外部保存することが考えられる。
6行目 - テンプレート実行
6行目は、テンプレートを実行(render)している。
print(template.render(data))
template.render(data)では、template.txtに対してdataを適用し、その結果を文字列として返す。
今回は説明のために画面上にprintしているが、テンプレート結果はファイルに書き込むほうが一般的だろう。
まとめ
説明は長くなってしまったが、スクリプト自体は非常に短く数分で作成できる。内容も非常に簡潔で理解しやすく、Jinja2が非常に優れたライブラリであることが分かる。
次の記事ではもう少し実用に近いサンプルを示す予定。

