問題タブ [vcredist]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
visual-studio - 特定のバージョンのvcredist_x86.exeがすでにインストールされているかどうかを検出するにはどうすればよいですか?
インストールの一部としてvcredist_x86.exe(バージョン9.0.xx)を実行するインストーラーを作成しました。ただし、インストールする前に、ユーザーのシステムに既に存在するかどうかを確認したいと思います。基本的に、DLLが存在することだけでなく、それらが正しいバージョン番号を持っていることを検出する必要があります。それを行うための信頼できる方法はありますか?
私はNSISを使用していますが、どんな解決策でも歓迎します。
c++ - ターゲット コンピューターに確実に存在するプライベート アセンブリが見つかりません
Visual C++ ランタイムをプライベート アセンブリとして配布しています(つまり、msvcp90.dll、msvcm90.dll、msvcr90.dll、および Microsoft.VC90.CRT.manifest を、Microsoft.VC90.CRT.manifest と同じディレクトリにある Microsoft.VC90.CRT フォルダーに配置します)。アプリの実行可能ファイル)。これまでのところ、すべての非開発マシン (数百台) で問題ありませんでした。ただし、これらのアセンブリを完全に見つけることができない特定の問題のあるマシンを追跡してきました。
XP を実行しているため、アプリを起動しようとすると、次のメッセージが表示されます。
アプリケーションの構成が正しくないため、このアプリケーションを開始できませんでした。アプリケーションを再インストールすると、この問題が解決する場合があります。
アプリの exe でDependency Walkerを実行してもらいましたが、msvcp90.dll または msvcr90.dll が見つからないことが示されました。次に、アプリのディレクトリの内容を追跡してもらいました。これにより、「欠落している」DLL が実際にはあるべき場所 (exe に隣接する Microsoft.VC90.CRT ディレクトリ内) にあることが明らかになりましたが、それでもアプリは起動時にそれらが見つからないだけです。
最後の手段として、再配布可能ファイルを直接インストールしてもらいますが、追加のインストーラーを使用せずに DLL を引き続き配布したいので、これは主にトラブルシューティングのためだけです (私たちのアプリはインストールなしで簡単に実行できます)。
おそらく、アプリ独自のマニフェストも含める必要があります。
編集: 以前、 が存在しないと述べましたがdependentAssembly
、それが生成されていることに気付いたので、上記のマニフェストは、それが作成する実際のマニフェストを反映しています。
プログラムがこれらの依存関係を単に見つけられない原因は何ですか? 他の多くのコンピューターでも問題なく実行できることがわかりましたが、そのほとんどは、これらのランタイムをこれまで見たことがありません。私はおそらく何か基本的なものを台無しにしています (私のマニフェストで最も可能性が高い) が、これまでのところ 99% のクライアント コンピューターで正常に動作します。
おまけとして、この記事はプライベート アセンブリの優れた要約ですが、これまでのところ、問題の解決には役立っていません。
更新: DLL を EXE と同じディレクトリに移動した後も、起動に失敗しました。次に、再配布可能ファイルをインストールした後、正常に起動しました。そのため、ローカル ディレクトリを検索していなかったか、何らかの理由でローカル DLL が受け入れられないと見なされたようです。
windows - MSVC 再頒布可能パッケージのインストールに管理者権限が必要なのはなぜですか?
これは、Windows にアプリケーションを展開する上で非常にイライラする部分です。2 つの選択肢があります。必要な DLL をアプリケーション ディレクトリに再配布するか、マージ モジュールと管理者権限を使用してシステム全体にインストールします (まだインストールされていない場合)。Microsoft は単純に DLL にデジタル署名し、それらの DLL を昇格せずに WinSxS にインストールできるように思えます。.NET でも同じことができます。
私のコードの一部は /MT スイッチと相互に排他的な C++/CLI であるため、静的ランタイムと CRT をまったく使用しないことはオプションではありません (おそらく、STLPort などの他の C++ stdlibs とも排他的ですが、私はそれを確認していません)。 )。
vcredist - vcredist_x86: install.res.????.dll というメッセージが表示される
私たちのセットアップでは、パラメーター/qb を指定して vcredist_x86.exe を実行し、サイレントにします。これはすべてのテスト システムで機能しますが、残念ながら、お客様のコンピューターでインストールを行うとメッセージが表示されます。
下の画像を見てください。このメッセージの出所を推測または知っている人はいますか? 私はこことGoogleで何も見つけることができませんでした.誰かが英語のWindows XP(顧客が持っている)では起こるがドイツ語では起こらないと言いました.
InnoSetup には完全な管理者権限があり、[Run] セクションで vcredist_x86.exe バージョン 9.0.21022.8 を起動します。私たちのアプリケーションは VC で書かれていませんが、GAUSS ランタイム エンジンを使用しています。
windows - vcredist を MSI インストーラーの起動条件にするにはどうすればよいですか?
セットアップ プロジェクトがあり、アプリケーションのインストーラーのvcredist_x86 2008 & 2010 起動条件を作成したいと考えています。これを行う方法はありますか?もしそうなら、どのように?
msdn - vcredistをダウンロードする場所は?
この質問をするのは少しばかげていると思いますが、これが他の人にも役立つことを願っています。
背景:私たち/私は、Visual Studio 2008 SP1(VC9)を使用していくつかのソフトウェアを開発しています。vcredist
CDのソフトウェアに沿って提供したいと思います。
今、私はグーグルに「vcredist 2008 sp1をダウンロードする」と尋ねるのに慣れていて、通常それは私を次の(またブックマークされた)ウェブページに導きます:
- https://www.microsoft.com/en-us/download/details.aspx?id=5582(32ビット)
- https://www.microsoft.com/en-us/download/details.aspx?id=2092(64ビット)
入手可能になったのと同じURLから異なるバージョン(9.0.30729。01以降9.0.30729。17)をダウンロードしたと思います。現在、そのページでは.17のみが利用可能です。さて、顧客から苦情があり、9.0.30729があると言われました。6161が利用可能ですが、見つかりません。私が得ることができた最も近いものは9.0.30729でした。5677:
- その特定のバージョンをグーグルで検索すると、次のページに移動します:http ://support.microsoft.com/kb/2538243これは、セキュリティ更新プログラムが利用可能であると言っています。
- リンクされたセキュリティ情報https://technet.microsoft.com/en-us/security/bulletin/ms11-025には、影響を受けるvcredist 2008 sp1と、vcredist2008の更新バージョンと思われるものへの新しいリンクが記載されています。 sp1の名前は少し異なりますが、名前に「mfc」が含まれています:https ://www.microsoft.com/en-us/download/details.aspx?id=26368
- ファイル名、ファイルサイズ、およびバージョン番号は、これらがvcredist2008sp1の更新バージョンであることを示しています。これはバージョン9.0.30729です。5677
常に最新バージョンをプルできるURLは1つありますか?
新しいvcredistについて通知する通知システム(メーリングリスト、RSSフィードなど)はありますか?
64-bit - msvcr100.dll エラー - WinXP x64
VS2010 で作成したプログラムを XP 64 ビット システムで実行しようとしています。XP-SP3 32bit およびすべての Windows 7 バージョンで問題なく動作しました。ただし、XP 64 ビットで実行している場合、次の参照エラーを表示してロードしようとするとクラッシュします: ModName: msvcr100.dll ModVer: 10.0.30319.1 Offset:00000000000760d9
それが参照するファイルは、プログラムとともにインストールされる2010 vcredistに関係していることに気付き、最新バージョンを確認したところ、インストールしていたものにXP-sp3が必要であることがわかりました(64ビットXPには存在しません)。そのため、最新の 2010-SP1 Redistributable (XP-SP3 が必要とは言っていない) をインストールしようとしましたが、それでも同じエラーが発生します。
XP 64ビットでプログラムを実行しようとしたときに、このようなエラーが発生した人はいますか? それが vcredists によって引き起こされていると考えるのは、間違った方向を見ているのでしょうか? それとも、SP3 を取得していない XP OS で 2010 vcredists を必要とするプログラムを実行することは不可能ですか?
c++ - C++: マニフェストと異なるディレクトリからの DLL の動的ロード
私が達成しようとしていることの長い物語
DLL をプラグインとして動的にロードするプログラムに取り組んでいます。Microsoft Visual C++ 2008 を使用してプログラムをコンパイルしています。それでも、Qt が動作するすべての Visual C++ バージョンをサポートする必要があると仮定しましょう。プログラム ディレクトリのレイアウトは次のとおりです。
program.exe
すべてのプラグイン DLL ファイルを検出し、それらに対して LoadLibrary() を実行し、特定の署名関数を呼び出して、それが実際にプラグインであるかどうかを調べます。これは、MSVC90 用の vcredist がインストールされているコンピューターでうまく機能します。当然のことながら、プログラムをすべてのコンピューターで動作させるには、msvc*.dll ファイルと適切なマニフェスト ファイルを使用してプログラムを再配布する必要があります。Qt DLL を実行するには redist も必要です。
ここで、選択した Visual Studio のバージョンに応じて、適切な redist DLL とマニフェストを自動的にコピーするように cmake をセットアップしました。簡単にするために、私は MSVC90 を使用していると仮定します。redist がプログラム ディレクトリにコピーされると、レイアウトは次のようになります。
マニフェスト ファイルのバグについて: http://www.cmake.org/pipermail/cmake/2008-September/023822.html
問題
このレイアウトのプログラムは、redist がインストールされていないコンピューターで動作するようになりましたが、プラグインは読み込まれません。プラグインをロードするには、次のいずれかを実行する必要があります。
- マニフェスト ファイルを
plugins/
ディレクトリにコピーします。msvc*.dll ファイルへのすべての参照をマニフェスト ファイルから削除します。これは機能しますが、使用されている MSVC のバージョンに応じて、編集されたマニフェスト ファイルの異なるバージョンをサポートする必要があるため、うまくいきません。また、2008 以外の Visual Studio でこれが壊れないかどうかもわかりません。 - redist 全体を
plugins/
ディレクトリにコピーします。これにはマニフェスト ファイルを変更する必要はありませんがprogram.exe
、msvc*.dll ファイルをプラグインと見なして愚かにもロードしようとします。当然、これは正常に失敗するため、大きな害はありません。もう 1 つの欠点は、プログラム パッケージのサイズが 1 MB 以上大きくなることです。ただし、これらの問題はどちらも私が一緒に暮らすことができるものです。 - /MT スイッチを使用してプラグインをコンパイルします。
program.exe
簡単なテストでは、これが実際に機能することが示されていますが、Qt と/MDの両方が将来的に壊れないかどうかはわかりません。
質問)
最善の解決策は何ですか? 正しい解決策は何ですか?正しい解決策が複数ある場合、ベスト プラクティスはどれですか。これをやろうとしたのは私が初めてですか?
更新 1 (2012 年 11 月 18 日)
質問には答えられないままですが、私は最も頭痛の少ないルートを選ぶことにしました。今まで私は解決策 1 を使用してきましたが、それを使い続けることにしました。CMake は、ユーザーが 2008 以外のバージョンの MSVC を使用していることを検出すると、自動パッケージングが完全にはサポートされていないことを示す警告メッセージを表示します。
windows-xp - エラー: COREDLL.dll が見つかりません
プログラムを実行しようとしていますが、次のエラーが発生します。
エラー: COREDLL.dll が見つからなかったため、このアプリケーションを開始できません
このエラーは、WinXP および Win7 で発生します
Microsoft Visual C++ 2010 Redistributable Package (x86) をダウンロードしましたが、このエラーが続きます。
それは何でしょうか?どうすれば解決できますか?
ありがとう、