Visual Studio 2017 で Visual C++ “14” ランタイム ライブラリをインストーラーに含めた場合に発生する問題について

こんにちは、Visual Studio サポート チームです。 今回は Microsoft Visual Studio 2017 に含まれる Visual C++ “14” ランタイム ライブラリを必須コンポーネントに含めてインストーラーを作成する場合に発生する可能性がある問題と対処方法をご案内いたします。   現象 a) [アプリケーションと同じ場所から必須コンポーネントをダウンロードする] を指定して Visual C++ “14” ランタイム ライブラリを必須コンポーネントに指定した場合、発行時にエラーが発生する。 b) Visual C++ “14” ランタイム ライブラリが既にインストールされているにも関わらず、インストーラーの実行時にランタイム ライブラリのインストールが求められる。 これらの現象は、ClickOnce アプリケーションの発行や、Microsoft Visual Studio 2017 Installer Projects 拡張機能を使用してセットアップ プロジェクトのビルドを行い setup.exe を生成する場合に発生します。   原因 この現象は、Visual Studio 2017 のインストールで同時にインストールされる Visual C++ “14” ランタイム ライブラリのブートストラップ パッケージに含まれる…


Visual Studio 2012 以降のバージョンにおけるセットアップ プロジェクトについて

こんにちは、Visual Studio サポート チームです。 今回は Visual Studio 2012 以降のバージョンにおけるセットアップ プロジェクトの扱いと、セットアップ プロジェクトの作成にご利用いただける拡張機能についてご案内します。   Visual Studio を使用して Windows インストーラー形式のインストーラー パッケージを開発する方法として、Visual Studio 2010 以前のバージョンではセットアップ プロジェクトが用意されていましたが、Visual Studio 2012 以降ではセットアップ プロジェクトは提供されておらず、多くのお客様では InstallShield などのサードパーティ製品をご利用いただいています。 しかしながら、従来のようにセットアップ プロジェクトを開発されたいというお客様からのご要望も多いことから、Visual Studio 2013 以降を対象として、Visual Studio 2010 以前のセットアップ プロジェクトと同等の機能を提供する Visual Studio 拡張機能が以下のとおり公開されています。   Microsoft Visual Studio 2013 Installer Projects https://marketplace.visualstudio.com/items?itemName=UnniRavindranathan-MSFT.MicrosoftVisualStudio2013InstallerProjects Microsoft Visual Studio 2015 Installer Projects https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.MicrosoftVisualStudio2015InstallerProjects…


Visual C++ 2010 の setlocale 関数の問題について

こんにちは、Visual Studio サポート チームです。 今回は、Visual C++ 2010 で確認されている setlocale 関数の問題と対処方法についてご案内します。なお、本問題は Visual C++ 2012 以降のバージョンでは修正されています。   現象 Visual C++ 2010 の setlocale 関数において、以下のような現象が発生する場合があります。   a) 引数に不正なロケール (例 : “Japanese_Japan.9326389″) を指定しても、NULL ポインターが返却されない b) 上記 a) の問題が発生した状態から、正しいロケールを指定して setlocale 関数を実行しても、処理に失敗して NULL ポインターが返却される   原因 本現象は Visual C++ 2010 の setlocale 関数の不具合に起因して発生しています。製品の不具合でご迷惑をおかけしておりますこと深くお詫び申し上げます。本不具合は Visual C++ 2012 以降のバージョンの製品では修正されています。   対処策 a) の問題については、正しいロケールを指定するようアプリケーションを修正してください。ロケールの詳細については以下のドキュメントをご参照ください。…


Visual C++ の同時実行ランタイムを利用するアプリケーションがハングアップする問題について

こんにちは、Visual Studio サポート チームです。 今回は、Visual C++ で提供されている同時実行ランタイム (ConcRT : Concurrency Runtime) で確認されている問題と対処方法についてご案内します。この問題は Visual C++ 2010、2012、2013 で発生する可能性がありますが、Visual C++ 2015 以降では発生しません。   現象 ConcRT を使用するアプリケーションで、EnterCriticalSection 関数など、Win32 の同期オブジェクトを直接使用する処理を行うと、スレッド間でデッドロックが発生して、プログラムがハングアップする場合があります。   原因 Visual C++ 2013 以前の ConcRT では、Win32 の同期オブジェクトを直接利用しない形で内部の同期処理を実現していました。 この関係で、アプリケーション側のコードで Win32 の同期オブジェクトを直接使用すると、ConcRT 内の同期処理と アプリケーションで実装した同期処理の間でデッドロックが発生する場合があります。   対処方法 Visual C++ 2015 以降の ConcRT では同期処理の実装が見直され、Win32 の同期オブジェクトを直接的に利用する方法で統一されているため、この問題は発生しません。このため、可能であれば Visual C++ 2015 以降のバージョンへのバージョン アップをご検討ください。 バージョン アップを行うことが難しい場合は、Win32…


