Làm cách nào để gỡ lỗi Lỗi: sinh ra ENOENT hung trên node.js?


350

Khi tôi gặp lỗi sau:

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: spawn ENOENT
    at errnoException (child_process.js:1000:11)
    at Process.ChildProcess._handle.onexit (child_process.js:791:34)

Tôi có thể làm theo thủ tục gì để khắc phục?

Tác giả lưu ý : Rất nhiều vấn đề với lỗi này khuyến khích tôi đăng câu hỏi này để tham khảo trong tương lai.

Câu hỏi liên quan:


Trong trường hợp của tôi, tôi đã chuyển toàn bộ lệnh dưới dạng một Chuỗi như bạn execthay vì truyền vào lệnh làm đối số đầu tiên và các tùy chọn dưới dạng Mảng cho đối số thứ hai. ví dụ như tôi đang làm spawn( "adb logcat -c" )thay vì spawn( "adb", [ "logcat", "-c" ] ).
Joshua Pinter

Câu trả lời:


235

LƯU Ý: Lỗi này hầu như luôn xảy ra do lệnh không tồn tại, vì thư mục làm việc không tồn tại hoặc từ một lỗi chỉ dành cho windows.

Tôi tìm thấy một cách dễ dàng đặc biệt để có được ý tưởng về nguyên nhân gốc rễ của:

Error: spawn ENOENT

Vấn đề của lỗi này là, thực sự có rất ít thông tin trong thông báo lỗi để cho bạn biết vị trí của cuộc gọi, tức là không tìm thấy lệnh thực thi / lệnh nào, đặc biệt là khi bạn có một cơ sở mã lớn, nơi có rất nhiều cuộc gọi sinh sản . Mặt khác, nếu chúng ta biết lệnh chính xác gây ra lỗi thì chúng ta có thể làm theo câu trả lời của @laconbass ' để khắc phục sự cố.

Tôi đã tìm thấy một cách rất dễ dàng để phát hiện ra lệnh nào gây ra sự cố thay vì thêm trình lắng nghe sự kiện ở mọi nơi trong mã của bạn như được đề xuất trong câu trả lời của @laconbass. Ý tưởng chính là kết thúc cuộc gọi sinh sản ban đầu bằng một trình bao bọc in ra các đối số gửi đến cuộc gọi sinh sản.

Đây là chức năng trình bao bọc, đặt nó ở đầu index.jshoặc bất kỳ tập lệnh bắt đầu nào của máy chủ của bạn.

(function() {
    var childProcess = require("child_process");
    var oldSpawn = childProcess.spawn;
    function mySpawn() {
        console.log('spawn called');
        console.log(arguments);
        var result = oldSpawn.apply(this, arguments);
        return result;
    }
    childProcess.spawn = mySpawn;
})();

Sau đó, lần tới khi bạn chạy ứng dụng của mình, trước thông báo của ngoại lệ chưa được phát hiện, bạn sẽ thấy một cái gì đó như thế:

spawn called
{ '0': 'hg',
  '1': [],
  '2':
   { cwd: '/* omitted */',
     env: { IP: '0.0.0.0' },
     args: [] } }

Theo cách này, bạn có thể dễ dàng biết lệnh nào thực sự được thực thi và sau đó bạn có thể tìm hiểu lý do tại sao nodejs không thể tìm thấy tệp thực thi để khắc phục sự cố.


3
Dưới đây là một ý tưởng khác: chỉ cần thay đổi spawn()để exec()và thử lại. exec()sẽ cho bạn biết lệnh nào nó đã cố chạy.
Adam Monsen

1
Quan trọng: Đảm bảo đặt mã ở trên càng gần với phần bắt đầu của tệp JS chính càng tốt. Nếu bạn tải các mô-đun khác trước, chúng có thể loại bỏ chức năng 'sinh sản' và ghi đè ở đây sẽ không bao giờ được gọi.
Dan Nissenbaum

1
Tôi không có may mắn sử dụng kịch bản. Nó hoàn toàn không hoạt động.
newguy

Vì vậy, làm thế nào bạn sẽ sử dụng phương pháp này trong một tập tin grunt? Tôi không chắc chắn nơi để đặt này.
Đêm giao thừa

2
Điều này làm việc hoàn hảo cho tôi. Tôi chỉ đặt cái này ở đầu tập tin gulpfile.js của tôi và bingo bango bongo, đăng nhập sinh sản!
Yann Duran

