Tại sao tôi có thể thực thi một chương trình không nằm trong biến môi trường PATH của mình?


9

Tôi đã tự hỏi tại sao lệnh java -versioncó thể truy cập trên toàn cầu ?

Tôi có thể chạy nó từ bất kỳ thư mục nào và nó hoạt động:

nhập mô tả hình ảnh ở đây

Làm thế nào nó hoạt động?

Đây là PATHbiến hệ thống của tôi trông như sau:

C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;
%SystemRoot%\system32;
%SystemRoot%;
%SystemRoot%\System32\Wbem;
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\

Đối với tôi, java.exenằm ở%programfiles%\java\jre7\bin



Hiện tại tôi không có thông tin chi tiết, đó là lý do tại sao đây là một nhận xét và không phải là một câu trả lời, nhưng nếu java.exe(hoặc java.com, v.v.) không có trong bạn PATHthì có một mục đăng ký khác có thể chỉ định các đường dẫn thực thi.
Đánh dấu

1
@MarkHurd cmd (và CreatProcess) không kiểm tra mục đăng ký Đường dẫn ứng dụng, chỉ ShellExecute [và do đó hộp thoại Run] thực hiện.
Random832

@MarkHurd, như bạn mong đợi, nó không nằm trong biến đường dẫn của tôi ..
Pacerier

1
@Pacerier Trình thực thi java được tìm thấy trong% SystemRoot% \ System32 \
Dwayne Hinterlang

Câu trả lời:


13

Thông thường, có một nhóm các thư mục mà các tệp thực thi được sử dụng nhiều lần sẽ được tìm thấy bởi Windows của bạn, nhưng trong thực tế, không có lý do cụ thể nào để sử dụng lệnh như toàn cầu hay không. Các nhà phát triển thường đưa nó là "toàn cầu" bất cứ nơi nào họ muốn, họ có thể tự do làm điều đó. Nếu bạn muốn sử dụng bất kỳ lệnh nào là "toàn cầu", bạn sẽ cần thêm lệnh của mình dưới dạng "Biến môi trường Windows" . Để làm điều này, bạn có thể sử dụng các phương pháp folowing :

  1. Thêm thủ công với "Thuộc tính hệ thống Windows": nhập mô tả hình ảnh ở đây

  2. Sử dụng công cụ bổ trợ Setx.exe:

Nó không phải là một phần của thiết lập Windows XP tiêu chuẩn, nhưng một công cụ dòng lệnh có tên setx.exe được bao gồm trong Công cụ hỗ trợ Windows XP Service Pack 2. Công cụ này mở rộng lệnh set để có thể thực hiện các thay đổi vĩnh viễn trong các biến môi trường. Ví dụ: để thêm thư mục C: \ Thư mục mới vào đường dẫn, lệnh sẽ là

setx path "%PATH%;C:\New Folder" 
  1. Các kịch bản cho các biến môi trường danh sách:

Lệnh "Set" có thể được sử dụng trong dấu nhắc lệnh cùng với chuyển hướng đến tệp văn bản để tạo danh sách các biến môi trường hiện tại. Lệnh có thể là

set > C:\env_list.txt 

Tên tệp "C: \ env_list.txt" có thể được thay thế bởi bất kỳ lựa chọn nào của bạn.

Microsoft cũng có một VBScript liệt kê các biến môi trường trên trang này .

  1. Khóa đăng ký cho biến môi trường:

Đối với những người có kinh nghiệm với việc chỉnh sửa Registry, có một cách khác để thực hiện thay đổi trong các biến môi trường. Biến môi trường người dùng được lưu trữ trong Registry trong khóa:

HKEY_CURRENT_USER\Environment

Các biến hệ thống được tìm thấy trong khóa:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Lưu ý rằng bất kỳ biến môi trường nào ở dạng cần được mở rộng (ví dụ:% PATH%) phải được lưu trữ trong sổ đăng ký dưới dạng giá trị đăng ký REG_EXPAND_SZ. Chỉnh sửa Registry chủ yếu dành cho các tập lệnh được sử dụng bởi quản trị viên hệ thống và không được khuyến nghị cho người dùng PC trung bình.

