C# 定期的にコマンド実行

定期的にtracertを実行したかったので。

C# TCPを使ったサンプル

C# UDPを使ったメッセージ交換

UDPを使ったテストプログラム。

C# PC情報取得

PC名、ユーザー名、インストール済みアプリ、ネットワーク情報を取得

WSL2 初期設定、Sambaなど

WSL有効化

・WSLの有効化
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

・Virtual Machine Platformの有効化
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

上記2つはoptionalfeaturesから直接チェックしてもOK
・Linux用Windowsサブシステム
・仮想マシン プラットフォーム

WSLコマンド

・インストール済み
wsl –list

・インストールできるもの
wsl –list –online

・WSL1or2どちらで動作しているか。バージョン確認
wsl –list –ver

・WSL、カーネルのバージョン確認
wsl –version

・WSL、カーネルのバージョンアップ
wsl –update

今回は、
WSL バージョン: 1.2.5.0
カーネル バージョン: 5.15.90.1
から
WSL バージョン: 2.1.4.0
カーネル バージョン: 5.15.146.1-2
になった。

***

・インストール
wsl –install -d Ubuntu-22.04

・既定に設定
wsl -s Ubuntu-22.04
(–set-default)

・削除
wsl –unregister Ubuntu-22.04

・リセット
wsl –unregister Ubuntu-22.04
wsl –install -d Ubuntu-22.04
wsl -s Ubuntu-22.04

・起動
wsl
(デフォルトのディストリビューションにログイン)

・終了(削除ではない)
wsl –shutdown
(wsl –terminate Ubuntu-22.04でも終了できる)

・DNS指定
(名前解決できないとエラーがでる)

sudo vim /etc/wsl.conf

[network]
generateResolvConf = false

を追加
(WSL起動のたびresolv.confが上書きされるため)

sudo vim /etc/resolv.conf
を開き
nameserver 8.8.8.8
または
nameserver 192.168.11.1
など、追加する。
(通常は、起動する度にリセットされる)

ポートフォワード

・wslのIPアドレス確認
wsl -e hostname -I

・ポートフォワード(ポート1つ指定)
netsh interface portproxy add v4tov4 listenport=80 listenaddress=* connectport=80 connectaddress=172.19.144.232

・確認
netsh interface portproxy show all

・削除
netsh interface portproxy delete v4tov4 listenport=80

・ファイアーウォール
netsh advfirewall firewall add rule name=”wsl” dir=in action=allow protocol=tcp localport=80,53 profile=private,public

・削除
netsh advfirewall firewall delete rule name=”wsl”

ポートフォワード(PowerShell)

 

GUI

geditなど、使う場合

sudo apt install gedit
sudo gedit /etc/samba/smb.conf
で起動できる。

Samba

・インストール

sudo apt update
sudo apt install samba

・共有フォルダ

sudo vim /etc/samba/smb.conf

[TEST]
path = /home/user
writable = yes
guest ok = yes

を追加。
([]が共有名になる。)

・パーミッション
sudo chmod o+rwx user

Samba-AD

・conf削除
sudo rm -f /etc/samba/smb.conf

・provision
sudo samba-tool domain provision –use-rfc2307 –interactivegyou

SSH接続

sudo apt update
sudo apt install openssh-server

sudo systemctl start ssh
system has not been booted with systemd as init system …
というメッセージが表示される。

通常PID1がsystemdだが、WSL2においては/initがPID1になっている模様。

sudo /etc/init.d/ssh start
sshd: no hostkeys available — exiting.
というメッセージが表示される。

sudo ssh-keygen -A

sudo vim /etc/ssh/sshd_config
から
PasswordAuthentication yes

これでTeraTermからlocalhost:22で接続できる。

・リセットする場合
アプリと機能>Ubuntu>詳細オプション>リセット
スタートメニューにあるUbuntuから起動するとユーザー名、パスワード
を決めるところから。

.NET Core SDKのインストール

https://docs.microsoft.com/ja-jp/dotnet/core/install/linux-ubuntu
を参考にする。

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb

sudo dpkg -i packages-microsoft-prod.deb

sudo apt-get update; \ sudo apt-get install -y apt-transport-https && \ sudo apt-get update && \ sudo apt-get install -y dotnet-sdk-3.1

・作成方法(WSL)

