C#覚え書き
※これはgraywingの覚え書きであるため、このページの記述に対して、うまく動かない等の質問はお受けできません。
・Local IP Address取得
・WSDLファイル組み込み
・二重起動防止
・正規表現
・証明手順
・サービスプログラム作成
・プロセスをウインドウ非表示状態で呼び出す
・Socket通信 TimeOut判断
・Excel操作
・BACK
IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress localAddress = ipHostInfo.AddressList[0];
メニューから「プロジェクト(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();
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