Ist es möglich, PATH
Umgebungsvariablen ganz oder teilweise zu haben , die für den Typ des Images des laufenden Prozesses spezifisch sind (32-Bit / 64-Bit)? Wenn ich eine App in 64bit cmd.exe starte, möchte ich, dass sie die 64bit-Version der OpenSSL-Bibliothek auswählt. Wenn ich eine App in 32bit cmd.exe starte, möchte ich, dass sie die 32bit-Version der OpenSSL-Bibliothek auswählt.
14
echo %programfiles%
zeigt je nach cmd.exe-Typ einen anderen Pfad an, aberwhere ssleay32.dll
in beiden cmd.exe-Typen (32-Bit und 64-Bit) wird diese DLL nicht gefunden, und es werdenINFO: Could not find files for the given pattern(s).
Ideen angezeigt ?Die Antwort (als richtig markiert) von romka ist einfach und elegant, funktioniert aber leider nicht (zumindest unter Windows 7 und Windows 8 64-Bit habe ich meinen Test nicht weiter vorangetrieben).
Das Problem ergibt sich aus der Tatsache, dass die Systemvariable% PATH% nicht immer eine andere Umgebungsvariable erweitert: Sie funktioniert beispielsweise mit% SYSTEMDRIVE%, aber leider nicht mit% PROGRAMFILES%. Wikipedia schlägt vor, dass dieses Verhalten von der Indirektionsebene herrührt (% SYSTEMDRIVE% verweist nicht auf eine dritte env-Variable).
Die einzige Lösung, die ich gefunden habe, ist die Verwendung von File System Redirector Magic und der Verzeichnisse System32 / SysWoW64, wie in den Kommentaren vorgeschlagen.
Um die direkte Bereitstellung von DLLs im Windows-Verzeichnis zu vermeiden, die normalerweise schwer zu warten ist, kann stattdessen ein Softlink zu einem benutzerdefinierten Verzeichnis bereitgestellt werden (funktioniert unter Windows Vista und späteren Versionen von Windows):
Übrigens, es tut uns leid, dass ich die relevanten Beiträge nicht direkt kommentiert habe: Momentan ist in meinem Konto nicht genug Ruf, um dies zu tun.
quelle
Ja, das ist absolut möglich. Schreiben Sie einfach drei .bat-Dateien. Der erste sollte so aussehen:
Die zweite und die dritte .bat-Datei sind grundsätzlich identisch, außer dass sie sich in ihrem Namen unterscheiden. Die erste Datei heißt x86.bat und die zweite ia64.bat. Sie wird in einem Ordner namens bin abgelegt, der über der ersten bat-Datei liegt. Sie werden folgendes haben:
Der Inhalt der zweiten und dritten .bat-Datei sollte folgendermaßen aussehen:
Sie können einen Link zur ersten .bat-Datei erstellen, die die folgenden Einstellungen enthält:
Ziel:% comspec% / k OPTION "PATH \ first.bat" | Wobei OPTION x86 oder ia64 ist
Start in: PFAD | Wobei PFAD der PFAD zu Ihrer first.bat ist
Das Skript ist das vereinfachte Skript, mit dem Microsoft die richtige Befehlszeile für die Visual Studio-Umgebung startet. Sie können diese Skripte einfach auf N Umgebungen erweitern. Indem Sie mehr .bat-Dateien für verschiedene Umgebungen hinzufügen und die first.bat mit mehr Optionen und goto-Anweisungen bearbeiten. Ich hoffe es ist selbsterklärend.
Und ich hoffe, Microsoft verklagt mich nicht für die Verwendung ihres Skripts.
BEARBEITEN:
Ah, ich glaube, ich habe dich ein bisschen missverstanden. Für die 32-Bit-Cmd-Zeile sollte der Link wie folgt erstellt werden:
Ziel:% windir% \ SysWoW64 \ cmd.exe "PATH \ first.bat" x86
EDIT2:
Versuchen Sie etwas wie:
quelle
%ProgramFiles%
Variablen verwendet wird. (Zitat:% ProgramFiles% selbst hängt davon ab, ob der Prozess, der die Umgebungsvariable anfordert, selbst 32-Bit- oder 64-Bit-Version ist (dies wird durch die Windows-auf-Windows-64-Bit-Umleitung verursacht). En.wikipedia.org/wiki/ … )Ich wollte nur die Antwort zusammenfassen, die ich erhalten habe, indem ich den Links in der Antwort von Baptiste Chardon gefolgt bin . Wenn Sie mit dem
mklink
Befehlszeilentool eine symbolische Verzeichnisverknüpfung inC:\Windows\system32
und in erstellenC:\Windows\SysWOW64
, die jeweils denselben Namen haben (jedoch unterschiedliche Ziele haben), können Sie die Verknüpfung einfachC:\Windows\system32
derPath
Umgebungsvariablen hinzufügen . Beispielsweise:quelle
Ich hatte dieses Problem und die Antwort lautet wie folgt:
Der Pfad für Ihre Systemvariable auf den 64-Bit-Computern lautet
c:\progra~2
. Sie benötigen einen raumlosen Pfad für Ihre Umgebungsvariable, sonst liest das System nicht weiter alsC:\programs
.Auf unseren 32-Bit-Rechnern sind die Umgebungsvariablen
c:\program files
und auf den 64-Bit- Rechnern die Firmenprogrammec:\progra~2
. Wir setzen dann unsere Verknüpfungen für Benutzer auf%companyprograms%\...
Sie können dies über Gruppenrichtlinien oder per Skript tun.
quelle
Wie romka in der Folge angedeutet hat, ist die einfache Antwort das SysWOW64-Verzeichnis.
Zum Glück die Installer von Shining Light Produktionen kümmern sich für Sie darum. Führen Sie einfach die 32-Bit- und 64-Bit-Installationsprogramme aus und kopieren Sie die DLLs in das Windows-Verzeichnis "System". Für die DLLs wird das richtige Verzeichnis ausgewählt (dh die 64-Bit-DLLs werden in System32 und die 32-Bit-DLLs in SysWOW64 gespeichert).
Sobald ich dies getan hatte, finden meine 32-Bit-Apps die 32-Bit-DLLs und meine 64-Bit-Apps die 64-Bit-DLLs.
quelle