Windows 2000 上の .Net Framework 2/3/4 を 令和対応にする

TWEEN 7.50 をWindows 2000上で使ってて、過去のログ見てたところ、平成32年なるものが出てきてしまったので、「あれ、Tween 令和対応してなかったっけ?」って思ったのが始まり
調べてみると.Net Framework はバージョンによって、令和対応の方法が違うのだと分かりました。
日本の元号情報は、.NET Framework 3.5 以前のバージョンの .NET Framework ではもともとハードコーディングされたデータとして保持されていましたが、.NET Framework 4.0 以降と同様に、日本の元号のソースは、以前のハードコーディングされたデータから [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras]
レジストリ パスのレジストリ キーに変更されました。
Windows 用の更新プログラムでは、元号が発表された後に新しい元号に対応するレジストリ キーが追加される予定です。

どうやら、 .Net Framework 4.0 は レジストリに追加するだけで令和対応になるらしい

使ったサンプルコードがこんなやつ
using System;
using System.Collections.Generic;

namespace netdate
{
class Program
{
static void Main(string[] args)
{
var calendarJp = new System.Globalization.JapaneseCalendar();
var cultureJp = new System.Globalization.CultureInfo("ja-JP", false);
cultureJp.DateTimeFormat.Calendar = calendarJp;
var eraTable = new Dictionary<int, string>();
for (char e = 'A'; e <= 'Z'; e++)
{
int eraIndex = cultureJp.DateTimeFormat.GetEra(e.ToString());
if (eraIndex > 0)
eraTable.Add(eraIndex, e.ToString());
}

// 作成した年号テーブルを確認する
foreach (var item in eraTable)
Console.WriteLine($"[{item.Key}]={item.Value}");

}
}

令和対応してる場合
[4]=H
[1]=M
[5]=R
[3]=S
[2]=T

のような表示になる。令和非対応ならば

[4]=H
[1]=M
[3]=S
[2]=T

のになる

レジストリを試したところ、 .Net 4.0アプリだけ令和対応になった。
Windows 2000の .Net Framework 2.0 と 3.x を令和対応にするためには
windows6.0-kb4532944-x86.exe を使う
以下のファイルは XP互換なので取り出してC:\WinNT\Microsoft.NET\Framework\v2.0.50727 に放り込む
big5.nlp
bopomofo.nlp
ksc.nlp
mscordacwks.dll
mscorlib.dll
mscorsvc.dll
mscorwks.dll
normidna.nlp
normnfc.nlp
normnfd.nlp
normnfkc.nlp
normnfkd.nlp
prc.nlp
prcp.nlp
sortkey.nlp
sorttbls.nlp
sos.dll
system.data.dll
system.data.sqlxml.dll
system.dll
system.management.dll
system.runtime.remoting.dll
system.security.dll
system.web.dll
system.web.regularexpressions.dll
system.xml.dll
webengine.dll
wminet_utils.dll
xjis.nlp
後は、
gacinst.txt
C:\WINNT\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll
C:\WINNT\Microsoft.NET\Framework\v2.0.50727\system.dll
C:\WINNT\Microsoft.NET\Framework\v2.0.50727\system.data.dll
C:\WINNT\Microsoft.NET\Framework\v2.0.50727\system.data.sqlxml.dll
C:\WINNT\Microsoft.NET\Framework\v2.0.50727\system.management.dll
C:\WINNT\Microsoft.NET\Framework\v2.0.50727\system.runtime.remoting.dll
C:\WINNT\Microsoft.NET\Framework\v2.0.50727\system.security.dll
C:\WINNT\Microsoft.NET\Framework\v2.0.50727\system.web.dll
C:\WINNT\Microsoft.NET\Framework\v2.0.50727\system.web.regularexpressions.dll
C:\WINNT\Microsoft.NET\Framework\v2.0.50727\system.xml.dll

を作成し

gacutil /il gacinst.txt
ngen install system.dll
REM system.data.sqlxml.dll
REM system.security.dll
REM system.xml.dll
ngen install system.data.dll
REM system.runtime.remoting.dll
REM system.web.dll
REM system.web.regularexpressions.dll
ngen install system.Management.dll

を実行する

gacutil.exe は Microsoft.Net SDK に同梱されている
レジストリは
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras]
"1868 01 01"="明治_明_Meiji_M"
"1912 07 30"="大正_大_Taisho_T"
"1926 12 25"="昭和_昭_Showa_S"
"1989 01 08"="平成_平_Heisei_H"
"2019 05 01"="令和_令_Reiwa_R"

インストーラーは後日作成する( ˘ω˘ )

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です