AutoCAD Mechanical 2008 起動時にエラー[1.5.-97]が発生する

症状

AutoCAD Mechanical 2008起動時に [FLEXlm License Finder] 画面が表示される。ここで、ライセンスサーバを指定しても認証してくれなかった。
キャンセルすると [AutoCAD Mechaniccal 2008 ライセンス警告] 画面が表示される。「エラー [1.5.-97]」

環境

製品名 AutoCAD Mechanical 2008
サービスパック SP2
バージョン B.219.16 (UNICODE)
ライセンスのタイプ ネットワーク
OS Windows XP SP3

原因

はっきりとは分からないが、ライセンスサーバがトラブっていたようです。CAD Forum - FlexLM (FlexNet) error code list.を参考にした。このサイトを見ると、1) lmgrdログファイルを確認し、2) lmrereadをやってみるように書いてある。時間がないので、ログの確認はしなかった。

回避方法

ライセンスサーバ上にlmrereadコマンドを見つけることができなかったため、次の手順で回避した。

  1. ライセンスサーバにログイン
  2. [スタート] メニューから[すべてのプログラム] > [Autodesk] > [Network License Manager] > [LMTOOLS] と選択する
  3. [Start/Stop/Reread]タブを選択する
  4. [Stop Server] を押し、次に[Start Server]を押す
    ※[ReRead License File]でも良さそうだが、確認してないので不明

Windows Updateを行うと、「Microsoft .NET Framework 3.0 : x86 言語パック (KB928416)」が必ず失敗する。

症状

Windows XP SP3をインストールし、Windows Updateを行うと、必ず「Microsoft .NET Framework 3.0 : x86 言語パック (KB928416)」のインストールに失敗する。

環境

OS Windows XP SP3
PC ほとんどがVirtualBox (バージョンもいろいろ)
Windows Update 社内Windows Service Update Serverにて管理

原因

.NET Framework 3.0 SP2がインストールされているのにSP2用の言語パックでなく無印(SPなし)の言語パックをインストールしようとしているため。

回避方法

1. Download Microsoft .NET Framework 2.0 Service Pack 2 (x86) 日本語 Language Pack from Official Microsoft Download Centerで [ダウンロード] ボタンをクリック。
2. [ファイルのダウンロード] ウインドウが表示されたら、[実行] をクリック。
3. 後は、インストーラに従いインストール。
4. 念のため、再起動する。
5. Download Microsoft .NET Framework 3.0 Service Pack 1 日本語 Language Pack from Official Microsoft Download Centerx86用の[ダウンロード] ボタンをクリック。
6. [ファイルのダウンロード] ウインドウが表示されたら、[実行] をクリック。
7. 再起動する。
8. しばらくは、「Microsoft .NET Framework 3.0 : x86 言語パック (KB928416)」のインストールが要求されるが、とりあえず無視する。次回Windows Update確認の時に無くなる。

匿名メソッド

匿名メソッドは、名前なしのメソッドである。
C# 1.1以前ではデリゲートを利用する場合、必ず名前付きのメソッドが必要だったが、これを省略できるようにしたものである。
(デリゲートはCでいうところの関数ポインタ型と考えればよいのかな?)
イベントハンドラとしての利用価値が高そうに感じる。

対象バージョン

C# 2.0以降

例1 デリゲートから宣言

全く実用的なサンプルではないですが、2つのint型を足し算するものである。

//デリゲートの宣言
delegate int Plus(int intA, int intB);

//匿名メソッドの実装
//ちなみに、パラメータが不要の場合、(int intA, int intB)は省略できる。
Plus plus_a_and_b = delegate (int intA, int intB) {
    return intA + intB;
};    // ; は必須

//匿名メソッドの実行
int int_c = plus_a_and_b(1, 3);

例2 既存の汎用デリゲートを利用する場合。

.NET Framework 2.0以降には Action、Predicate、MethodInvokerなどを利用すると、デリゲートの宣言が不要となる。

// Actionデリゲートを利用した匿名メソッド実装
Action<int> act = delegate(int param) {
    ...
};

// 匿名メソッドの利用
act(10);

例3 イベントハンドラとして利用する場合。

チェックボックスなどのClickイベントのイベントハンドラに匿名メソッドを使用する場合など利用できる。この場合、Clickはすでに定義されているので、実装するだけである。チェックボックスのClickイベントはEventHandlerデリゲートである。パラメータは (object sender,EventArgs e) であるが、使用しない場合は、次のように省略できる。

