32bit ve 64bit Windows için farklı PATH ortam değişkeni - bu mümkün mü?


14

PATHÇalışan değişkenin görüntüsünün türüne (32bit / 64bit) özgü ortam değişkeninin tamamı veya bir kısmı olması mümkün müdür ? Ben 64bit cmd.exe içinde bazı uygulama çalıştırmak Ben 32bit cmd.exe içinde bazı uygulama çalıştırırken ben OpenSSL kütüphanesinin 32bit sürümünü almak istiyorum iken, ben OpenSSL kütüphanesinin 64bit sürümünü almak istiyorum.

TAKİP EDİN
PATH ortam değişkeninde% ProgramFiles% değişkeni kullanıldığında Open.exe dosyasını bulamıyor

Yanıtlar:


9

Make %ProgramFiles%için %ProgramFiles(x86)%sizin için işe değişken geçiş env:

OpenSSL kitaplığının x32 ve x64 sürümlerine sahip klasörleri uygun %programfiles%ve %ProgramFiles(x86)%dizinlere ve PATHortam değişkenine yerleştirin, %programfiles%değişken aracılığıyla bu klasörlere bir başvuru kullanın .

Bu şekilde, x32 bit ortamında çalışırken, PATHgirişiniz %programfiles%/OpenSSL/otomatik %ProgramFiles(x86)%/OpenSSL/olarak bir diskte çözülür .


1
Gettingţe çýkmak için biraz sorunum var. echo %programfiles%cmd.exe'nin türüne bağlı olarak farklı bir yol gösterir, ancak where ssleay32.dllcmd.exe'nin (32bit ve 64bit) her iki türünde de bu dll'yi bulamaz ve INFO: Could not find files for the given pattern(s).Herhangi bir fikir görüntüler mi?
Piotr Dobrogost

Bu yardımcı olabilir: Ancak bu yardımcı olabilir: stackoverflow.com/questions/906310/…
Darokthar


Bu benim için işe yaramıyor. PATH değişkeni tanımına% ProgramFiles% değerini eklediğimde, exe'nin dll'lerini bulamaması nedeniyle hiç genişletilmez.
Carlos A. Ibarra

7

Romka tarafından sağlanan cevap (doğru olarak işaretlenmiş) basit ve zariftir, ancak maalesef işe yaramaz (en azından Windows 7 ve Windows 8 64 bitlerinde, testimi daha fazla itmedim).

Sorun, sistem% PATH% değişkeninin her zaman diğer env değişkenini genişletmemesi gerçeğinden kaynaklanır: örneğin% SYSTEMDRIVE% ile çalışır, ancak maalesef% PROGRAMFILES% için çalışmaz. Wikipedia , bu davranışın dolaylılık düzeyinden geldiğini önerir (% SYSTEMDRIVE%, üçüncü bir env değişkenine başvurmaz).

Bulduğum tek çözüm , yorumlarda önerildiği gibi Dosya Sistemi Yeniden Yönlendiricisi sihrini ve System32 / SysWoW64 dizinlerini kullanmaktır .

DLL'lerin Windows dizininde, genellikle bakımı zor olan doğrudan dağıtımından kaçınmak için, bunun yerine özel bir dizine softlink yerleştirilebilir (Windows Vista ve Windows'un sonraki sürümlerinde çalışır):

Bu arada, doğrudan ilgili yayınlara yorum yapmadığınız için üzgünüm: şu anda hesabımda bunu yapmak için yeterli itibar yok.


5

Evet, kesinlikle mümkün. Sadece üç .bat dosyası yazmanız yeterlidir. Birincisi şöyle görünmelidir:

@echo off
if "%1" == "" goto x86
if not "%2" == "" goto usage

if /i %1 == x86 goto x86
if /i %1 == ia64 goto ia64
goto usage

:x86
if not exist "%~dp0bin\x86.bat" goto missing
call "%~dp0bin\x86.bat"
goto :eof

:ia64
if not exist "%~dp0bin\ia64.bat" goto missing
call "%~dp0bin\ia64.bat"
goto :eof

:usage
echo Error in script usage. The correct usage is:
echo %0 [option]
echo where [option] is: x86 ^| ia64
echo:
echo For example:
echo %0 x86
goto :eof

:missing
echo The specified configuration type is missing. The tools for the
echo configuration might not be installed.
goto :eof

İkinci ve üçüncü .bat dosyası, adlarında farklı olmaları dışında, temelde aynıdır. Birincisi x86.bat ikinci ia64.bat olarak adlandırılacak ve ilk yarasa dosyasının üstünde bin olarak adlandırılan bir klasöre yerleştirilecektir. Buna sahip olacaksınız:

PATH\first.bat
PATH\bin\x86.bat
PATH\bin\ia64.bat