アプリ作成
dotnet new console -o myapp

実行
dotnet run
(myappの中で実行)

・作成方法(Visual Studio)

Visual StudioでASP.NET Core Webのプロジェクトを作成し、プロジェクトの右クリックから発行をして、WSL側のフォルダに保存。

転送フォルダにて、
dotnet WebApplication1.dll
を実行

・自動起動

WSLなので.profileに入れてプロセスと同時に立ち上げる。

/usr/bin/dotnet /mnt/g/Dropbox/Workspace/Bash/html/WebApplication1.dll > /dev/null 2>&1 &

テスト用のWordPressをインストールする

sudo apt-get update

・Apache2

インストール
sudo apt-get install apache2

起動
sudo /etc/init.d/apache2 start

・wget
sudo apt-get install wget

・PHP
sudo apt-get install php
sudo apt-get install libapache2-mod-php
sudo /etc/init.d/apache2 restart

とりあえずこれでPHPファイルは実行できるようになる。

・MySQL
sudo apt-get install mysql-server
sudo apt-get install php-mysql

データベース作成
mysql > set password = ‘1234’;
mysql > create database wpdb;

・WordPress
sudo wget https://ja.wordpress.org/latest-ja.tar.gz

解凍
sudo tar -zxvf latest-ja.tar.gz

/var/www/html(http://localhost/解凍フォルダ名)
にブラウザからアクセス。

wp-config.php ファイルに書き込みできません。
とでる場合。

まず、
/etc/apache2/envvars
を開き、
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
の部分でユーザー名を確認し、
sudo chown -R www-data:www-data 解凍フォルダ名
を実行する。

VBA 行数確認

各シートそれぞれ力技でループしていて随分時間がかかるなってときがある。特定の列が空白になるまでとか、Endなど特定の単語がでてくるまでとか、ループの判定の作り方は色々あるのだけれど、UsedRangeを安易に使って悪さしていることがあった。

シートを毎回VBAで作り直す処理なら問題ないけど、固定シートに入力してもらう場合CurrentRegionやUsedRangeは注意が必要ということ。

C# Encoding/Byte/Stream/IO メモ

覚えてられない内容。少しずつまとめる。

Encoding

・メソッド
System.Text.Encoding.GetEncoding(“utf-8”)

・静的プロパティ
System.Text.Encoding.UTF8

・コンストラクタ
new System.Text.UTF8Encoding(false)
ASCIIとUnicodeは、Encodingクラスから派生した専用クラスがあり、falseにするとBOM無しにすることができる。

Byte

・String -> Byte[]
byte[] bytes = Encoding.UTF8.GetBytes(string);

・Byte[] -> String
string text = System.Text.Encoding.UTF8.GetString(bytes);

・Byte[] -> StreamReader -> String
var r = new System.IO.StreamReader(bytes, Encoding.UTF8);
r.ReadToEnd();

Stream/Reader/Writer

TextReader系

エンコード指定し、文字の入出力が基本。
TextReader系は、ReadToEndやReadLineが使える。
順次アクセスseekが使えない。

System.IO.StreamReader
System.IO.StreamWriter
System.IO.StringReader
System.IO.StringWriter

Stream系

バイトの入出力が基本。
基本seekできる。

System.IO.FileStream
System.IO.MemoryStream
System.IO.BufferedStream

TextReaderとStream

ファイルから文字を読むとき、FileStreamとStreamReaderがある。FileStreamはランダムアクセスでseekが使える。

Streamの型を受け付けるところではTextReaderは使えない。

・例(XmlSerializer -> MemoryStream -> Byte[] -> String)

ファイル/フォルダ

・フォルダ一覧
Directory.GetDirectories
Directory.EnumerateDirectories

・ファイル一覧
Directory.GetFiles
Directory.EnumerateFiles

・ファイル名
Path.GetFileName
Path.GetFileNameWithoutExtension

・ディレクトリ名
Path.GetDirectoryName

・ファイルの読み書き(Reader/Writerのラップ)
File.WriteAllLines
File.ReadAllLines
File.WriteAllText
File.ReadAllText

・存在確認
File.Exists
Directory.Exists

C# observer

通常パターン。

C# IObserverメモ

C# 仕入管理(仕入帳)業務用

業務に使えるソフトということで作成。