checkBox1.Clicked += delegate {
    ....
};

Clickedイベントが発生するたびに、上記のコードが実行される。

スコープ

匿名メソッドのパラメータは当然ながら実装内部でのみ利用可能である。外部からは利用できない。

Action<int> method1 = delegate (int param) {
};

param = 1;  // <--- これはNG

これに対し、外側で宣言した変数など、実装部分でアクセスできるものは利用可能である。

int local_var = 0;
Action<int> method1 = delegate (int param) {
    local_var = param;
};

...

method1(3);  // <--- この結果、local_varには3が入る。

注意1 実装する箇所

Webで次のような感じの例を見た。もちろん、そのページでもこの解釈は間違っていると説明している。

delegate int SampleDeligate(void);
DSampleDeligate[] method_list = new SampleDeligate[10];
...
for (int i = 0; i < 10; i++ ) {
    // 匿名メソッドの実装
    method_list[i] = delegate {
        return i;
    }
}

for (int j = 0; j < 10; j++ ) {
    // 匿名メソッドの実行
    Console.Write("{0} ", method_list[j]());
}

この結果は、次の下段のようになる。

0 1 2 3 4 5 6 7 8 9   // 期待したもの
10 10 10 10 10 10 10 10 10 10    // 実際の動作

匿名メソッドの実装はあくまで実装であり、コードが実行されるわけではないことに注意が必要である。上記例では実際に実行される箇所ではiは既に10になっているので、下段のような結果となる。

注意2 スコープ

前述したように、匿名メソッドで利用できる変数などは、匿名メソッドの実装箇所でアクセスできるものである。これは、実行する箇所でアクセスできるものではないので注意が必要である。
「注意1」の例で2つめのループ変数「j」を「i」に変えてみるとよくわかる。結果は、「注意1」と同じとなる。1回目と2回目で同じループ変数名となるが、匿名メソッドが参照するのはあくまでも実装していたときにアクセスしていた変数「i」である。

画面表示が乱れる

症状

Windows 7で使用中に時々画面表示が乱れる。
こんな感じに
最初は、グラフィクスボードが古いので、故障したのかと思った。しかし、画面のハードコピーにも表示されるので、Windows 7表示とVGAドライバに原因があるかもしれない。

環境

OS Windows 7 Professional
CPU AMD Athlon 64 3000+
メインボード Shuttle SN95G5
VGA ATI Radeon 9600
VGAドライバ ATI Radeon 9600 Series (Microsoft Corporation WDDM) 8.56.1.15
メモリ 1GB

原因

残念ながら原因は不明

回避方法

とりあえず、画面の色深度を32bitから16bitにし、再び32bitにしてみた。これで様子を見る。
(2010/8/13 追記)
結局一緒だった。
次にAMDのドライバを入れてみた。→ひどくなった。
セーフモードで起動→正常に表示
このことから考えると、VGAボードの能力を引き出している(=VGAボードに負荷のかかる) 状態で発生しているのか?
もとのMicrosoftのドライバに戻したところ、症状は今のところ落ち着いている。
(2010/9/8 追記)
8/13以降すぐにだめになった。DVI接続をアナログVGA接続にしたりしたが、だめだった。現在、EVGAの256-A8-N401-LR (GeForce 6200)を手配中。AGPなのでかなり高いけど……しかたない。

解決方法

不明...

Windows XP Embeddedの起動時に "STOP 0xC000021A" エラーで停止する

症状

FBAプロセスをHDDで実行し、SSDにコピーした後、SSDからOSを起動すると、"STOP 0xC000021A" エラーが発生する。

STOP: C000021A {Fatal System Error}
The Windows Logon Process system process terminated unexpectedly with a status of
0x00000000 (0x00000000 0x00000000)
The system has been shutdown.

原因

によると、Winlogon.exeかCsrss.exeが0xC000021Aエラーを発生している。システムファイルに不具合がある場合に出るようだ。
今回は、HDDとSSDで何かが異なっているためかもしれないが、原因を追及している時間がないので、取りあえず、究明は放置。

回避方法

書き込み回数を低く抑えたいが、仲介用HDDを使用せず、次の手順で行った。

  1. Target DesingerでOSイメージを構築
  2. オンボードSSDなので、一端HDDにイメージをコピー
  3. Windows PE等を使用し、HDDからSSDへコピー
  4. SSDから起動し、FBAプロセスを実行
  5. FBAプロセスが終了したら、シャットダウンし終了

解決方法

分かりません……