İkinci ve üçüncü .bat dosyasının içeriği şöyle görünmelidir:

@set PATH=THE PATH YOU WANT

İlk .bat dosyasına aşağıdaki ayarlara sahip bir bağlantı oluşturabilirsiniz:

Hedef:% comspec% / k "PATH \ first.bat" SEÇENEK | SEÇENEK x86 veya ia64 olduğunda

Başlangıç: PATH | PATH, first.bat'inizin PATH olduğu yer

Komut dosyası, Microsoft'un Visual Studio ortamları için doğru komut satırını başlatmak üzere kullandığı basitleştirilmiş komut dosyasıdır. Bu komut dosyalarını N ortamlara genişletebilirsiniz. Farklı ortamlar için daha fazla .bat dosyası ekleyerek ve daha fazla seçenek ve goto ifadeleriyle first.bat dosyasını düzenleyerek. Umarım kendi kendini açıklar.

Ve umarım Microsoft senaryolarını kullandığım için bana dava açmaz.

DÜZENLE:

Ah sanırım seni biraz yanlış anladım. 32bit cmd hattı için bağlantı şu şekilde oluşturulmalıdır:

Hedef:% windir% \ SysWoW64 \ cmd.exe "PATH \ first.bat" x86

EDIT2:

Şuna benzer bir şey deneyin:

if "%ProgramFiles%" == "%ProgramFiles(x86)%" goto x64_PATH
if "%ProgramFiles%" == "%ProgramW6432%" goto x86_PATH

:x64_PATH
@set PATH=YOUR 64 bit PATH
SOME_PATH\your64BitApp.exe
goto :eof

:x86_PATH
@set PATH=YOUR 32bit PATH
SOME_PATH\your32BitApp.exe
goto :eof

1
Sadece netlik için - olasılıklar, Intel 64 bit teknolojisini (ia64 - Itanium CPU'lar) değil, genellikle x64 olarak adlandırılan AMD64 bit teknolojisini kullanıyor olduklarını düzeltmek isteyebilirsiniz.
Multiverse BT

Cevabınız için teşekkürler. Fikir güzel. Ancak ben %ProgramFiles%değişkeni değiştirmek için kullanılan gibi bazı sistem düzeyinde çözüm arıyordu . (Alıntı:% ProgramFiles% öğesinin kendisi, ortam değişkenini isteyen işlemin kendisinin 32 bit mi yoksa 64 bit mi olduğuna bağlıdır (buna Windows 64 bit Windows yeniden yönlendirmesinden kaynaklanır) en.wikipedia.org/wiki/ … )
Piotr Dobrogost

1

Sadece Baptiste Chardon'un cevabında verilen bağlantıları takip ederek aldığım cevabı özetlemek istedim . Kullanarak mklinkbir dizin sembolik bir bağlantı oluşturmak için komut satırı aracı C:\Windows\system32 ve içinde C:\Windows\SysWOW64(farklı hedeflere rağmen) her biri aynı adı taşıyan, daha sonra sadece bir tane ekleyebilir C:\Windows\system32için Pathortam değişkeni. Örneğin:

C:\> mklink /D C:\Windows\SysWOW64\my_XXbit_dlls C:\dlls\x86
symbolic link created for C:\Windows\SysWOW64\my_XXbit_dlls <<===>> C:\dlls\x86
C:\> mklink /D C:\Windows\System32\my_XXbit_dlls C:\dlls\x64
symbolic link created for C:\Windows\System32\my_XXbit_dlls <<===>> C:\dlls\x64

0

Ben bu sorunu yaşadım ve cevap aşağıdaki gibidir:

64 bitlik makinelerde sistem değişkeninizin yolu c:\progra~2. Çevresel değişkeniniz için boşluksuz bir yola sahip olmanız gerekir, aksi takdirde sistem bundan daha fazlasını okumaz C:\programs.

32 bit makinelerimizde çevre değişkeni c:\program filesşirket programları ve 64 bit olanlarda c:\progra~2. Daha sonra kullanıcılar için kısayollarımızı%companyprograms%\...

Bunu grup ilkesi veya komut dosyası aracılığıyla yapabilirsiniz.


-1

İzlemede belirtildiği gibi, basit cevap SysWOW64 dizinidir.

Neyse ki Shining Light yapımlarından montajcılar sizin için bununla ilgilenir. Sadece 32bit ve 64bit yükleyicileri çalıştırın ve .DLL'leri Pencere "Sistem" dizinine kopyalamayı seçin ve .DLL'ler için uygun dizin seçilir (yani 64bit .DLL'ler System32'ye ve 32bit .DLL'ler SysWOW64'e gider.

Bunu yaptıktan sonra 32bit uygulamalarım 32bit .DLL'leri ve 64bit uygulamalarım 64bit .DLL'leri bulur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.