121

Bước 1: Đảm bảo spawnđược gọi đúng cách

Đầu tiên, xem lại các tài liệu cho child_ process.spawn (lệnh, args, tùy chọn) :

Khởi chạy một quy trình mới với các đối số đã cho command, với các đối số dòng lệnh trong args. Nếu bị bỏ qua, argsmặc định là một mảng trống.

Đối số thứ ba được sử dụng để chỉ định các tùy chọn bổ sung, mặc định là:

{ cwd: undefined, env: process.env }

Sử dụng envđể xác định các biến môi trường sẽ hiển thị cho quy trình mới, mặc định là process.env.

Đảm bảo bạn không đặt bất kỳ đối số dòng lệnh nào commandvà toàn bộ spawncuộc gọi là hợp lệ . Tiến hành bước tiếp theo.

Bước 2: Xác định Trình phát sự kiện phát ra sự kiện lỗi

Tìm kiếm trên mã nguồn của bạn cho mỗi cuộc gọi đến spawn, hoặc child_process.spawn, tức là

spawn('some-command', [ '--help' ]);

và đính kèm một trình lắng nghe sự kiện cho sự kiện 'lỗi', để bạn được chú ý đến Trình phát sự kiện chính xác đang ném nó là 'Chưa xử lý'. Sau khi gỡ lỗi, trình xử lý đó có thể được gỡ bỏ.

spawn('some-command', [ '--help' ])
  .on('error', function( err ){ throw err })
;

Thực thi và bạn sẽ nhận được đường dẫn tệp và số dòng nơi trình nghe 'lỗi' của bạn đã được đăng ký. Cái gì đó như:

/file/that/registers/the/error/listener.js:29
      throw err;
            ^
Error: spawn ENOENT
    at errnoException (child_process.js:1000:11)
    at Process.ChildProcess._handle.onexit (child_process.js:791:34)

Nếu hai dòng đầu vẫn còn

events.js:72
        throw er; // Unhandled 'error' event

làm bước này một lần nữa cho đến khi họ không Bạn phải xác định người nghe phát ra lỗi trước khi tiếp tục bước tiếp theo.

Bước 3: Đảm bảo biến môi trường $PATH được đặt

Có hai tình huống có thể xảy ra:

  1. Bạn dựa vào spawnhành vi mặc định , vì vậy môi trường xử lý con sẽ giống như process.env.
  2. Bạn đang tự do truyền một envđối tượng spawnvào optionsđối số.

Trong cả hai kịch bản, bạn phải kiểm tra PATHkhóa trên đối tượng môi trường mà quá trình con sinh ra sẽ sử dụng.

Ví dụ cho kịch bản 1

// inspect the PATH key on process.env
console.log( process.env.PATH );
spawn('some-command', ['--help']);

Ví dụ cho kịch bản 2

var env = getEnvKeyValuePairsSomeHow();
// inspect the PATH key on the env object
console.log( env.PATH );
spawn('some-command', ['--help'], { env: env });

Việc không có PATH(nghĩa là nó undefined) sẽ gây spawnra ENOENTlỗi , vì sẽ không thể xác định được bất kỳ trường hợp nào commandtrừ khi đó là đường dẫn tuyệt đối đến tệp thực thi.

Khi PATHđược đặt chính xác, tiến hành bước tiếp theo. Nó nên là một thư mục, hoặc một danh sách các thư mục. Trường hợp cuối cùng là bình thường.

Bước 4: Đảm bảo commandtồn tại trên một thư mục của những người được xác định trongPATH

Spawn có thể phát ra ENOENTlỗi nếu tên tệp command(nghĩa là 'some-command') không tồn tại trong ít nhất một trong các thư mục được xác định trên PATH.

Xác định vị trí chính xác của command. Trên hầu hết các bản phân phối linux, điều này có thể được thực hiện từ một thiết bị đầu cuối với whichlệnh. Nó sẽ cho bạn biết đường dẫn tuyệt đối đến tệp thực thi (như ở trên) hoặc cho biết nếu nó không được tìm thấy.

Ví dụ sử dụng mà và đầu ra của nó khi tìm thấy một lệnh

> which some-command
some-command is /usr/bin/some-command

Ví dụ sử dụng và đầu ra của nó khi không tìm thấy lệnh

> which some-command
bash: type: some-command: not found

