スポンサーリンク

2013年10月7日月曜日

CancelButton プロパティの仕様

 Windows フォームで Enter キーや Esc キーを押下した際に反応する AcceptButton プロパティと CancelButton プロパティ。
 そのフォームを Show で表示したか ShowDialog で表示したかによって押下後の動作が違うことを初めて知った。

 ShowDialog で表示した場合、CancelButton に設定したボタンを押下すると Close メソッドを読んでいなくても画面は閉じる。
 そのとき、FormClosing の CloseReason には None が設定されている。

 ちなみに、Show では画面は閉じないし当然 FormClosing イベントも発生しない。

2013年8月28日水曜日

オフライン PC に .NET Framework 4.0 をインストールする方法

 .NET Framework はフルパッケージをダウンロードしてもインストール時に Language Pack をダウンロードしてインストールしようとするので、結局インターネット接続が必要になってしまう。

 ここで、インストール時のオプションで同時に Language Pack をインストールしないように指定する。
 DOS 窓を立ち上げて、以下のようにオプションを追加して実行する。

D:\dotNetFx40_Full_x86_x64.exe /lang:enu

 これが終わったら、合わせてダウンロードした Language Pack をインストールすれば完了。

2013年8月27日火曜日

PowerShell スクリプトで DOS コマンドを管理者権限で実行する方法

 とある要望で、route print コマンドで表示されるインターフェースの一覧から特定のインターフェースの番号を取得して、それを route add コマンドと使ってルートを設定したい、というのがあった。
 DOS シェルだとこういうのは無理なのかな?というよりそれらしき情報が見当たらなかったので PowerShell でやることに。
 route print してその出力を受け取って、指定のインタフェースの行を抜き出して番号を取得。ここまではいい。
 それを使って route add するところで問題発生。管理者権限を付与した DOS 窓じゃないとルートが追加されない。
 つまり、PowerShell から発行する DOS コマンドに管理者権限を付与しなければならない。
 PowerShell シェル自体を管理者権限で起動し、そこからスクリプトを実行すればいける(と思う、試してはいない)。
 けど、そんな面倒なことはしたくなくて、クリック操作だけでやりたい。
 いろいろ調べたところ、海外のサイトにそれらしきものを発見。
 やり方は「管理者権限でプロセスを実行する」、まんまだけどまさにこの通り。
 要は、.NET Framework の Process クラスを使えばいい、と。
 ほうほう、こういうやり方もあるのかー、というちょっと目から鱗でした。
 重要なポイントだけ抜き出すと以下のような感じ。
$startinfo = new-object System.Diagnostics.ProcessStartInfo   
$startinfo.FileName = $exe  
$startinfo.Arguments = $arguments  
$startinfo.verb = "RunAs"  
$process = [System.Diagnostics.Process]::Start($startinfo)  
ただ、どうしても管理者権限で実行しますけどいいですか?的なダイアログは出ちゃう、仕方ないね。

2013年8月23日金曜日

Zend Framework 2 勉強中

勉強中。 ずーっと頭の中で構想を練っていたブラウザゲームを作りたい。 ただ、画才がないからテキストOnlyのゲーム。シンプルに。

2013年7月24日水曜日

StreamReader と StreamWriter

StreamReader と StreamWriter の基本的動作で気になったことがあったのでさくっと調べてみた。

僕は基本的に FileStream などの Stream を継承したクラスのオブジェクトを渡してインスタンス化するのが好き。
で、もしかしたら読み込んだデータを加工してそのまま同じストリームに書き込みたい、ということがあるかもしれない。

まあ、ないよね、普通。

2013年6月22日土曜日

Win32 アプリケーションのビルドで LNK1123 エラー

 Visual Studio 2010 で Win32 アプリケーションのプロジェクトを作成。
 何も手を加えずにビルドするとエラーが発生。何も書いてないのに……なんでやねん。

LINK : fatal error LNK1123: COFF への変換中に障害が発生しました: ファイルが無効であるか、または壊れています。

 調べてみたところ、Visual Studio 2010 の後に Visual Studio 2012 をインストールするとこの現象が起こるらしい。

 解決策としては、Visual Studio 2010 の SP1 をインストールすること。
 SP1 よりも古いバージョンの Visual C++ だとダメみたい。

 というわけで、Microsoft の公式ダウンロードから SP1 を入手してインストール。
 無事解決。