2016-06-06 15 views
1

Ich schreibe ein C++ - Programm in VS2102 mit einigen Bibliotheken und Header-Dateien aus einer anderen Software, die diese Dateien als API anbietet (im "Software-Installationsordner") + \ include \ lib \ x86 oder \ include \ lib \ x64).Zugriff auf die Registrierungsdaten zum Festlegen des Linkers und Einfügen von Pfaden

Jetzt möchte ich sicherstellen, dass mein Programm auch dann funktioniert, wenn der Installationspfad unterschiedlich ist. Daher muss ich den Installationspfad aus der Registrierung extrahieren und die Link-Einstellungen für den Include-Pfad dynamisch ändern. Ist das möglich?

Bearbeiten Ich kompiliere mein Programm zu einer DLL für die spätere Verwendung in einem C# -Projekt. Ist es möglich, den Installationspfad (und damit den Linker und die Projekteinstellungen) auf eine globale Variable zu setzen, das Programm auf eine DLL zu kompilieren und diese Variablen später durch ein externes Programm vor dem ersten Laden zurückzusetzen der DLL über dllimport?

+1

Gibt es eine Umgebungsvariable für die zu installierende Software? – Niall

+0

Fragen Sie nach dem VS2012-Installationspfad oder Installationspfad für "andere Software"? Wenn der erste, dann verwenden Sie einfach die Umgebungsvariable 'VS120COMNTOOLS'. Um alle diese Variablen anzuzeigen, geben Sie im Befehlsinterpreter den Befehl 'set vs' ein. –

+0

Leider brauche ich einen Linker zu einer anderen installierten Software, die diese libs/header-Dateien als API anbietet. Ich habe keine Umgebungsvariable mit dem Installationspfad, aber ich könnte das (zur Laufzeit) mit der Registrierung extrahieren. – Robin

Antwort

1

MSBuild bietet eine Syntax zum Lesen von Werten (und Initialisieren von Buildeigenschaften) aus der Registrierung linked here und direct link here for VS2012.

Sie können mithilfe der folgenden Syntax System-Registry-Werte lesen, wo Hive die Registrierungsstruktur ist (zum Beispiel HKEY_LOCAL_MACHINE), Key ist der Schlüssel Name, SubKey ist der Name für Unterschlüssel, und Wert ist der Wert des Unterschlüssels.

$(registry:Hive\MyKey\[email protected]) 

den Standardwert für Unterschlüssel zu erhalten, lassen Sie die Wert.

$(registry:Hive\MyKey\MySubKey) 

Dieser Registrierungswert kann zum Initialisieren einer Build-Eigenschaft verwendet werden. Um zum Beispiel einer Build-Eigenschaft zu erstellen, die Visual Studio Web-Browser-Startseite steht, verwenden Sie diesen Code:

<PropertyGroup> 
    <VisualStudioWebBrowserHomePage> 
    $(registry:HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\[email protected]) 
    </VisualStudioWebBrowserHomePage> 
<PropertyGroup> 

einmal lesen, können Sie die Build-Eigenschaft in dem Projekt zusätzlichen umfassen und Bibliothekspfade verwenden.

Zum Beispiel könnte es aussehen wie;

<PropertyGroup> 
    <ThirdPartySoftware_1> 
    $(registry:HKEY_CURRENT_USER\Software\ThirdPartySW_1\@InstalledLocation 
    </ThirdPartySoftware_1> 
</PropertyGroup> 

Und zu den Projektdateien hinzugefügt werden, oder über eine .props-Datei enthalten.

Von Ihrer Bearbeitung ... sind die Buildanforderungen nicht mit den Laufzeitanforderungen identisch. Das Problem beim Laden der Laufzeit wird gelöst, indem sichergestellt wird, dass sich der richtige Ordner im Pfad befindet. oder eher für Ihr Szenario, verteilen Sie die richtige DLL für die Zielplattform.


Als Alternative können Sie diese auch nehmen als eine Umgebung Setup Aufgabe auf (oder als Post Aufgabe an die Software von Drittanbietern bezogen installieren).

in den Software-Installationsordnern + \include\lib\x86 oder \include\lib\x64

der Installationspfad der Software von Drittanbietern wie erforderlich zu "Software-Installationsordner". Zum Beispiel (in den Systemumgebungsvariablen);

Sobald dies erledigt ist, kann dies in der IDE verwendet werden, um den Include-Pfad hinzuzufügen;

$(ThirdPartySoftware_1)\include 

Und Bibliothekspfad;

$(ThirdPartySoftware_1)\include\lib\$(Platform) 

Die oben annimmt, dass die$(Platform) variable entweder x86 oder x64 ist. Manchmal generieren die Assistenten eine -Plattform für die x86.

+0

Ehrfürchtig, genau wonach ich gesucht habe! Danke für die schnelle Hilfe! – Robin