các chương trình cài đặt sai là nguyên nhân phổ biến nhất cho lệnh không tìm thấy . Tham khảo từng tài liệu lệnh nếu cần và cài đặt nó.

Khi lệnh là một tệp script đơn giản, đảm bảo nó có thể truy cập được từ một thư mục trên PATH. Nếu không, hãy chuyển nó sang một hoặc tạo liên kết đến nó.

Khi bạn xác định PATHđược đặt chính xác và commandcó thể truy cập được từ nó, bạn sẽ có thể sinh ra quá trình con của mình mà không spawn ENOENTbị ném.


1
Điều này rất hữu ích cho việc gỡ lỗi của tôi về Spawn ENOENT. Tôi đã tham khảo nó nhiều lần. Cảm ơn!
CodeManiak

36
Tôi cũng thấy rằng ENOENT sẽ bị ném nếu bạn chỉ định cwdtrong các tùy chọn, nhưng thư mục đã cho không tồn tại.
Daniel Imfeld

4
@DanielImfeld TỔNG SAVIOR. Bạn nên viết một câu trả lời cho biết điều này.
GreenAsJade

4
Khi bạn đang sử dụng spawn('some-command', ['--help'], { env: env });như được minh họa bởi Bước 3 trong câu trả lời này và đang chuyển qua một môi trường tùy chỉnh, hãy đảm bảo chỉ định PATH, ví dụ : { env: { PATH: process.env.PATH } }. Tùy chọn env sẽ không kế thừa các biến từ env hiện tại của bạn theo mặc định.
anty

5
Tôi đã có thể giải quyết vấn đề của mình bằng cách chuyển shell: trueđến các tùy chọn sinh sản.
Nickofthyme

35

Như @DanielImfeld đã chỉ ra , ENOENT sẽ bị ném nếu bạn chỉ định "cwd" trong các tùy chọn, nhưng thư mục đã cho không tồn tại.


1
Vì vậy, có một cách để thực hiện trong một thư mục cụ thể lệnh?
Mitro

Trong Windows (7), có vẻ như bạn cũng cần bao gồm ký tự ổ đĩa trong cwdđường dẫn: 'c: / ...' và không chỉ '/ ...'
Musiously

29

Giải pháp Windows: Thay thế spawnbằng sinh sản chéo nút . Ví dụ như thế này khi bắt đầu app.js của bạn:

(function() {
    var childProcess = require("child_process");
    childProcess.spawn = require('cross-spawn');
})(); 

2
đã làm việc ngoại trừ nó là một trình đơn thả xuống, không cần child_ process. Chính xác giống như cách sinh sản của nút hoặc spawnSync, vì vậy đó là sự thay thế. var spawn = require('cross-spawn'); // Spawn NPM asynchronously var child = spawn('npm', ['list', '-g', '-depth', '0'], { stdio: 'inherit' });
Bogdan Trusca

27

Câu trả lời của @ laconbass đã giúp tôi và có lẽ đúng nhất.

Tôi đến đây vì tôi đang sử dụng sinh sản không chính xác. Một ví dụ đơn giản:

Điều này là không chính xác:

const s = cp.spawn('npm install -D suman', [], {
    cwd: root
});

Điều này là không chính xác:

const s = cp.spawn('npm', ['install -D suman'], {
    cwd: root
});

chính xác:

const s = cp.spawn('npm', ['install','-D','suman'], {
    cwd: root
});

tuy nhiên, tôi khuyên bạn nên làm theo cách này:

const s = cp.spawn('bash');
s.stdin.end(`cd "${root}" && npm install -D suman`);
s.once('exit', code => {
   // exit
});

điều này là do sau đó cp.on('exit', fn)sự kiện sẽ luôn luôn kích hoạt, miễn là bash được cài đặt, nếu không, cp.on('error', fn)sự kiện có thể kích hoạt trước, nếu chúng ta sử dụng nó theo cách đầu tiên, nếu chúng ta khởi chạy 'npm' trực tiếp.


1
Suy nghĩ về việc tái cấu trúc câu trả lời của tôi để cung cấp "hướng dẫn chung" và để lại chi tiết cho từng nguyên nhân của vấn đề (bỏ lỡ phụ thuộc, cuộc gọi không chính xác, môi trường sai, ...).
laconbass

2
tất cả những ai thích câu trả lời này, cũng có thể quan tâm đến lựa chọn thay thế này: gist.github.com/ORESoftware/7bf225f0045b4649de6848f1ea5def4c
Alexander Mills

