マネージド スレッドを TerminateThread した場合に発生する .NET ランタイムの内部エラーについて

こんにちは、Japan Developer Support Core チームの松井です。今回は、.NET アプリケーションでマネージド スレッドを TerminateThraed したときに発生する .NET ランタイムの内部エラーについてご案内します。 .NET ランタイムの内部エラーあるいは致命的な実行エンジン エラーは、.NET アプリケーションで発生するトラブルとしてよくお問い合わせをいただくものの一つです。このエラーは .NET ランタイムが処理を継続できないような状況を検出した場合に発生しますが、その原因は .NET ランタイム自身の問題だけでなくアプリケーションの問題である場合もあり、トラブルシュートが難しくなる傾向があります。本記事でご案内する内容は .NET ランタイムの内部エラーを引き起こす一例ですが、問題のあるコーディングの回避や検出、トラブルシュート時の参考になれば...

Read more

Devcontainerを利用した自動環境構築

こんにちは、 Developer Support Core チーム インターン生の陳です。最近 Devcontainer について勉強し、本チームブログの執筆をテーマに実装したので、活用事例としてシェアしたいと思います。本日の目次は以下となります。 Devcontainer を使用した理由 Devcontainer の特徴 Devcontainer による環境構築方法 Devcontainer を使用した理由最初はメンターの木下さんから紹介していただき、すごく便利な機能だと感じ、活用に取り組み始めました。Devcontainer は Visual Studio の拡張的な機能で、編集しているファイルを事前に準備した Docker Container と同期することで、コンテナ内で実行結果を確認しながらの開発をスムーズに実現する機能です。本ブログでは Hexo というジェネレーターを利用...

Read more

.NET アプリケーションで GC 中に発生する例外コード 0xc0000409 のエラーについて

こんにちは、Japan Developer Support Core チームの松井です。今回は、.NET アプリケーションでガベージ コレクション (GC) の実行中にランタイムが例外コード 0xc0000409 を通知してアプリケーションが異常終了する事象について、一般的な例をもとにエラーの発生経緯や調査方法についてご紹介します。 1. 0xC0000409 のエラー コードについて0xc0000409 は STATUS_STACK_BUFFER_OVERRUN のエラー コードで、一般的にはシステムやランタイムがスタック領域におけるバッファー オーバーランを検出した状況を示しています。このエラーが発生すると、イベント ログには Application Error のソースで ID 1000 のログが以下のような内容で記録されます。 障害が発生しているアプリケーション名: Consol...

Read more

.NET Framework のプロファイル機能を利用する製品に起因する一般的な問題について

こんにちは、Japan Developer Support Core チームの松井です。今回は、.NET Framework のプロファイル機能を利用する製品に起因する一般的な問題についてご案内します。 .NET Framework のプロファイル機能.NET Framework では、.NET Framework 上で動作するアプリケーションの実行を監視するためのプログラム (プロファイラー) が利用するためのプロファイル API が提供されています。プロファイラーの開発者は、この API を利用してデバッグの支援や各種メトリクスの計測などの様々な機能をプロファイラー DLL として実装します。プロファイル機能を有効にしてプロファイラー DLL が登録されると、.NET Framework アプリケーションは共通言語ランタイムの初期化処理の過程でプロセスにプロファイラー DLL をロード...

Read more

SelectObject 関数利用時の注意事項

こんにちは、Japan Developer Support Core チームです。 今回は、アプリケーションで GDI を利用する際に注意していただきたいことをご案内します。2021 年 3 月 以降の更新プログラムを適用すると GDI 関連の処理が厳格化され、以前動作していた特定のコード(例:プリンターに画像を出力する)が失敗するようになりましたので、以下に該当される場合にはアプリケーションの修正をお願いします。 詳細情報SelectObject 関数で デバイス コンテキスト (Device Context、以下 DC) に デバイス依存ビットマップ (Device-Dependent Bitmap、以下 DDB) を設定する場合は、DCと DDB が適切に対応するよう、デバイスに対応する DC から生成したメモリDCに対し、同様にデバイスに対応する DC を指定して CreateCo...

Read more

