Visual Studio 2022 Installer Projects と AutoUpdater.NET を使ってネットワーク経由でアップデートする方法
目次
概要
前回は Installer Projects でアップデートを行うインストーラーを作成しました。
knkomko.hatenablog.com
今回は AutoUpdater.NET を使ったアップデート方法を確認します。
またインストーラーの保存場所として共有フォルダを使用します。
1. NuGet パッケージの追加
AutoUpdater.NET.Official をインストールします。
2. アップデート開始のコードを追加
AutoUpdater を使用したコードを追加します。
Start メソッドを呼び出すとアップデート用の画面が表示されます。
using System; using System.Windows.Forms; using AutoUpdaterDotNET; namespace AutoUpdaterTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { AutoUpdater.Mandatory = true; AutoUpdater.UpdateMode = Mode.Forced; AutoUpdater.Start("\\\\172.24.110.60\\Public\\autoupdate.xml"); } } }
3. アップデートを行うインストーラーの作成
詳細は概要にも記載している前回の記事を参考にしてください。
knkomko.hatenablog.com
4. WebView2Loader.dll の追加
リビルドするとCPUアーキテクチャごとに WebView2Loader.dll が作成されます。
すべての WebView2Loader.dll を Setup プロジェクトに追加します。
5. インストーラーの配置
共有フォルダに Setup プロジェクトで作成した msi ファイルを保存します。
また autoupdate.xml, rerease_notes.htm のファイルを新規作成して保存します。
autoupdate.xml の version, url, changelog は実行環境に合わせて変更を行います。
・autoupdate.xml
<?xml version="1.0" encoding="UTF-8"?> <item> <title>サンプルプログラム 自動更新プログラム</title> <version>1.0.0.1</version> <url>//172.24.110.60/Public/Setup2.msi</url> <changelog>//172.24.110.60/Public/rerease_notes.htm</changelog> </item>
・rerease_note.htm
Sample 1.0.0.0 -> 1.0.0.1<br> ・aaaaaaaaaa<br> ・aaaaaaaaaa<br> ・aaaaaaaaaa<br> ・aaaaaaaaaa<br> ・aaaaaaaaaa<br> ・aaaaaaaaaa<br> <br>
6. 確認
① Setup1 インストール後
・ソフトウェアのバージョン
・コントロールパネル
・保存場所
② ソフトウェアの起動後
起動後 AutoUpdater.Start を実行するとアップデート用の画面が表示されます。
アップデート用の画面の Update ボタンを押下すると Setup2 が起動しました。
③ ソフトウェアの Update 後
・ソフトウェアのバージョン
・コントロールパネル
・保存場所
1.0.0.0 で使用していた WebView2Loader.dll が削除されずに残っていました。
7. その他
SetupプロジェクトにWebView2Loader.dllが含まれていないとAutoUpdater.Start実行時に例外が発生します。
Visual Studio 2022 Installer Projects でソフトウェアをアップデートする方法
1. インストーラーの作成
今回は設定内容を確認するため Setup プロジェクトを2つ作成しました。
それぞれの Setup には異なるバージョンのソフトウェアを保存しています。
Setup1 ▶ 1.0.0.0
Setup2 ▶ 1.0.0.1
異なる Setup プロジェクトでアップデートの確認を行うため Setup1 と Setup2 の UpgradeCode は同じ値に書き換えています。
2. Version の変更
Setup2 の Version を変更します。
Version を変更する際に ProductCode の変更を確認されるので変更します。
3. RemovePreviousVersions の変更
今回は 1.0.0.1 をインストールした後 1.0.0.0 はアンインストールされた状態にしたいため RemovePreviousVersions を True に変更します。
3. 確認
① Setup1 インストール後
・ソフトウェアのバージョン
・コントロールパネル
・保存場所
② Setup2 インストール後
・ソフトウェアのバージョン
・コントロールパネル
・保存場所
Windows Server のパフォーマンスログを定期的に保存する
概要
Microsoft SQL Server Support Blog のパフォーマンスログ採取手順を参考に、タスクスケジューラーを使ってデータベースを利用する時間帯だけログを保存するよう設定します。
今回、ログの採取は以下の時間帯で行います。
・8:00 - 12:00
同じ設定で365日ログを採取する場合は約100GBの保存容量が必要です。
1. パフォーマンスモニターに採集対象のカウンタを追加
Microsoft SQL Server Support Blog よりダウンロードした PerfCollector_v1.0 の create.bat を実行します。
実行前
実行後
create.bat を実行すると、ユーザー定義に mytest という採集対象のカウンタが追加されました。
2. パフォーマンスログの採集を任意のタイミングで行う
手動で確認ができるように採集の開始と停止を行うbatファイルを作成します。
開始
# StartPerfCollect.bat logman start mytest
停止
# StopPerfCollect.bat logman stop mytest
確認のため StartPerfCollect.bat を実行すると、パフォーマンスモニターの mytest が実行中となります。
また実行中の状態になると、ログファイルが .blg の形式で保存されることを確認できます。
実行中はログのファイルサイズが 0 KB のままとなっています。
実行中の状態で StopPerfCollect.bat を実行すると、パフォーマンスモニターの mytest が停止します。
停止するとログの書き込みが行われたことでファイルサイズの増加が確認できました。
.blg のファイルをダブルクリックするとパフォーマンスモニターが起動してログを確認できました。
3. パフォーマンスログの採集を定期的に行う
タスクスケジューラを使用して特定の時間帯にログを採集します。
タスクの作成より、StartPerfCollect.bat と StopPerfCollect.bat を実行するタスクをぞれぞれ作成します。
開始
最上位の特権で実行するにチェックを入れます。
今回は毎日8:00に採集を開始します。
開始のため StartPerfCollect.bat を実行します。
停止
最上位の特権で実行するにチェックを入れます。
今回は毎日12:00に採集を停止します。
停止のため StopPerfCollect.bat を実行します。
タスクスケジューラに採集の開始と停止のタスクを作成したことでパフォーマンスログを定期的に保存できるようになりました。
EC2に配置したWebサイトをELBと無料のSSL証明書を使ってHTTPSで公開する
目次
2. サブネット
後のALBを利用してHTTPS通信を行う設定でサブネットが2つ必要となるため事前に作成します。
3. ルートテーブル
ルートのターゲットは先ほど作成したインターネットゲートウェイを指定します。
4. サブネットの関連付け
サブネットの関連付けを行います。
先ほど作成した2つのサブネットを登録します。
5. EC2
EC2のインスタンスを作成します。
注意:インターネットゲートウェイやルートテーブルが設定できていないとSSHやRDPを使ったEC2への接続ができず、EC2にElastic IPの関連付けもできません。
6. ロードバランサ―
ACMから取得したSSL証明書とALBを利用してEC2へHTTPS通信ができるように設定します。
ターゲットの種類はインスタンスを指定します。
サブネットは先ほど作成した2つの候補が出てくるので両方とも選択します。
セキュリティグループのインバンドルールはHTTPSとHTTPを指定します。
ターゲットグループには先ほど作成したEC2インスタンスを登録します。
リスナーとルーティングにはHTTPSとHTTPを指定します。
7. EC2のセキュリティグループ
EC2のセキュリティグループのインバウンドルールを編集します。
HTTPにロードバランサ―のセキュリティグループを指定するように変更します。
8. Route 53
ホストゾーンのAレコードにロードバランサ―を指定します。
エイリアスを有効にして先ほど作成したロードバランサ―を選択します。
9. 確認
EC2に配置したWebサイトがHTTPSで公開されていることを確認します。
その他
ロードバランサ―のリスナーからHTTPのルールを変更することでHTTPSにリダイレクトすることが出来ます。
WSL2 から Hyper-V にアクセスする
変更前の確認
PS C:\Users\User> Get-NetIPInterface | ` >> Select-Object ifIndex,InterfaceAlias,AddressFamily,ConnectionState,Forwarding | ` >> Sort-Object -Property IfIndex | ` >> Format-Table ifIndex InterfaceAlias AddressFamily ConnectionState Forwarding ------- -------------- ------------- --------------- ---------- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 省略 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 17 vEthernet (Default Switch) IPv6 Connected Disabled 17 vEthernet (Default Switch) IPv4 Connected Disabled ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 省略 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 108 vEthernet (WSL) IPv6 Connected Disabled 108 vEthernet (WSL) IPv4 Connected Disabled
設定の変更
PowerShell を管理者権限で起動して設定の変更を行う必要がありました。
PS C:\Users\User> Get-NetIPInterface | ` >> Where-Object {$_.InterfaceAlias -eq 'vEthernet (WSL)' -or $_.InterfaceAlias -eq 'vEthernet (Default Switch)'} | ` >> Set-NetIPInterface -Forwarding Enabled
変更後の確認
PS C:\Users\User> Get-NetIPInterface | ` >> Select-Object ifIndex,InterfaceAlias,AddressFamily,ConnectionState,Forwarding | ` >> Sort-Object -Property IfIndex | ` >> Format-Table ifIndex InterfaceAlias AddressFamily ConnectionState Forwarding ------- -------------- ------------- --------------- ---------- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 省略 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 17 vEthernet (Default Switch) IPv6 Connected Enabled 17 vEthernet (Default Switch) IPv4 Connected Enabled ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 省略 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 108 vEthernet (WSL) IPv6 Connected Enabled 108 vEthernet (WSL) IPv4 Connected Enabled
Ansible を使って Ubuntu 22.04 に Docker をインストールして PostgresSQL を起動する
はじめに
今回はAnsibleを使ってDocker のインストールとイメージを作成して
コンテナの起動はサーバーにSSH接続してコマンドを実行する方法となります。
環境
Ubuntu 22.04
鍵認証によるSSH
ssh-leygenコマンドを使ってSSHに使用する秘密鍵と公開鍵を作成します。
今回キーペアの作成場所は初期値 /root/.ssh/ のままで、パスフレーズは設定していません。
root@d4988cd12c43:/# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa Your public key has been saved in /root/.ssh/id_rsa.pub The key fingerprint is: SHA256:OHEWEvbb895QIx+oomZn7zAa8Mxn0FvjTucRxyDjXGk root@d4988cd12c43 The key's randomart image is: +---[RSA 3072]----+ | +.. | | . o . . | | . + o E | | * = = + | | . + S B + * | | = o + = * o | | = B + = . | | o*o* + + | | ooo o+ o . | +----[SHA256]-----+
ssh-copy-idコマンドを使って、先ほど作成した公開鍵をSSH接続するサーバーに保存します。
root@d4988cd12c43:/# ssh-copy-id ubuntu@192.168.11.57 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys ubuntu@192.168.11.57's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'ubuntu@192.168.11.57'" and check to make sure that only the key(s) you wanted were added.
ansible-playbook の実行
init フォルダ内にテーブルを作成するための init.sql を保存しています。
C:. │ inventry.ini │ playbook.yml │ └─postgresql │ Dockerfile │ └─init init.sql
今回なぜか inventry.ini にSSHの接続情報を保存しないと play-book が使えない状況でした。
inventry.ini
target ansible_host=192.168.11.57 ansible_ssh_user=ubuntu aniansible_ssh_pass=ubuntu [target:var] ansible_python_interpreter=/usr/bin/python3
また ansible-playbook コマンドに --ask-pass と --ask-become-pass のオプションが必要でした。
root@d4988cd12c43:/ansible# ansible-playbook -i inventry.ini playbook.yml --ask-pass --ask-become-pass SSH password: BECOME password[defaults to SSH password]:
PostgreSQL のコンテナを起動
Ansible からコンテナを起動できなかったため手動でコンテナを実行しました。
ansible-playbook コマンドによって2種類のイメージが作成されています。
ubuntu@ubuntu:~$ sudo docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE postgres 14.0-alpine 87440f4e7f9e 10 months ago 195MB psql14 v1.0 87440f4e7f9e 10 months ago 195MB
ポートやパスワードを指定してコンテナを起動します。
sudo docker run -p 5432:5432 --name psql14 -e POSTGRES_PASSWORD=postgres psql14:v1.0
PostgreSQL への接続を確認
psql コマンドを使用して接続を確認します。
Server [localhost]: 192.168.11.57 Database [postgres]: Port [5432]: Username [postgres]: Client Encoding [SJIS]: Password for user postgres: psql (12.10, server 14.0) WARNING: psql major version 12, server major version 14. Some psql features might not work. Type "help" for help.
Dockerfile で指定したバージョン PostgreSQL 14.0 に接続できていることが確認できました。
postgres=# SELECT version(); version -------------------------------------------------------------------------------------------------------------- PostgreSQL 14.0 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, 64-bit (1 row)
AWS CLI を使って S3 のファイルを操作する
- はじめに
- 環境
- AWS CLI インストール
- AWS CLI 設定
- S3 ファイル操作
- S3 バケットとオブジェクトの一覧を表示します
- S3 バケット(例: 20220513-example)を作成します
- S3 バケット(例: 20220513-example)にローカルのファイル(例: index.html)をアップロードします
- S3 バケット内(例: 20220513-example)のファイルを表示します
- S3 バケット内(例: 20220513-example)のファイルをダウンロードします
- S3 バケット内(例: 20220513-example)のファイル(例: index.html)を削除します
はじめに
AWS CLI の使い方を説明する機会があったので導入からS3のファイルを操作するまでの手順をまとめました。なお AWS CLI にて利用する Access Key ID と Secret access key についてはIAMより作成済みとします。
環境
Windows 10
AWS CLI インストール
以下の公式ページよりAWS CLIをダウンロードします。
aws.amazon.com
ダウンロードしたインストーラを実行します。
チェックボックスにチェックを入れて Next ボタンを押下します。
Next ボタンを押下します。
Install ボタンを押下します。
Finish ボタンを押下します。
AWS CLI 設定
Windows PowerShell を起動します。
以下のコマンドを実行してクイック設定を開始します。
aws configure
以下のような Access Key ID と Secret access key である場合の入力例です。
$ aws configure AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY Default region name [None]: ap-northeast-1 Default output format [None]: json
S3 ファイル操作
S3 バケット(例: 20220513-example)にローカルのファイル(例: index.html)をアップロードします
aws s3 cp C:\file\index.html s3://20220513-example/index.html
S3 バケット内(例: 20220513-example)のファイルをダウンロードします
aws s3 cp s3://20220513-example/index.html C:\file\index.html
S3 バケット内(例: 20220513-example)のファイル(例: index.html)を削除します
aws s3 rm s3://20220513-example/index.html
トラブルシューティング
AWS Access Key Id の入力を間違えていて以下のようなエラーメッセージが表示されました。
An error occurred (InvalidAccessKeyId) when calling the ListBuckets operation: The AWS Access Key Id you provided does not exist in our records.
aws configure からクイック設定を行って正しい AWS Access Key Id を入力することで解決できました。