Visual C++ 2015 でマルチバイト文字セットを利用するとコマンドライン引数を正しく取得できない

こんにちは、Visual Studioサポートチームです。 今回は、Visual Studio 2015 で マルチバイト文字セット (MBCS) を利用する際に確認されている問題についてご案内します。   現象 マルチバイト文字セット (MBCS) を利用した Visual C++ アプリケーションにおいて、コマンドラインの引数の最初の文字にマルチバイト文字がある場合に、WinMain 関数内で正しく引数を取得できない事象が確認されています。 引数の最初の文字が 1 バイト文字である場合には、正しく引数を得られますが、引数に漢字などのマルチバイト文字が利用されている場合、正しく引数を取得することができない場合があります。 マイクロソフトでは、本現象を Visual C++ 2015 のランタイム ライブラリ (ユニバーサル CRT) の問題として認識しており、調査を行っております。   対処方法 本現象は MBCS 固有の問題であるため、プロジェクトで使用する文字セットとして Unicode を利用した場合は、本現象は発生しません。 Unicode を利用することができない場合は、別途、GetCommandLine 関数を使用して引数を取得することができます。 なお、MBCS は既に非推奨となっているため、可能な限り Unicode への移行をご検討ください。   マルチバイト文字セット (MBCS) のサポート(日本語訳) https://msdn.microsoft.com/ja-jp/library/5z097dxa.aspx(英語原文) https://msdn.microsoft.com/en-us/library/5z097dxa.aspx   MBCS のまま対応する方法として、対応例 を2つ紹介します。  …


Windows 10 および Windows Server 2016 における Windows インストーラー パッケージの VersionNT プロパティについて

こんにちは。Visual Studio サポート チームです。 今回は、開発したアプリケーションを配布する場合などに、Windows インストーラー パッケージ (MSI) から OS のバージョンをチェックする際にご注意いただきたい点についてご案内します。     ご注意いただきたい点 Windows インストーラー パッケージでは、VersionNT プロパティを使用した条件 (Condition) を定義することで、インストール対象の OS を制御することが可能でした。しかし、以下のドキュメントに記載の通り、Windows 10 および Windows Server 2016 に対応する VersionNT の値は Windows 8.1 と同じ 603 となっています。   VersionNT value for Windows 10 and Windows Server 2016 https://support.microsoft.com/en-us/kb/3202260   このため、VersionNT を使用する方法では、Windows 8.1、Windows 10 、および Windows Server 2012…


日本語版の Windows 10 で ヘルプ ビューアー 1.1 のカスタム ヘルプ コンテンツ インストールに失敗する

こんにちは。Visual Studio サポート チームです。 今回は日本語版の Windows 10 環境において、Visual Studio 2010 付属の ヘルプ ビューアー 1.1 にカスタム ヘルプ コンテンツを追加する際に発生する可能性があるエラーと、その対処方法についてご案内します。   現象 日本語版の Windows 10 環境において、 Visual Studio 2010 付属の ヘルプ ビューアー 1.1 にカスタム ヘルプ コンテンツ を追加した場合、以下のエラー メッセージが表示され失敗することがあります。   Application イベント ログには以下のようなエラーが出力されます。   <イベント ログの内容> ——— ログの名前: Application ソース: HelpLibManager 日付: xxxx/xx/xx xx:xx:xx イベント ID: 1003 タスクのカテゴリ: (1) レベル: エラー キーワード:…


EV コード署名証明書を使用したClickOnce アプリケーションのマニフェスト署名について

こんにちは。Visual Studio サポート チームです。 今回は EV コード署名証明書を使用して ClickOnce アプリケーションにマニフェスト署名を行う際に、ご注意いただきたい事項をご案内します。 コード署名証明書を使用し、ClickOnceアプリケーションにマニフェスト署名した場合、アプリケーションの配布や実行時に「発行元」を表示し、「改ざんがされていない正規品」であることをユーザーに明示することが可能となります。 その際に使用する証明書は、大きく分けて通常のコード署名証明書と EV コード署名証明書の 2 種類があります。 EV コード署名証明書は、証明書を発行する認証局による審査に高い基準があり、また、署名時に二要素認証を求められるなど、通常の証明書と比べてより信頼性が高いものとなります。 EV コード署名証明書を使用して、ClickOnceアプリケーションに署名し、ユーザーに署名したアプリケーションを配布するためには、以下の要件を満たす必要があります。     ClickOnce アプリケーションの開発環境の要件 マニフェスト署名のため、EV コード署名証明書に対応したバージョンである、Visual Studio 2015 以降のバージョンをご利用頂く必要があります。 ClickOnce アプリケーションをインストールする環境の要件  マニフェスト署名の検証のため、.NET Framework 4.6 以降のバージョンを事前にインストールしていただく必要があります。     ClickOnceアプリケーションのマニフェスト署名  Visual Studio 2015以上のバージョンではEVコード署名証明書を使用したアプリケーションの署名に対応しています。 そのため、EVコード署名証明書を使用し、アプリケーションに署名をする際には、Visual Studio 2015をご利用ください。 なお、Visual Studio 2013 以前のバージョンで、EVコード署名証明書を使用して、アプリケーションに署名をした場合には、ビルドと発行は正常に終了しますが、実際には署名が正常に完了していないため、ClickOnceアプリケーション起動時のダイアログに表示される発行元は “不明な公開元” として表示されます。     ClickOnceアプリケーションの実行 ClickOnceアプリケーションの実行時に、EVコード署名証明書を使用した署名を検証するためには、.NET Framework 4.6以上のバージョンが予め、実行環境にインストールされている必要があります。…


