MSHでGUIプログラミング
今日はWorking with Objectsを参考にGUIプログラミングです♪
GUIと言えば「system.windows.forms」
.NETではお馴染み、GUIと言えば「system.windows.forms」クラスです。
早速、Working with Objectsのサンプルを実行してみます。
$form = new-object system.windows.forms.form $form.topmost = $true $button = new-object system.windows.forms.button $button.Dock = "Fill" $button.Text = get-date $button.Add_Click({$button.Text = get-date}) $form.Controls.add($button) $form.showdialog()
すると、大量のエラーコード。
エラーコードを見ると、
new-object : Cannot find type [system.windows.forms.form]:
make sure the assembly containing this type is loaded.
「system.windows.forms.form」が見つからないようです。
とありますので、System.Windows.Forms.dllがロードされていないのでしょうか?
現在ロードされているアセンブリを確認してみましょう。
MSH C:\> [System.AppDomain]::CurrentDomain.GetAssemblies() GAC Version Location --- ------- -------- True v2.0.50215 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50215\mscorlib.dll False v2.0.50215 C:\Program Files\Microsoft Command Shell\msh.exe ・ ・ ・
確かに、System.Windows.Formsアセンブリ(System.Windows.Forms.dll)はロードされていないようです。
エクスプローラで「C:\WINDOWS\assembly」を開くと「System.Windows.Forms」が存在しますので、
GAC(グローバルアセンブリキャッシュ)からアセンブリをロードしましょう。
GACからアセンブリをロードするには、LoadWithPartialNameメソッド利用します。
MSH C:\> [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") GAC Version Location --- ------- -------- True v2.0.50215 C:\WINDOWS\assembly\GAC_MSIL\System.Windows.Forms\ 2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll MSH C:\>
アセンブリがロードされました。
再度、先ほどのサンプルを実行してみます。
$form = new-object system.windows.forms.form $form.topmost = $true $button = new-object system.windows.forms.button $button.Dock = "Fill" $button.Text = get-date $button.Add_Click({$button.Text = get-date}) $form.Controls.add($button) $form.showdialog()
成功です。フォームが表示されました。(^^)(画像参照)
ちなみに、LoadWithPartialNameメソッドでアセンブリロード後の、
ロードアセンブリ情報を表示したくない場合は、先頭に[void]をつけて下さい。
[void] [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")