1
Downvoted vì nếu những gì bạn muốn có là một cái vỏ thì bạn nên sử dụng child_process.exechoặc đi shell: trueđến spawn.
givanse

@givanse không nhất thiết đúng - bạn có thể muốn chạy zsh hoặc bash hoặc fsh tùy thuộc vào loại vỏ bạn muốn sử dụng và hành vi cũng khác nhau
Alexander Mills

22

Đối với ENOENT trên Windows, https://github.com/nodejs/node-v0.x-archive/issues/2318#issuecomment-249355505 sửa nó.

ví dụ: thay thế sinh sản ('npm', ['-v'], {stdio: 'kế thừa'}) bằng:

  • cho tất cả phiên bản node.js:

    spawn(/^win/.test(process.platform) ? 'npm.cmd' : 'npm', ['-v'], {stdio: 'inherit'})
  • cho node.js 5.x trở lên:

    spawn('npm', ['-v'], {stdio: 'inherit', shell: true})

1
Nơi để làm những sửa đổi?
Deilan

8
Phần chính được thêm vàoshell: true
Ted Nyberg

19

Đối với bất kỳ ai có thể vấp phải điều này, nếu tất cả các câu trả lời khác không có ích và bạn đang ở trên Windows, hãy biết rằng hiện tại có một vấn đề lớn với spawnWindowsPATHEXTbiến môi trường có thể khiến một số cuộc gọi sinh ra không hoạt động tùy thuộc vào cách thức lệnh đích được cài đặt.


2
Và giải pháp là gì?
Nilzor

6
Sử dụng nút chéo chéo sinh sản làm việc cho tôi. Xem câu trả lời dưới đây: stackoverflow.com/a/35561971/507339
Nilzor

1
Thời đại đã cố gắng tìm ra những gì sai và điều này cuối cùng đã trở thành vấn đề. Tôi đã từ bỏ spawnvà chỉ sử dụng execthay thế.
đỏ

8

Trong trường hợp của tôi, tôi đã nhận được lỗi này do tài nguyên hệ thống phụ thuộc cần thiết không được cài đặt.

Cụ thể hơn, tôi có một ứng dụng NodeJS đang sử dụng ImageMagick. Mặc dù đã cài đặt gói npm, nhưng Linux ImageMagick lõi không được cài đặt. Tôi đã thực hiện một apt-get để cài đặt ImageMagick và sau đó tất cả đều hoạt động rất tốt!


Windows có cần cài đặt ImageMagick không? Tôi đang kiểm tra trên windows và gặp lỗi
Somename

6

trong windows, chỉ cần thêm shell: truetùy chọn đã giải quyết vấn đề của tôi:

sai:

const { spawn } = require('child_process');
const child = spawn('dir');

chính xác:

const { spawn } = require('child_process');
const child = spawn('dir', [], {shell: true});

5

Bạn đang thay đổi envtùy chọn?

Sau đó nhìn vào câu trả lời này.


Tôi đã cố gắng tạo ra một quy trình nút và TIL rằng bạn nên trải rộng các biến môi trường hiện có khi bạn sinh ra khác, bạn sẽ mất PATH biến môi trường và có thể cả các biến quan trọng khác.

Đây là bản sửa lỗi cho tôi:

const nodeProcess = spawn('node', ['--help'], {
  env: {
    // by default, spawn uses `process.env` for the value of `env`
    // you can _add_ to this behavior, by spreading `process.env`
    ...process.env,
    OTHER_ENV_VARIABLE: 'test',
  }
});

4

Trước khi bất cứ ai dành nhiều thời gian để gỡ lỗi vấn đề này, hầu hết thời gian có thể được giải quyết bằng cách xóa node_modules và cài đặt lại các gói.

Để cài đặt:

Nếu một lockfile tồn tại, bạn có thể sử dụng

yarn install --frozen-lockfile

hoặc là

npm ci

trân trọng Nếu không thì

yarn install

hoặc là

npm i

Wow như một giải pháp đơn giản và nó đã làm việc cho tôi! Mọi người nên thử điều này trước để xem nó có giải quyết được vấn đề không.
Nick K

2

Tôi gặp vấn đề tương tự, nhưng tôi tìm thấy một cách đơn giản để khắc phục nó. Nó có vẻ là spawn()lỗi nếu người dùng đã thêm chương trình vào PATH (ví dụ: các lệnh hệ thống bình thường hoạt động).