Windows 10 上で .NET Framework 4.6.2 のインストールに失敗する

こんにちは。Visual Studio サポート チームです。 今回は、Windows 10 に .NET Framework 4.6.2 をインストールする際に発生する可能性のあるエラーと対処方法についてご案内します。 ※ Windows 10 Anniversary Update を適用されている環境には既定で .NET Framework 4.6.2 がインストールされていますので、個別にインストールする必要はありません。以下の内容は、Anniversary Update を適用することができない Windows 10 環境に .NET Framework 4.6.2 をインストールするケースを対象としています。   現象 Windows 10 上で .NET Framework 4.6.2 のインストールを行った場合に、以下のエラー メッセージが表示されインストールに失敗することがあります。 ログファイルには以下のように記録されます。 —————————————— Exe (C:\99e6d478c9a1da0ac4fd\Windows10.0-KB3151900-x86.cab) failed with 0x543 – 匿名レベル セキュリティ トークンを開けません。 Exe Log File: CBS.log…


オフライン環境で .NET Framework 4.6.2 をインストールする場合の注意点

こんにちは。Visual Studio サポート チームです。 今回は、弊社サポートにお問い合わせいただくことも多い .NET Framework 4.6.2 のインストール時の問題と対処方法についてご案内します。 .NET Framework 4.6.2 のインストールを検討されている皆様のお役に立てましたら幸いです。   現象 オフラインまたは、最新の Windows Update を適用できない環境で  .NET Framework 4.6.2 のインストールを行った場合に、以下のようなエラーが発生しインストールに失敗することがあります。 ————————– 次の理由により、.NET Framework 4.6.2 はインストールされませんでした : 証明書チェーンを、信頼されたルート機関として構築できませんでした。 ————————– また、このときログ ファイルには以下のような内容が記録されます。 ————————– Installation failed with error code: (0x800B010A), “証明書チェーンを、信頼されたルート機関として構築できませんでした。 ” (Elapsed time: 0 00:01:35). ————————–   原因 .NET Framework のインストーラー パッケージにはデジタル署名が施されており、インストール時にはデジタル署名に使用されている証明書の有効性が検証されます。証明書の有効性を検証する際には、証明書の発行元や、証明書が失効されていないかどうかなど、最新の情報をインターネット経由で取得して使用します。 このため、インターネットに接続していない環境や Windows…


.NET Framework 用の月例のロールアップの導入について

こんにちは。Visual Studio サポート チームです。 2016 年 10 月から、「.NET Framework 用の月例のロールアップ (.NET Framework Monthly Rollup)」と呼ばれる新しい更新プログラムのリリースをご利用いただけるようになります。詳細については、以下の .NET Framework 開発チームからのアナウンスをご覧ください。   Introducing the .NET Framework Monthly Rollup https://blogs.msdn.microsoft.com/dotnet/2016/08/15/introducing-the-net-framework-monthly-rollup/ (日本語訳) .NET Framework 用の月例のロールアップの導入について https://blogs.technet.microsoft.com/jpsecurity/2016/08/30/introducing-the-net-framework-monthly-rollup/   ※ 2016/10/13 追記 : 以下のドキュメントも公開されました。あわせてご参照ください。 .NET Framework Monthly Rollups Explained https://blogs.msdn.microsoft.com/dotnet/2016/10/11/net-framework-monthly-rollups-explained/ (日本語訳) .NET Framework 用の月例のロールアップの詳細 https://blogs.technet.microsoft.com/jpsecurity/2016/10/13/net-framework-monthly-rollups-explained/  


.NET Framework 4.6.2 用のブートストラップ (setup.exe) の問題

