Czy możliwe jest posiadanie całości lub części PATH
zmiennej środowiskowej specyficznej dla typu obrazu uruchomionego procesu (32bit / 64bit)? Kiedy uruchamiam jakąś aplikację z poziomu 64-bitowego cmd.exe, chciałbym, aby wybrała 64-bitową wersję biblioteki OpenSSL, natomiast gdy uruchamiam jakąś aplikację z 32-bitowego cmd.exe, chciałbym, aby wybrała 32-bitową wersję biblioteki OpenSSL.
14
echo %programfiles%
pokazuje inną ścieżkę w zależności od typu cmd.exe, z którego jest uruchamiany, alewhere ssleay32.dll
w obu typach cmd.exe (32-bitowy i 64-bitowy) nie można znaleźć tej biblioteki DLL i wyświetlaINFO: Could not find files for the given pattern(s).
jakieś pomysły?Odpowiedź (zaznaczona poprawnie) romka jest prosta i elegancka, ale niestety nie działa (przynajmniej na Windows 7 i Windows 8 64 bity, nie pchałem dalej testu).
Problem wynika z faktu, że zmienna systemowa PATH% nie zawsze rozwija inną zmienną env: działa na przykład z% SYSTEMDRIVE%, ale niestety nie dla% PROGRAMFILES%. Wikipedia sugeruje, że takie zachowanie pochodzi z poziomu pośredniego (% SYSTEMDRIVE% nie odnosi się do trzeciej zmiennej env).
Jedynym rozwiązaniem, jakie znalazłem, jest użycie magicznej File System Redirector i katalogów System32 / SysWoW64, zgodnie z sugestiami w komentarzach.
Aby uniknąć bezpośredniego wdrażania bibliotek DLL w katalogu Windows, co zwykle jest trudne w utrzymaniu, można zamiast tego wdrożyć łącze miękkie do katalogu niestandardowego (działa w systemie Windows Vista i nowszych wersjach systemu Windows):
Nawiasem mówiąc, przepraszam, że nie komentuję bezpośrednio odpowiednich postów: obecnie brak wystarczającej reputacji na moim koncie, aby to zrobić.
źródło
Tak, jest to absolutnie możliwe. Po prostu napisz trzy pliki .bat. Pierwszy powinien wyglądać tak:
Drugi i trzeci plik .bat są w zasadzie takie same, z tą różnicą, że różnią się nazwą. Pierwszy nazywa się x86.bat, a drugi ia64.bat i są one umieszczane w folderze o nazwie bin, który znajduje się nad pierwszym plikiem nietoperza. Będziesz miał to:
Zawartość drugiego i trzeciego pliku .bat powinna wyglądać następująco:
Możesz utworzyć link do pierwszego pliku .bat, który będzie miał następujące ustawienia:
Cel:% comspec% / k "PATH \ first.bat" OPCJA | Gdzie OPCJA to x86 lub ia64
Zacznij za: ŚCIEŻKA | Gdzie ŚCIEŻKA jest ŚCIEŻKĄ do pierwszego. Nietoperza
Skrypt jest uproszczonym skryptem używanym przez Microsoft do uruchomienia odpowiedniego wiersza poleceń dla środowiska Visual Studio. Możesz po prostu rozszerzyć ten skrypt na N środowisk. Dodając więcej plików .bat dla różnych środowisk i edytując plik first.bat z większą liczbą opcji i instrukcji goto. Mam nadzieję, że to samo wyjaśnia.
Mam nadzieję, że Microsoft nie pozwie mnie za użycie ich skryptu.
EDYTOWAĆ:
Ach, chyba źle cię zrozumiałem. Dla 32-bitowej linii cmd link powinien zostać utworzony jako:
Cel:% windir% \ SysWoW64 \ cmd.exe „PATH \ first.bat” x86
EDYCJA 2:
Wypróbuj coś takiego:
źródło
%ProgramFiles%
zmiennej. (Cytat: Sam% ProgramFiles% zależy od tego, czy sam proces żądania zmiennej środowiskowej jest 32-bitowy czy 64-bitowy (jest to spowodowane przekierowaniem 64-bitowym Windows na Windows). En.wikipedia.org/wiki/ … )Chciałem tylko streścić odpowiedź, którą otrzymałem, podążając za linkami podanymi w odpowiedzi Baptiste Chardon. Korzystając z
mklink
narzędzia wiersza polecenia, aby utworzyć symboliczne łącze do katalogu wewnątrzC:\Windows\system32
i naC:\Windows\SysWOW64
zewnątrz, każdy o tej samej nazwie (choć różnych obiektach docelowych), możesz po prostu dodać jeC:\Windows\system32
doPath
zmiennej środowiskowej. Na przykład:źródło
Miałem ten problem i odpowiedź jest następująca:
Ścieżka do zmiennej systemowej na komputerach 64-bitowych to
c:\progra~2
. Musisz mieć ścieżkę bez przestrzeni dla zmiennej środowiskowej, w przeciwnym razie system nie będzie czytał dalejC:\programs
.Na naszych 32-bitowych maszynach są zmienne środowiskowe programy firmy,
c:\program files
a na 64-bitowychc:\progra~2
. Następnie ustawiamy nasze skróty dla użytkowników na%companyprograms%\...
Możesz to zrobić za pomocą zasad grupy lub skryptu.
źródło
Jak wskazała romka w następnej odpowiedzi, prostą odpowiedzią jest katalog SysWOW64.
Na szczęście instalatorzy z produkcji Shining Light zajmują się tym . Po prostu uruchom instalatory 32-bitowe i 64-bitowe i wybierz, aby skopiować pliki .DLLs do katalogu Windows „System”, a odpowiedni katalog zostanie wybrany dla plików .DLLs (tj. 64-bitowe .DLLs przejdź do System32, a 32-bitowe .DLLs do SysWOW64.
Gdy to zrobię, moje 32-bitowe aplikacje znajdują 32-bitowe .DLLs, a moje 64-bitowe aplikacje znajdują 64-bitowe .DLLs.
źródło