Để khắc phục điều này, bạn có thể sử dụng mô-đun ( npm install --save which):

// Require which and child_process
const which = require('which');
const spawn = require('child_process').spawn;
// Find npm in PATH
const npm = which.sync('npm');
// Execute
const noErrorSpawn = spawn(npm, ['install']);

2

Sử dụng require('child_process').execthay vì sinh sản cho một thông báo lỗi cụ thể hơn!

ví dụ:

var exec = require('child_process').exec;
var commandStr = 'java -jar something.jar';

exec(commandStr, function(error, stdout, stderr) {
  if(error || stderr) console.log(error || stderr);
  else console.log(stdout);
});

1

Đảm bảo mô-đun được thực thi được cài đặt hoặc đường dẫn đầy đủ đến lệnh nếu đó không phải là mô-đun nút


1

Tôi cũng đã trải qua vấn đề khó chịu này trong khi chạy các trường hợp thử nghiệm của mình, vì vậy tôi đã thử nhiều cách để vượt qua nó. Nhưng cách làm việc đối với tôi là chạy trình chạy thử nghiệm của bạn từ thư mục chứa tệp chính của bạn , bao gồm chức năng sinh sản của nodejs giống như thế này:

nodeProcess = spawn('node',params, {cwd: '../../node/', detached: true });

Ví dụ: tên tệp này là test.js , vì vậy chỉ cần di chuyển đến thư mục chứa nó . Trong trường hợp của tôi, nó là thư mục thử nghiệm như thế này:

cd root/test/

sau đó từ chạy chạy thử nghiệm của bạn trong trường hợp của tôi mocha của nó vì vậy nó sẽ như thế này:

mocha test.js

Tôi đã lãng phí hơn một ngày để tìm ra nó. Thưởng thức!!


1

Tôi gặp phải vấn đề này trên Windows, trong đó việc gọi execspawnvới cùng một lệnh chính xác (bỏ qua các đối số) hoạt động tốt exec(vì vậy tôi biết lệnh của tôi đã được bật $PATH), nhưng spawnsẽ cung cấp cho ENOENT. Hóa ra tôi chỉ cần nối thêm .exelệnh tôi đang sử dụng:

import { exec, spawn } from 'child_process';

// This works fine
exec('p4 changes -s submitted');

// This gives the ENOENT error
spawn('p4');

// But this resolves it
spawn('p4.exe');
// Even works with the arguments now
spawn('p4.exe', ['changes', '-s', 'submitted']);

0

Tôi đã gặp lỗi này khi cố gắng gỡ lỗi chương trình node.js từ bên trong trình soạn thảo Mã VS trên hệ thống Debian Linux. Tôi nhận thấy điều tương tự hoạt động tốt trên Windows. Các giải pháp được đưa ra trước đây không giúp ích nhiều vì tôi đã không viết bất kỳ lệnh "sinh sản" nào. Mã vi phạm có lẽ được viết bởi Microsoft và được ẩn dưới chương trình VS Code.

Tiếp theo tôi nhận thấy rằng node.js được gọi là nút trên Windows nhưng trên Debian (và có lẽ trên các hệ thống dựa trên Debian như Ubuntu), nó được gọi là nodejs. Vì vậy, tôi đã tạo một bí danh - từ một thiết bị đầu cuối gốc, tôi đã chạy

ln -s / usr / bin / nodejs / usr / local / bin / nút

và điều này đã giải quyết vấn đề. Quy trình tương tự hoặc tương tự có lẽ sẽ hoạt động trong các trường hợp khác trong đó node.js của bạn được gọi là nodejs nhưng bạn đang chạy một chương trình dự kiến ​​nó sẽ được gọi là nút hoặc ngược lại.


0

Nếu bạn đang sử dụng Windows Node.js, việc xử lý các trích dẫn có thể dẫn đến việc bạn đưa ra một lệnh mà bạn biết là hoạt động từ bảng điều khiển, nhưng không chạy khi chạy trong Node. Ví dụ như sau nên hoạt động:

spawn('ping', ['"8.8.8.8"'], {});

nhưng thất bại. Có một tùy chọn không có giấy tờ tuyệt vời windowsVerbatimArgumentsđể xử lý các trích dẫn / tương tự mà dường như thực hiện thủ thuật, chỉ cần đảm bảo thêm các mục sau vào đối tượng opts của bạn:

const opts = {
    windowsVerbatimArguments: true
};