こんにちは、Visual Studio サポートチームです。 今回は、.NET Framework 4.6.2 を必須コンポーネントに含むブートストラップ (Setup.exe) を作成する際に生じる問題と、その対処方法についてご案内します。   .NET Framework 4.6.2 用ブートストラップ パッケージ 開発したアプリケーションを .NET Framework 4.6.2 とともに配布するため、.NET Framework 4.6.2 を必須コンポーネントとして含めたブートストラップ (setup.exe) を作成したいことがあります。 そのようなブートストラップを開発するためには、.NET Framework 4.6.2 用のブートストラップ パッケージを使用します。 .NET Framework 4.6.2 用のブートストラップ パッケージは、.NET Framework 4.6.2 Developer Pack に含まれており、Developer Packは、以下のダウンロードサイトから入手することができます。   Windows 7 SP1、Windows 8.1、Windows 10、Windows Server 2008 R2 SP1、Windows Server 2012、Windows Server 2012…


Nuget で入手したライブラリを使用するプロジェクトのビルド時に MSB3086 のエラーが発生

こんにちは、Visual Studio サポート チームです。 今回は Nuget で入手したライブラリを使用するプロジェクトのビルド時に MSB3086 のエラーが発生するケースについて、対象方法と合わせてご紹介いたします。   Nuget について Nuget は .NET Framework をベースとした開発環境に対応したパッケージ マネージャでオープンソース(OSS)製品です。Nuget パッケージ マネージャは、Visual Studio 統合開発環境のエクステンションとして利用することが可能であり、開発者はこのパッケージ マネージャを使用して「Nuget gallery」に公開されているソフトウェアやライブラリを利用することができます。   現象 Nuget で入手したパッケージを含むプロジェクトをビルドした際に、以下のように MSB3086 のエラーが発生する場合があります。 <エラー例> targets(2863,5): error MSB3086: タスクは SdkToolsPath “” またはレジストリ キー “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools-x86” を使用して “AL.exe”を見つけられませんでした。SdkToolsPath が設定されていること、SdkToolsPath の下の適切なプロセッサ固有の場所にツールが存在すること、および Microsoft Windows SDK がインストールされていることを確認してください。   原因 対象の Nuget パッケージが必要とする SDK…


参照側プログラムのリビルドが必要となるような DLL の変更について

こんにちは、Visual Studio サポート チームです。 ほとんどの .NET Framework アプリケーション開発プロジェクトでは、プログラムを再利用できるよう、ある程度の機能をひとまとまりにしたクラス ライブラリ (DLL) を開発、参照されているかと思います。今回は、そのような DLL に変更を加えた際に、DLL を参照するプログラム側でも再ビルドが必要になるケースについてご案内します。 DLL に実装されたメソッドの名前や引数などに変更が生じた場合、その DLL を参照するプログラム側でも変更内容に合わせてメソッドの呼び出し方を修正し、リビルドする必要があることはイメージしやすいかと思います。このような変更以外で、一見するとリビルドは必要ないように思われる場合でも、DLL を参照するプログラム側でリビルドが必要な場合があります。 DLL を参照する側のプログラムのリビルドの必要性については、プロジェクトの工数にも影響する重要なトピックですので、本稿が少しでもお役に立てましたら幸いです。 ※ 以下にご案内する内容の一部は、製品の仕様として公開させていただいているものではなく、あくまで、現時点の検証に基づくものであり、予告なく変更される可能性もあります。また、リビルドが必要なすべてのケースを網羅していることを保証するものではありません。何卒、ご了承ください。   DLL の変更時に参照元のプログラムも再ビルドが必要になるケース DLL 側で以下の 2 パターンの変更が行われた場合、変更された DLL を参照しなおして参照側プログラムもリビルドする必要があります。特に (1) の定数、デフォルト引数、および名前付き引数の追加/変更については、参照側のリビルドは不要と考えられがちですのでご注意ください。   (1) DLL と参照側プログラムの接点部分に変更が生じた場合 DLL に定義された以下の情報は、参照側プログラムのビルド時に参照側にも取り込まれます。このため、DLL 側でこれらに変更が生じた場合、参照側プログラムでも、新しい DLL を参照しなおしてリビルドする必要があります。   ・定数の値 ・列挙型 (型の名前、要素の名前、要素の順番、要素の挿入・削除、など) ・クラス、構造体、インターフェイス (型の名前、要素 (フィールド・プロパティ・メソッド) の名前、要素の削除、メソッドの戻り値の型・デフォルト引数・名前付き引数、アクセス修飾子、など) ・属性 (InternalsVisibleTo、Obsolete、Conditional、etc.) の有無  …