Skip to main content

Windows 8での.NET 3.5有効化のエラー0x800F0906の解決方法

0x800F0906エラーはいくつかの原因で表示されます。例えばネットワークが正しく通信できない場合です。ネットワークも含めて全てが問題なさそうな場合でもこのエラーがでる場合、以下の解決策をご参照ください。

ドメイン環境のWindows 8/Windows 8.1ではドメインポリシーに制約される場合、コントロールパネルの「Windowsの機能の有効化または無効化」で.NET Framwork 3.5を有効化するとエラーコードの0x800F0906が出て、有効化が失敗することがあります。 Read More

.NET 配列Dictionary及びIDictionaryの活用

Dictionaryはキー(Key)/値(Value)を1対1ペア形式で保持するジェネリック型の配列です。内部にハッシュ配列アルゴリズムに基づいて実装されており、.NETプログラミングにおける汎用性の高い中堅クラスです。

このクラスを熟知し、様々な場面で活用すれば、効率をよくわかりやすいプログラミングの作成ができます。これらのクラスの継承およびインターフェースの活用について、ネコ技術自身の経験と発想も皆様に共有したいと思います。

Read More

Windows向けソフトウェアのコードサイン証明書の署名方法

コードサイン証明書が用意できましたらひとつの.pfxファイルになります。Windows向けソフトウェアのEXEやDLLなどをコード証明書を署名する際に、Signtool.exeというツールを利用すると簡単にできます。

Signtool.exeはMicrosoft Visual StudioまたはMicrosoft Windows Platform SDKをインストールした場合自動的にシステムにインストールされます。署名する際に必要なものは以下の通りです。

  1. コード証明書PFXファイル
  2. コード証明書パスワード
  3. コード証明書発行機関タイムスタンプURL(Time-stamp URL)
  4. Signtool.exe – Microsoft公式の署名ツール
  5. 対象ファイルEXE、DLLなど

1と2の証明書PFXファイルとパスワードをコード証明書の管理者からもらいます。3のタイムスタンプURLについて一般的にコード証明書の発行機関のホームページに掲載しています。分からない場合コード署名書の管理者や発行機関にお問い合わせください。

Read More

C#で文字列のサイズを正しく測定する(Measure String)

問題の再現

.NETのGraphics.MeasureStringメソッドを利用すると文字列のサイズを測定できますが、通常の方法での測定結果に少しずれが発生します。ここでは正確の測定結果を得る方法を説明します。

まずテスト環境を作成します。新しいWindows Formプロジェクトを作成し、Formのコードを以下のように準備します。(Form7をForm1に変更してください)

public partial class Form7 : Form
{
  public Form7()
  {
    InitializeComponent();
    Font = new Font(Font.FontFamily, 14);
    Size = new Size(300, 250);
  }

  protected override void OnPaint(PaintEventArgs e)
  {
    base.OnPaint(e);    var g = e.Graphics;
    var str = "文字列を測定する";    
    
    // ----ここはテストコード----
  }
}

Read More

Global.asaxのApplication_Errorが呼び出されない

開発環境でGlobal.asaxのApplication_Errorでエラー処理を実装して正常に動作しましたが、本番環境で動作しません。いろいろ試したら、IIS7以降のWebSiteの設定について、Web Applicationのアプリケーションプールを「Classic .NET AppPool」に切替すると問題が解消しました。

さらに試したら、実際そのアプリケーションプールの設定の「パイプラインモード」という設定を「クラシック」にすれば問題解消します。

このようにGlobal.asaxのApplication_Errorでアプリケーション全体のエラーを処理することができます。

public class Global : System.Web.HttpApplication
{
  protected void Application_Error(object sender, EventArgs e)
  {
    Exception ex = Server.GetLastError();

    if (ex is HttpUnhandledException)
    {
      // ...
    }
  }
}

Read More