và lệnh của bạn sẽ trở lại trong kinh doanh.

 spawn('ping', ['"8.8.8.8"'], { windowsVerbatimArguments: true });

Đừng trích dẫn các đối số bên trong mảng
laconbass

@laconbass Đây là một ví dụ rõ ràng tầm thường để truyền đạt khái niệm và vì vậy các trích dẫn có thể được gỡ bỏ. Tuy nhiên, có những trường hợp bạn thực sự cần trích dẫn các đối số (ví dụ: nếu bạn cần truyền một đối số có đường dẫn có khoảng trắng trong đó: "C: \ Program Files \ ..." ). Tôi đã đăng nó ở đây bởi vì, mặc dù nó có thể không phải là nguyên nhân của trường hợp lỗi cụ thể của bạn, nhưng hy vọng nó sẽ giúp người khác gặp phải lỗi khó hiểu này do cách xử lý các trích dẫn của Node trên Windows như tôi gặp phải.
Joel B

node.js đã tạo ra một số Black Magic và âm thầm trích dẫn các đối số "đúng". Ví dụ của bạn sẽ hoạt động mà không có tùy chọn không có giấy tờ mà bạn đề cập, bằng cách bỏ qua đối số bên trong mảng.
laconbass

Chỉ để thêm kinh nghiệm của riêng tôi, tôi đã chạy một quá trình java từ nút. Lỗi này xảy ra với tôi vì các trích dẫn xung quanh lệnh, thay vì đối số. Kiểm tra với khoảng trắng trong đường dẫn lệnh và nó vẫn hoạt động mà không có dấu ngoặc kép
Troncoso

0

giải pháp trong trường hợp của tôi

var spawn = require('child_process').spawn;

const isWindows = /^win/.test(process.platform); 

spawn(isWindows ? 'twitter-proxy.cmd' : 'twitter-proxy');
spawn(isWindows ? 'http-server.cmd' : 'http-server');

1
Mặc dù đây có thể là một giải pháp để giành được các bản sửa lỗi cụ thể, tôi không thấy cách nó giúp gỡ lỗi nguyên nhân thực sự của ENOENT
laconbass

Tôi không biết tại sao, nhưng cuộc gọi sinh sản sẽ hoạt động trong nút thay thế mà không có .cmd, nhưng thất bại trong một bài kiểm tra jest typcript. - Lỗi này có thể khá khó để tìm ra, câu trả lời này xứng đáng được nâng cao hơn.
Mathieu CAROFF

0

Trong trường hợp bạn đang gặp vấn đề này với một ứng dụng có nguồn mà bạn không thể sửa đổi, hãy xem xét việc gọi nó với biến môi trường NODE_DEBUGđược đặt thành child_process, vd NODE_DEBUG=child_process yarn test. Điều này sẽ cung cấp cho bạn thông tin những dòng lệnh nào đã được gọi trong thư mục nào và thường thì chi tiết cuối cùng là lý do cho sự thất bại.


0

Mặc dù nó có thể là một đường dẫn môi trường hoặc một vấn đề khác đối với một số người, tôi vừa cài đặt tiện ích mở rộng latex Workshop cho Visual Studio Code trên Windows 10 và thấy lỗi này khi cố gắng xây dựng / xem trước PDF. Chạy VS Code với tư cách là Quản trị viên đã giải quyết vấn đề cho tôi.


1
Một lần nữa, liên quan làm đường dẫn hệ thống tập tin một số cách. Tiện ích mở rộng có thể không đến được đường dẫn mà không có quyền của quản trị viên
laconbass

-1

Tôi đã gặp lỗi tương tự cho windows 8. Vấn đề là do biến môi trường của đường dẫn hệ thống của bạn bị thiếu. Thêm giá trị "C: \ Windows \ System32 \" vào biến PATH hệ thống của bạn.


-2

Thêm C:\Windows\System32\vàopath biến môi trường.

Các bước

  1. Đi đến máy tính và tài sản của tôi

  2. Nhấp vào Cài đặt nâng cao

  3. Sau đó vào biến môi trường

  4. Chọn Pathvà sau đó nhấp vào chỉnh sửa

  5. Dán sau đây nếu chưa có: C:\Windows\System32\

  6. Đóng dấu nhắc lệnh

  7. Chạy lệnh mà bạn muốn chạy

Ảnh chụp màn hình biến môi trường Windows 8


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.