Bạn có thể tìm thêm thông tin về nó ở đây.


1
Tuy nhiên, java.exe được đặt trong %programfiles%\java\jre7\bin. Thư mục này không xuất hiện trong biến Đường dẫn của hệ thống của tôi ..
Pacerier

7
Java.exe cũng được tìm thấy trong% SystemRoot% \ System32 \ xuất hiện trong biến PATH của bạn
Dwayne Hinterlang

5

"Các lệnh toàn cầu" được xác định bởi các biến môi trường của bạn.

Tùy thuộc vào hệ điều hành nào bạn đang sử dụng để cài đặt nó, nó khá khác nhau.

Cách chung nhất là

Nhấp chuột phải vào "Máy tính của tôi" Chọn "Thuộc tính"

Trong Windows7, bạn sẽ phải chọn "Cài đặt hệ thống nâng cao" trong khung bên trái.

Khi bạn mở hộp thoại Thuộc tính hệ thống, hãy chọn tab "Nâng cao".

Ở phía dưới, có một nút "Biến môi trường"

Trong Hộp thoại Biến môi trường, bạn sẽ có thể định cấu hình các biến môi trường cho mỗi người dùng hoặc cho toàn bộ hệ thống.

Ví dụ: "Đường dẫn" biến hệ thống được đơn giản hóa sẽ trông giống như thế này ...

C: \ Tệp chương trình \ Java \ jre6 \ bin ; C: \ Ruby19 \ bin;

Thực thi trong các đường dẫn này có thể được gọi trực tiếp từ Dòng lệnh.

Lý do bạn có thể gọi calc, mspaint, cmd tất cả từ Hộp thoại Run là vì C: \ windows \ system32 nằm trong biến môi trường Đường dẫn.

Bạn có thể thêm các đường dẫn tùy chỉnh vào các biến môi trường, cẩn thận không ghi đè lên các đường dẫn hiện có và tách các đường dẫn bằng dấu chấm phẩy. ";"

Sau đó, bạn có thể chạy một tệp thực thi từ đường dẫn đó trực tiếp trong dòng lệnh mà không cần gõ toàn bộ đường dẫn, như lệnh java -version.

Để đọc thêm xin vui lòng xem các liên kết sau ...

Biến môi trường

Hiểu và cấu hình biến môi trường

Tìm kiếm Java.exe trên bản cài đặt mới


3

Đây là một đơn giản whichhiển thị tất cả các lần truy cập lệnh trong PATH cho các tiện ích mở rộng PATHEXT hiện tại:

@for %%I in ("%path:;=\" "%") do @for %%E in (%pathext:;= %) do @if exist "%%~dpI%1%%E" @echo %%~dpI%1%%E

Đặt nó vào where.cmd(cho phép whichđến từ một nơi khác nếu bạn nhận được nó!) Và gọi nó với where java.

Bây giờ, trong nhận xét của tôi ở trên, tôi cho rằng nếu javakhông không xuất hiện trong bạn PATH, bạn có thể kiểm tra trong HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths [ref] , nhưng sau khi thực sự cố gắng này, nó không làm việc với các dòng lệnh, chỉ với những thứ mà sử dụng ShellExecuteEx, chẳng hạn như bắt đầu Runstartlệnh CLI.


2

Khi bạn nhập một lệnh, shell sẽ xem xét một biến môi trường có tên PATH (% PATH%, $ PATH tùy thuộc vào HĐH). Nó truy vấn mọi thư mục trên PATH để xem liệu nó có gặp một tệp thực thi phù hợp với lệnh bạn đã nhập không. Cái đầu tiên nó tìm thấy sẽ được thực thi.

Xem các câu trả lời khác cho một số cách khác nhau để đặt biến PATH.

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.