2

次のインクルードを使用するものを書きました。

#include <math.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <commctrl.h>

このコードは、Platform SDK がインストールされた 2 台のマシンでは問題なく動作しますが、Windows のクリーン インストール (もちろん VM) では実行されません (デバッグ バージョンでもリリース バージョンでもありません)。それは非常によく知られていることで死ぬ:

---------------------------
C:\Documents and Settings\Someone\Desktop\DesktopRearranger.exe
---------------------------
C:\Documents and Settings\Someone\Desktop\DesktopRearranger.exe

This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.

---------------------------
OK   
---------------------------

クリーン インストールで実行するにはどうすればよいですか? 見つけられないのはどのdllを使用していますか?私の賭けはcommctrlにありますが、なぜすべてのウィンドウでそうではないのか誰かが教えてくれますか?

さらに、私のCPPはすでに錆びているように見えるので、誰かがそのようなことをデバッグする方法についてのヒントを持っているなら:)

編集 - 私にとってうまくいったのは、Visual Studio 2008 の再頒布可能ファイルをダウンロードすることです。2MB のファイルをダウンロードし、インストールして単純な 11K ツールを実行するのは良い解決策ではないと思います。LoadLibrary を使用して、必要な 2 つまたは 3 つの関数を comctl32.dll から取得するようにコードを変更すると思います。みんな、ありがとう :)

4

3 に答える 3

5

依存関係ウォーカーを使用します。http://www.dependencywalker.com/からダウンロードしてインストールします(解凍するだけでインストールできます)。次に、実行可能ファイルをロードします。ツールは、不足している DLL を強調表示します。次に、実行可能ファイルと共に出荷する必要がある再配布可能パックを見つけることができます。

VS2005 を使用する場合、ほとんどの場合はhttp://www.microsoft.com/downloads/details.aspx?FamilyId=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=enでカバーされます。これには、VS2005 で作成された EXE を実行するために必要なすべてが含まれています。 . ただし、depends.exe を使用すると、より軽量なソリューションを見つけることができます。

于 2008-09-30T21:39:20.447 に答える
1

一般的なコントロールは赤いニシンです。問題は、Visual C ++ 8.0ランタイム(Visual Studio2005を使用していると思います)がインストールされていないことです。C / C ++ランタイムライブラリに静的にリンクするか、ランタイムDLLを配布します。

DLLを使用するCまたはC++プログラムでこの問題が発生します。msvcrt.dllWindows2000以降のOSに付属しているVS6.0と、.NETFramework1.1に付属しているVS.NET2003では問題を解決できmsvcr71.dllます。もういや。Visual Studio 2005以降では、DLL Hellを防ぐためにサイドバイサイドアセンブリを使用していますが、これは、プログラムの組み込みマニフェストが使用するCランタイムの正確なバージョンをインストールする.NET2.0にさえ依存できないことを意味します。.NET2.0のmscorwks.dllマニフェストでバージョン8.0.50608.0にバインドします。VSで生成されたアプリケーションは、VS2005SP1の時点で8.0.50727.762にバインドされます。私の記憶では、VS2005の元の(RTM)リリースでプレリリースバージョンを使用していました。つまり、マージモジュールを使用している場合は、マージモジュールを使用して、実際にリリースされたバージョンにバインディングをリダイレクトするために、パブリッシャーポリシーのマージモジュールを展開する必要がありました。 Cランタイムマージモジュール。

MSDNのVisualC++ファイルの再配布も参照してください。

于 2008-09-30T22:42:59.030 に答える
0

インストールされていないバージョンのコモン コントロールを見つけようとしていると思われます。コモン コントロールのバージョンをターゲット オペレーティング システムにマップするには、マニフェスト ファイルが必要になる場合があります。また、リンク先と同じ VC ランタイムがインストールされていることを確認する必要がある場合もあります。

クリス・ジャクソンのブログ

編集:少し検索したところ、VC++ランタイムのバージョンが原因であることを(ほとんど)確認しました。ビルドに使用したバージョンを配布する必要があります。プラットフォーム SDK には通常、その目的のためにこれらのマージ モジュールが含まれていますが、多くの場合、それらの VCRedist.exe も含まれています。Microsoft のダウンロードを探してみてください。

KB94885

于 2008-09-30T21:35:52.530 に答える