.NET Framework 4.5.2、4.6、4.6.1 のサポート終了予定について

こんにちは、Japan Developer Support Core チームです。2022 年 4 月 26 日をもって .NET Framework 4.5.2、4.6、4.6.1 のサポートが終了することとなり、これ以降は、これらのバージョンの .NET Framework に対して、セキュリティ更新を含む修正や、技術サポートは提供されなくなります。これらのバージョンの .NET Framework をご利用のお客様は、お早めに、サポートされた新しいバージョンへの移行をご検討くださいますようお願いいたします。 対象 .NET Framework 4.5.2 .NET Framework 4.6 .NET Framework 4.6.1 ※ ただし、Windows 10 Enterprise LTSC 2015 上でご利用の .NET Framework 4.6 については...

Read more

VS2019 から、Xamarin.UITest で Xamarin.Forms アプリの UI テストをしてみよう!

こんにちは、Japan Developer Support Core チームです。 Xamarin.Forms アプリの User Interface (UI) テストを可能にするフレームワーク、Xamairn.UITest を皆様ご存じでしょうか? Xamarin.UITest Microsoft の Docs サイトや Developer Community サイトでは、よく「Xamarin.UITest クロスプラットフォームのテストプロジェクト」を利用したチュートリアルが紹介されていますね。今日は、必要なライブラリや UI Test の構成の理解を深めるために、この「Xamarin.UITest クロスプラットフォームのテストプロジェクト」を利用せず全て手作りで、Xamarin.UITest を使用した Xamarin.Forms アプリの UI Test にチャレンジ...

Read more

アプリケーションの起動時に自動的にツールをアタッチさせて例外発生時のダンプ ファイルを採取する

こんにちは、Japan Developer Support Core チームの早川です。 アプリケーションが例外によりクラッシュしてしまう問題の調査では、例外発生時のプロセスのダンプ ファイルを採取して解析することが 1 つの有効な手段となります。本ブログでも WER を使って Dump を採取する の記事で、OS に付属の機能である Windows Error Reporting (WER) を利用してクラッシュ時のダンプ ファイルを採取する方法をご紹介していますので是非ご覧ください。 WER は有効な機能ですが、first-chance 例外を検知するものでは無いことから、例えば、アプリケーションが利用しているサードパーティ製のミドルウェアが例外を独自にハンドリングして、プロセスとしては正常に終了させるといった処理を行われているようなケースではご利用いただけません。この他、アプリケーシ...

Read more

ClickOnce 信頼プロンプトで公開元が"不明な公開元です。"として表示される場合の原因と対処方法

こんにちは、Japan Developer Support Core チームの松井です。今回は、ClickOnce アプリケーションのインストール時に表示される信頼プロンプトで、公開元が “不明な公開元” として表示される場合の想定される原因と対処方法をご案内します。 ClickOnce 信頼プロンプトとは信頼プロンプトは、ClickOnce アプリケーションをインストールする際に、アプリケーション名や発信元、公開元などを表示してインストールして問題ないかユーザーに確認を求める次の図ようなダイアログです。 信頼プロンプトの公開元はアプリケーションの署名に基づいて表示されますが、次の図のように “不明な公開元” として表示される場合があります。 不明な公開元として表示される原因と対処方法結論から述べると “不明な公開元” は何らかの理由でアプリケーションの署名の有効性が検証できない場合に...

Read more

Process Monitor ログの採取手順

こんにちは、Japan Developer Support Core チームの松井です。今回は、Process Monitor の概要とログの採取手順をご案内します。Process Monitor は弊社が無償で公開している Sysinternals に含まれるツールの一つです。Process Monitor では、動作しているプロセスによるファイルやレジストリへのアクセス、プロセスやスレッドの起動や終了といったアクティビティについて、記録や解析を行うことが可能です。ファイルやレジストリなどに関する問題を調査するための直接的な手段としてだけでなく、お客様のアプリケーションの動作やプロセス間の関係性を正確に把握して調査方針を検討する目的などでも、情報採取をお願いさせていただく場合があります。 情報採取時の影響について情報採取の実施中はコンピューターの CPU やディスク IO の負荷が高まる...

Read more