2008-12-05 6 views

Antwort

12

Sie können auch versuchen, Reg-Free COM für Ihr Projekt einzurichten.Es gibt eine Freeware namens Make My Manifest, die die meisten der Arbeit für Sie tun wird

EDIT Die MMM-Website ist down. Ich sehe here, dass der Autor Probleme mit ihrem Hosting hatte und einen anderen Ort zur Verfügung gestellt hat, um Make My Manifest zu bekommen - download it here.

5

es selbst gefunden:

Windows-zuerst im App-Verzeichnis sieht: Wenn SafeDllSearchMode aktiviert ist, wird die Suchreihenfolge wie folgt:

  1. Das Verzeichnis, aus dem die Anwendung geladen.
  2. Das Systemverzeichnis. Verwenden Sie die GetSystemDirectory-Funktion, um den Pfad dieses Verzeichnisses abzurufen.
  3. Das 16-Bit-Systemverzeichnis. Es gibt keine Funktion, die den Pfad dieses Verzeichnisses erhält, aber es wird gesucht.
  4. Das Windows-Verzeichnis. Verwenden Sie die GetWindowsDirectory-Funktion, um den Pfad dieses Verzeichnisses abzurufen.
  5. Das aktuelle Verzeichnis.
  6. Die Verzeichnisse, die in der PATH-Umgebungsvariablen aufgeführt sind. Beachten Sie, dass dies nicht den pro-Anwendungspfad enthält, der von dem App Paths Registrierungsschlüssel angegeben wird. Der App Paths Schlüssel wird nicht verwandt, wenn den DLL-Suchpfad berechnet.

Wenn SafeDllSearchMode deaktiviert ist, ist die Suchreihenfolge wie folgt:

1. Das Verzeichnis, aus dem die Anwendung geladen. 2. Das aktuelle Verzeichnis. 3. Das Systemverzeichnis. Verwenden Sie die GetSystemDirectory-Funktion, um den Pfad dieses Verzeichnisses abzurufen. 4. Das 16-Bit-Systemverzeichnis. Es gibt keine Funktion, die den Pfad dieses Verzeichnisses erhält, aber es wird gesucht. 5. Das Windows-Verzeichnis. Verwenden Sie die GetWindowsDirectory-Funktion, um den Pfad dieses Verzeichnisses abzurufen. 6. Die Verzeichnisse, die in der Umgebungsvariablen PATH aufgelistet sind. Beachten Sie, dass dies nicht den pro-Anwendungspfad enthält, der von dem App Paths Registrierungsschlüssel angegeben wird. Der App Paths Schlüssel wird nicht verwandt, wenn den DLL-Suchpfad berechnet.

nach: http://msdn.microsoft.com/en-us/library/ms682586.aspx

Aber Sie können umleiten, wo es für DLL sucht ist mit einem Manifest:

http://msdn.microsoft.com/en-us/library/aa375365(VS.85).aspx

5

Es Art verwirrend sein kann, weil jede Version von Windows, die Regeln Veränderung. Ältere Windows-Versionen durchsuchen den Pfad vor dem aktuellen Verzeichnis.

Eine einfache Lösung ohne Manifeste:

Wenn Ihre ausführbare Datei A.EXE, fügen Sie ein (0-Byte, leer) Datei im selben Verzeichnis A.EXE.local benannt ist - grünes Licht für ältere Versionen von Windows dies setzt das App-Verzeichnis des Pfades in der Suchreihenfolge.

+1

Dies ist die richtige Antwort auf Win2k +. Beachten Sie jedoch, dass die .local-Datei ignoriert wird, wenn A.EXE über ein eingebettetes Manifest verfügt oder wenn A.EXE.manifest vorhanden ist (um reg-free COM zu aktivieren, Ihr Programm DPI zu aktivieren, usw.) , da Manifeste eine Ersatztechnologie sein sollen. Wenn dies der Fall ist, können Sie in Ihrem Manifest einfach die Dateien auflisten, die Sie in Ihrem Anwendungsverzeichnis verwenden möchten, damit sie von dort geladen werden:

6

Clay Nichols Antwort über die Suchreihenfolge ist nicht ganz korrekt. Diese Suchreihenfolge gilt nur für Nicht-COM-Komponenten. I.e. nur einige DLLs und keine OCXs. Wenn Sie Ihre COM-Objekte registrieren, werden sie aus dem Verzeichnis verwendet, in dem sie registriert sind, unabhängig davon, was sich im lokalen Verzeichnis befindet, , es sei denn, Sie verwenden reg-free COM oder eine .local-Datei.

EDIT:

MakeMyManifest auch als automatisches Werkzeug gesprochen für Projekte Manifeste für VB6 zu schaffen, habe es selbst nicht ausprobiert. DirectCOM hat auch Fans, wieder habe ich es nicht ausprobiert.

BEARBEITEN Die MMM-Website ist nicht verfügbar. Ich sehe here, dass der Autor Probleme mit ihrem Hosting hatte und einen anderen Ort zur Verfügung gestellt hat, um Make My Manifest zu bekommen - download it here.

Es gibt eine halbautomatische Technik, um reg-freie COM-Manifeste zu generieren. Sie können die Manifeste mit Visual Studio 2008 erstellen (Sie können eine kostenlose Version wie Visual Basic Express Edition verwenden). Nehmen Sie dann ein paar Änderungen von Hand vor, um die Manifeste für die Verwendung in VB6 geeignet zu machen. Eine schrittweise Anleitung finden Sie in diesem MSDN-Artikel unter this section - ignorieren Sie den Rest des Artikels, in dem es um ClickOnce geht.

6

Das Platzieren von Komponentenbibliotheken im EXE-Ordner (mit oder ohne lokale Dateien) kann auch für die Hygiene der Zielcomputer schädlich sein.

VB6-Programme registrieren die Komponenten hier über den Selbstregistrierungspunkt hinter Ihrem Rücken, wenn sie nicht zuvor registriert wurden. Dann, wenn die Anwendung verschoben oder entfernt wird, belässt Sie den Benutzer mit einer gebrochenen Registrierung - möglicherweise fatal für später installierte Anwendungen mit einigen der gleichen Komponenten. Dies ist jedoch wahrscheinlich in Ordnung für anwendungsspezifische Komponenten, d. H. Ihre eigene DLL oder OCX, die nie von einer anderen Anwendung benötigt werden.

Der .local-Trick war eigentlich nicht für die Verwendung mit VB6-Programmen gedacht. Wenn er verwendet wird, muss der Installer die Komponenten kennen und ordnungsgemäß installieren und registrieren, wenn sie nicht bereits auf dem Computer vorhanden sind. Es war als manueller Hack gedacht, um Probleme mit DLL-Versionskompatibilität auf einzelnen Computern zu umgehen, keine Implementierungsstrategie.

Wechseln Sie zu SxS-Anwendungen und Assembly-Manifesten (Reg-Free COM und mehr) für eine bessere Lösung. DLL/COM Redirection (.local) war ein guter Versuch, aber es hat viele Warzen.