Biến môi trường PATH khác nhau cho Windows 32 bit và 64 bit - có khả thi không?


14

Có thể có toàn bộ hoặc một phần PATHbiến môi trường cụ thể cho loại hình ảnh của quá trình đang chạy (32 bit / 64 bit) không? Khi tôi chạy một số ứng dụng từ trong cmd.exe 64 bit, tôi muốn nó chọn phiên bản 64 bit của thư viện OpenSSL trong khi tôi chạy một số ứng dụng từ trong cmd.exe 32 bit, tôi muốn có nó chọn phiên bản 32 bit của thư viện OpenSSL.

FOLLOW UP
where.exe không tìm thấy lib OpenSSL khi biến% ProgramFiles% được sử dụng trong biến môi trường PATH

Câu trả lời:


9

Thực hiện %ProgramFiles%để %ProgramFiles(x86)%chuyển đổi env để làm việc cho bạn:

Đặt các thư mục có phiên bản x32 và x64 của thư viện OpenSSL vào thích hợp %programfiles%%ProgramFiles(x86)% các thư mục và trong PATHbiến môi trường, sử dụng một tham chiếu đến các thư mục thông qua %programfiles%biến.

Bằng cách này, khi bạn đang chạy trong môi trường x32-bit, PATHmục nhập của bạn %programfiles%/OpenSSL/sẽ tự động được giải quyết %ProgramFiles(x86)%/OpenSSL/trên đĩa.


1
Vâng, tôi có một số rắc rối để làm cho nó hoạt động. echo %programfiles%hiển thị đường dẫn khác nhau tùy thuộc vào loại cmd.exe mà nó chạy từ nhưng where ssleay32.dlltrong cả hai loại cmd.exe (32 bit và 64 bit) không thể tìm thấy dll này và hiển thị INFO: Could not find files for the given pattern(s).Ý tưởng nào?
Piotr Dobrogost

Điều này có thể giúp: Hoàn toàn điều này có thể giúp: stackoverflow.com/questions/906310/
Kẻ

1
nếu một trong các dll là một 32 bit, thì trên máy 64 bit, nó sẽ đi vào thư mục C: \ windows \ syswow64
romka

Điều này không làm việc cho tôi. Khi tôi bao gồm% ProgramFiles% trong định nghĩa biến PATH, nó hoàn toàn không được mở rộng, vì vậy exe của tôi không tìm thấy dlls của nó.
Carlos A. Ibarra

7

Câu trả lời (được chọn là đúng) do romka cung cấp rất đơn giản và thanh lịch, nhưng rất tiếc là không hoạt động (ít nhất là trên Windows 7 và Windows 8 64 bit, tôi đã không đẩy bài kiểm tra của mình đi xa hơn).

Vấn đề xuất phát từ thực tế là biến% PATH% của hệ thống không phải lúc nào cũng mở rộng biến env khác: ví dụ, nó hoạt động với% HỆ THỐNG%, nhưng không may là không cho% PROGRAMFILES%. Wikipedia gợi ý rằng hành vi này xuất phát từ mức độ không xác định (% HỆ THỐNG% không đề cập đến biến env thứ ba).

Giải pháp duy nhất tôi tìm thấy là sử dụng phép thuật Chuyển hướng hệ thống tệp và các thư mục System32 / SysWoW64, như được đề xuất trong các bình luận.

Để tránh việc triển khai trực tiếp DLL trong thư mục Windows, thường khó bảo trì, người ta có thể triển khai thay vào đó một liên kết mềm đến thư mục tùy chỉnh (hoạt động trên Windows Vista và các phiên bản Windows mới hơn):

Nhân tiện, xin lỗi vì đã không bình luận trực tiếp trên các bài đăng có liên quan: hiện tại không đủ danh tiếng trên tài khoản của tôi để làm điều này.


5

Vâng, nó là hoàn toàn có thể. Đơn giản chỉ cần viết một tập tin ba .bat. Cái đầu tiên sẽ trông như thế này:

@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

Tệp .bat thứ hai và thứ ba về cơ bản là giống nhau, ngoại trừ chúng khác nhau về tên của chúng. Cái đầu tiên sẽ được gọi là x86.bat thứ hai ia64.bat và chúng được đặt trong một thư mục có tên bin nằm phía trên tệp bat đầu tiên. Bạn sẽ có điều này:

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

