C#覚え書き

※これはgraywingの覚え書きであるため、このページの記述に対して、うまく動かない等の質問はお受けできません。
・Local IP Address取得
・WSDLファイル組み込み
・二重起動防止
・正規表現
・証明手順
・サービスプログラム作成
・プロセスをウインドウ非表示状態で呼び出す
・Socket通信 TimeOut判断

・Excel操作
BACK
■Local IP Address取得

IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress localAddress = ipHostInfo.AddressList[0];

■WSDLファイル組み込み

メニューから「プロジェクト(P)」→「Web参照の追加(E)」を選択し、wsdlファイルのアドレスを入力し、「参照の追加」ボタン押下する。
これによりクラスが追加され、他のクラスと同様の使用が可能となる。


■二重起動防止

static void Main(){

	Mutex mlock = new Mutex(false, "識別文字列");

	/// 二重起動チェック
	if(mlock.WaitOne(0, false)){
		Application.Run(new Form1());
	}
	mlock.Close();

}

■正規表現

^ : 正規表現開始
$ : 正規表現終了
+ : 直前の文字の1回以上の繰り返し
* : 直前の文字の0回以上の繰り返し
? : 直前の文字の0または1回の繰り返し
. : 任意の1文字
| : 左値または右値のどちらか
[abc] : abcのどれか1文字
[a-c] : a〜cのどれか1文字
[^abc] : abc以外のどれか1文字
[^a-c] : a〜c以外のどれか1文字
{2} : 直前の文字 2文字(ex. [abc]{2})
{1,3} : 直前の文字 1文字以上3文字以下(ex. [abc]{1,3})


■証明手順

@秘密鍵で署名
※各コマンドはコマンドプロンプトにおいて入力する。

1.以下のようにコマンドを打ち込み、キー・ペアを作成してファイルに出力する。

sn -k [キー・ペアファイル名]

2.以下のようにコマンドを打ち込み、キー・ペアをコンテナに格納する。

sn -i [キー・ペアファイル名] [コンテナ名]

3.キー・ペアファイルを削除する。

4.AssemblyInfo.csにおいてAssemblyKeyNameの値に[コンテナ名]を指定する。

5.AssemblyInfo.csにおいてAssemblyTitle〜AssemblyTrademark、AssemblyVersion の値を設定する。
※AssemblyCultureは変更しないで""のままとする。

6.ビルド


A公開鍵を使用して開発継続(遅延署名)
※各コマンドはコマンドプロンプトにおいて入力する。

1.以下のようにコマンドを打ち込み、キー・ペアを作成してファイルに出力する。

sn -k [キー・ペアファイル名]

2.以下のようにコマンドを打ち込み、キー・ペアをコンテナに格納する。

sn -i [キー・ペアファイル名] [コンテナ名]

3.キー・ペアファイルを削除する。

4.以下のようにコマンドを打ち込み、公開キーを取り出す。

sn -pc [コンテナ名] [公開キーファイル名]

5.AssemblyInfo.csにおいて以下のように記述を変更する。
・AssemblyDelaySignの値をfalse→trueに変更
・AssemblyKeyFileの値に[公開キーファイル名]をフルパスで指定

6.AssemblyInfo.csにおいてAssemblyTitle〜AssemblyTrademark、AssemblyVersion の値を設定する。
※AssemblyCultureは変更しないで""のままとする。

7.ビルド

8.以下のコマンドを打ち込み、開発中のモジュールの署名の検証を無効にする。
※公開キー、カルチャー、バージョンが変わってしまったりすると、その都度このコマンドを実行する 必要がある。
※AssemblyVersionの値が"1.0.*"となっていると、ビルドの度にバージョンが変わってしまう。*を外しておく方がよい。

sn -Vr [モジュール名]

9.開発完了

10.以下のコマンドを打ち込み、署名を行う。

sn -Rc [モジュール名] [コンテナ名]

11.以下のコマンドを打ち込み、8.で無効にした署名の検証を有効にする。

sn -Vu [モジュール名]


■サービスプログラム作成

1.プロジェクト作成
「Windowsサービス」テンプレートを選択して、プロジェクトを作成

2.インストーラの追加(方法2種)
[デザイン]タブを選択し、プロパティに表示された「インストーラの追加」リンクを選択(方法1)

[デザイン]タブを選択し、デザイン画面において、右クリック。表示されたポップアップ
メニューから「インストーラの追加(I)」を選択(方法2)

3.ServiceInstallerの設定
ServiceInstallerプロパティにおいて、ServiceName、StartTypeを設定

4.ServiceProcessInstallerの設定
ServiceProcessInstallerプロパティにおいて、Accountを設定

5.インストール
コマンド:installutil [サービスEXE名]

6.アンインストール
コマンド:installutil /u [サービスEXE名]


■プロセスをウインドウ非表示状態で呼び出す

// プロセス作成
System.Diagnostics.Process p = new System.Diagnostics.Process();

// 呼び出しプロセス名を設定
p.StartInfo.FileName = "呼び出しプロセス名";

// 起動時ウィンドウ状態を非表示に設定
p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

// プロセス実行
p.Start();

// プロセス終了待機(必要な場合)
p.WaitForExit();

■Socket通信 TimeOut判断

const int WSAETIMEDOUT = 10060;	// ErrorNo WSATIMEDOUT値
・
・
try{
	// 通信処理
}catch(Exception ex_Read){
 if(ex_Read.InnerException != null && ex_Read.InnerException.GetType() == typeof(System.Net.Sockets.SocketException)){
	if (((SocketException)ex_Read.InnerException).ErrorCode == WSAETIMEDOUT){
			// TimeOut処理
		}
	}
}


BACK