Visual Studio 2008 で作成したプロジェクトを変換すると MSB4211 の警告が表示される

こんにちは、Visual Studio サポートチームです。 今回は Visual Studio 2008 で作成した Visual C++ のプロジェクトを、Visual Studio 2010、2012、および 2013 のプロジェクトに変換した場合に、MSB4211 の警告が表示される現象についてご案内します。 なお、この問題は Visual Studio 2015 以降では修正されています。   現象 Visual Studio 2008 で作成したプロジェクトを、Visual Studio 2010、2012、および 2013 のプロジェクトに変換した場合に、以下の警告が表示される場合があります。   警告メッセージ例 ——————————– Sample.vcproj: MSB4211: C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets (87,5); プロパティ “TargetPlatformVersion” は初めて値に設定されますが、これは “C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120Microsoft.Cpp.Common.props(103,5)” で既に使用されています。 ——————————– ※ TargetPlatformVersion のマクロ名はプロジェクトにより異なるものが表示されます。   原因 本警告は Visual…


Visual Studio 2010 Service Pack 1 の入手方法について

こんにちは、Visual Studio サポートチームです。 今回は Visual Studio 2010  Service Pack 1 の入手方法についてご案内します。 Visual Studio 2010  Service Pack 1 のダウンロード センターからの公開は既に終了しています。Windows Update から入手することも可能ですが、オフライン環境に適用する必要がある場合などには、以下の方法で ISO ファイルを入手することもできます。 ISO ファイルの入手方法   A) MSDN サブスクリプションをお持ちの場合 1. MSND サブスクリプションのダウンロード ページにサインインします。   https://msdn.microsoft.com/ja-jp/subscriptions/downloads/   2. 「Visual Studio 2010 Service Pack」などのキーワードで検索し、「Visual Studio 2010 Service Pack 1 (x86) – DVD (Multiple Languages)」 をダウンロードします。    …


IUpdateSearcher::GetTotalHistoryCount メソッドで不正な値が取得される

こんにちは、Visual Studio サポート チームです。 今回は、Windows Update Agent (WUA) API の IUpdateSearcher::GetTotalHistoryCount を Windows 10 上で実行した場合に発生する問題と対処方法についてご案内します。 なお、この問題は Windows 10 Creators Update では修正されています。   現象 Creators Update 適用前の Windows 10 で IUpdateSearcher::GetTotalHistoryCount メソッドを実行すると、実際よりも多い履歴数が取得される場合があります。 また、本メソッドで取得された値を使用して IUpdateSearcher::QueryHistory メソッドを実行すると、取得される更新履歴のコレクションに不正なエントリが含まれてしまい、この不正なエントリのプロパティを取得しようとした場合などにエラーが発生します。   原因 本現象は Windows 10 における Windows Update データの保存方法の不具合に依存して発生します。 本不具合は Windows 10 Creators Update で修正されています。   対処方法 IUpdateSearcher::QueryHistory メソッドで取得される IUpdateHistoryEntryCollection では、以下のように、正常なエントリに続く形で不正なエントリが格納されます。…


Visual Studio 2017 のインストール後に Visual Studio SDK の COM 参照でエラーとなる現象について

こんにちは、Visual Studio サポート チームです。 今回は Visual Studio 2017 のインストール後に、Visual Studio SDK のコンポーネントを COM 参照している Visual Studio アドイン プロジェクトや Visual Studio 拡張機能プロジェクトにおいて、参照エラーが発生する現象と対処方法についてご案内します。 なお、本現象は Visual Studio アドイン プロジェクトや Visual Studio 拡張機能プロジェクトの開発時に発生する可能性のある問題ですが、ビルド済みの既存のアドインや拡張機能をご利用いただく際に問題が生じることはありませんので、この点はご安心ください。   現象 Visual Studio 2017 のインストール後、以前のバージョンの Visual Studio 拡張機能のプロジェクトなどで、Visual Studio SDK のコンポーネントを COM 参照している場合に、下図のような参照エラーが発生します。   Visual Studio 2017 インストール前 Visual Studio 2017 インストール後   また、ビルド時に次のようなエラー メッセージが出力されます。…


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…