Windows-API-commctrl.h mit Anwendung funktioniert nicht auf Maschinen ohne die Platform SDK

StackOverflow https://stackoverflow.com/questions/155191

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe etwas geschrieben, das die folgenden verwendet beinhaltet:

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

Dieser Code funktioniert auf zwei Maschinen mit dem Platform SDK installierte in Ordnung, aber nicht ausgeführt (weder Debug noch Release-Versionen) auf Neuinstallationen von Fenstern (VMs natürlich). Es stirbt mit dem sehr vertraut:

---------------------------
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   
---------------------------

Wie kann ich es machen auf Neuinstallationen laufen? Welche DLL ist es mit denen sie nicht finden kann? Meine Wette ist, auf commctrl, aber kann mich jemand aufklären, warum es nicht mit jedem Windows?

Weiter mehr, wenn jemand Tipps, wie so etwas zu debuggen, da meine CPP bereits rostig ist, wie es scheint:)

Bearbeiten - Was war für mich die Neuverteilung für Visual Studio ist das Herunterladen 2008. Ich glaube nicht, es ist eine gute Lösung - eine 2 MB-Datei herunterladen und installieren eine einfache 11K-Tool auszuführen. Ich denke, ich werde den Code ändern Loadlibrary zu verwenden, um die 2 oder 3 Funktionen, die ich von comctl32.dll benötigen. Danke an alle:)

War es hilfreich?

Lösung

Mit Dependency Walker. Herunterladen und Installieren von http://www.dependencywalker.com/ (nur entpacken zu installieren). Dann laden Sie Ihre ausführbare Datei. Das Tool markieren, welche DLL fehlt. Dann können Sie das verteilbare Pack finden, die Sie brauchen, um mit Ihrer ausführbaren Datei zu versenden.

Wenn Sie VS2005 verwenden, werden die meisten Fälle von http://www.microsoft.com/downloads/details.aspx?FamilyId=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=en , die alles beinhaltet benötigte Ex mit VS2005 erstellt laufen. Mit depends.exe Sie können eine leichtere Lösung finden, though.

Andere Tipps

Gemeinsame Kontrollen ist ein roter Hering . Ihr Problem ist, dass die Visual C ++ 8.0-Laufzeit - ich nehme an, Sie Visual Studio 2005 verwenden - nicht installiert ist. Entweder verknüpfen statisch auf die C / C ++ Laufzeitbibliothek oder den Runtime-DLL verteilen.

Sie haben dieses Problem mit einem C oder C ++ Programm, das das DLL verwendet. Sie könnten damit in VS weg 6.0 als msvcrt.dll mit dem Betriebssystem von Windows 2000 bis kamen und in VS.NET 2003 als msvcr71.dll kamen mit .NET Framework 1.1. Nicht mehr. Visual Studio 2005 und die spätere Verwendung Side-by-Side-Baugruppen verhindern DLL-Hölle, aber das bedeutet, dass Sie nicht einmal auf .NET verlassen 2.0 die genaue Version der C Runtime-Installation, dass Ihr Programm eingebauten in manifest Anwendungen. .NET 2.0 ist mscorwks.dll bindet an Version 8.0.50608.0 in seinem Manifest; eine VS-generierte Anwendung bindet an 8.0.50727.762 ab VS2005 SP1. Meine Erinnerung ist es eine Pre-Release-Version im Original (RTM) Version von VS2005 verwendet, was bedeutete, dass Sie eine Publisher-Richtlinien Mergemoduls bereitstellen mußten, wenn Sie die Mergemodule verwendet hat, die Bindung an die Version tatsächlich in dem freigegebenen zu umleiten Laufzeit Mergemoduls C.

Siehe auch Umverteilen von Visual C ++ Dateien auf MSDN.

Ich vermute, dass es versucht, eine Version von gemeinsamen Kontrollen zu finden, die nicht installiert ist. Sie können eine Manifest-Datei benötigen Sie die Version von gemeinsamen Kontrollen auf Ihr Zielbetriebssystem abzubilden. Außerdem müssen Sie sicherstellen, dass Sie die gleiche VC Runtimes installiert haben, die Sie verbunden waren.

Chris Jackson Blog

EDIT: Ein wenig suchen und ich habe bestätigt (meistens), dass es die Version Ihres VC ++ Runtimes, die schuld ist. Sie müssen die Versionen verteilen, die Sie mit gebaut. Die Plattform SDK enthält in der Regel ein Merge-Modul von diesen zu diesem Zweck, aber es ist oft ein VCRedist.exe für sie als gut. Versuchen Sie suchen Microsoft-Downloads.

KB94885

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top