Nội dung của tệp .bat thứ hai và thứ ba sẽ trông như thế này:

@set PATH=THE PATH YOU WANT

Bạn có thể tạo một liên kết đến tệp .bat đầu tiên sẽ có các cài đặt sau:

Mục tiêu:% comspec% / k "PATH \ first.bat" TÙY CHỌN | Trong đó TÙY CHỌN là x86 hoặc ia64

Bắt đầu tại: ĐƯỜNG | Trong đó PATH là ĐƯỜNG đầu tiên của bạn.

Kịch bản lệnh là tập lệnh đơn giản hóa mà Microsoft sử dụng để bắt đầu dòng lệnh đúng cho môi trường Visual Studio của họ. Bạn chỉ có thể mở rộng tập lệnh này đến N môi trường. Bằng cách thêm nhiều tệp .bat cho các môi trường khác nhau và bằng cách chỉnh sửa tệp First.bat với nhiều tùy chọn và câu lệnh goto hơn. Tôi hy vọng nó là tự giải thích.

Và tôi hy vọng Microsoft không kiện tôi vì đã sử dụng tập lệnh của họ.

BIÊN TẬP:

Ah tôi nghĩ rằng tôi đã hiểu lầm bạn một chút. Đối với dòng cmd 32 bit, liên kết phải được tạo như sau:

Mục tiêu:% Windir% \ SysWoW64 \ cmd.exe "PATH \ first.bat" x86

EDIT2:

Hãy thử một cái gì đó như:

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
Bạn có thể muốn sửa điều đó, chỉ cho rõ ràng - tỷ lệ cược là, họ không sử dụng công nghệ Intel 64 bit (ia64 - CPU Itanium) mà là công nghệ bitcoin AMD64, thường được gọi là x64.
Multiverse IT

Cảm ơn câu trả lời của bạn. Ý tưởng là tốt đẹp. Tuy nhiên tôi đã tìm kiếm một số giải pháp cấp hệ thống như giải pháp được sử dụng để sửa đổi %ProgramFiles%biến. (Trích: Các% ProgramFiles% bản thân phụ thuộc vào việc xử lý yêu cầu biến môi trường là chính nó 32-bit hoặc 64-bit (điều này được gây ra bởi Windows-on-Windows 64-bit chuyển hướng). En.wikipedia.org/wiki/ Tiết )
Piotr Dobrogost

1

Tôi chỉ muốn tóm tắt câu trả lời tôi có được bằng cách theo các liên kết được cung cấp trong câu trả lời từ Baptiste Chardon. Bằng việc sử dụng mklinkcông cụ dòng lệnh để tạo ra một liên kết tượng trưng trong thư mục C:\Windows\system32 trong C:\Windows\SysWOW64, từng có cùng tên (mặc dù mục tiêu khác nhau), bạn có thể sau đó chỉ cần thêm một trong C:\Windows\system32để các Pathbiến môi trường. Ví dụ:

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

Tôi đã có vấn đề này và câu trả lời như sau:

Đường dẫn cho biến hệ thống của bạn trên các máy 64 bit là c:\progra~2. Bạn cần có một đường dẫn không giới hạn cho biến môi trường của mình, nếu không hệ thống sẽ không đọc được nhiều hơnC:\programs .

Trên các máy 32 bit của chúng tôi, các chương trình công ty biến môi trường là c:\program filesvà trên các máy 64 bit c:\progra~2. Sau đó, chúng tôi đặt các phím tắt cho người dùng%companyprograms%\...

Bạn có thể làm điều đó thông qua chính sách nhóm hoặc theo kịch bản.


-1

Như romka đã chỉ ra trong phần tiếp theo, câu trả lời đơn giản là thư mục SysWOW64.

May mắn thay, các trình cài đặt từ Shining Light sản xuất đảm nhận việc này cho bạn. Chỉ cần chạy trình cài đặt 32 bit và 64 bit và chọn sao chép .DLL vào thư mục "Hệ thống" của Window và thư mục phù hợp được chọn cho .DLL (tức là 64 bit .DLL đi vào System32 và 32bit .DLL vào SysWOW64.

Khi tôi đã thực hiện điều này, các ứng dụng 32 bit của tôi tìm thấy các .DLL 32 bit và các ứng dụng 64 bit của tôi tìm thấy các 64 bit .DLL.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.