Làm thế nào tôi có thể biết quy trình nào của explorer.exe. Cái nào là chính?


13

Tôi có một tệp bó thay đổi một vài tệp đăng ký, sau đó khởi động lại explorer.exe để chúng có hiệu lực. Tôi đang sử dụng các lệnh

taskkill /f /im explorer.exe
explorer.exe

Điều này tất nhiên giết chết tất cả các quá trình explorer.exe, bao gồm các cửa sổ explorer tôi đã mở. (Rõ ràng, tôi đang sử dụng tùy chọn để Launch folder windows in a separate process.)

Có cách nào để tôi có thể xác định phiên bản explorer.exe nào là chính và chỉ cần giết nó không?


Giết chính explorer.exe có thể sẽ giết tất cả những cái khác vì chúng phụ thuộc vào nó để chạy.
cutrightjm

1
@ekaj Không. Tôi có thể làm điều đó bằng tay. Mỗi cửa sổ là một quá trình độc lập.
Hod - Quân đội của Monica

Tôi quan tâm đến việc tìm một cách đáng tin cậy để xác định trường hợp chính (được liên kết với Máy tính để bàn) explorer.exe, nhưng vì lý do ngược lại. Tôi thấy khó chịu khi explorer.execác quy trình sinh ra không phải lúc nào cũng thoát khi tất cả các cửa sổ liên kết của chúng bị đóng. Tôi sử dụng Trình quản lý tác vụ để tiêu diệt chúng và có xu hướng dựa vào thực tế là các trường hợp được sinh ra thường được đặt ở mức ưu tiên cao (vì một số lý do). Điều này hoạt động tốt, nhưng nếu tôi đã đặt nó thành bình thường (vì lý do rõ ràng), thì tôi có nguy cơ vô tình giết chết quá trình chính.
Synetech

@Synetech Giải pháp cho điều đó là taskkill /f /im explorer.exe /fi "windowtitle ne N/A". Vì một số lý do, sao chép / dán nó vào dấu nhắc cmd không hoạt động; bạn phải gõ nó bằng tay. Không thử một tập tin bó.
Hod - Quân đội của Monica

1
Bạn đã chia vấn đề thành một phần dễ và một phần không thể, giải quyết phần dễ và hiện đang yêu cầu trợ giúp với phần không thể. Rất có khả năng phần "dễ" của giải pháp là không chính xác (ví dụ: những gì bạn đang cố gắng có thể đạt được bằng chính sách nhóm), vì vậy sẽ rất tuyệt nếu câu hỏi của bạn bao gồm vấn đề ban đầu bạn đang cố gắng giải quyết . Giết chết các quy trình không thuộc về bạn hiếm khi chính xác.
Simon Richter

Câu trả lời:


9

Cách tiếp cận dựa trên tiêu đề cửa sổ

@ techie007 đề nghị giết chết explorer.exevới tiêu đề cửa sổ N/A.

Chỉ huy

for /f "tokens=2,10" %%p in ('tasklist /nh /v /fi "imagename eq explorer.exe"') do if "%%q"=="N/A" taskkill /f /pid %%p

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

  • tasklist /nh /v /fi "imagename eq explorer.exe"liệt kê rõ ràng tất cả các quy trình với tên hình ảnh explorer.exe.

  • for /f "tokens=2,10" %%p in ('COMMAND1') do COMMAND2

    hành quyết COMMAND1. Đối với mỗi dòng đầu ra, nó đặt các biến %%p%%q"mã thông báo" thứ hai và thứ mười (được phân tách bằng dấu cách) và thực thi COMMAND2.

    Trong trường hợp taskkill /v, %%p bây giờ giữ PID và %%q(bắt đầu) tiêu đề cửa sổ.

  • if "%%q"=="N/A" taskkill /f /pid %%pkiểm tra nếu tiêu đề cửa sổ là N/A.

    Nếu vậy, nó chấm dứt quá trình với taskkill.

Phương pháp sử dụng bộ nhớ

@Syntech chỉ ra rằng điều này không đáng tin cậy cho Windows Explorer, nhưng trong các chương trình, quy trình chính luôn có mức sử dụng bộ nhớ cao nhất.

Chỉ huy

for /f "tokens=2" %%p in ('tasklist /nh /fi "imagename eq explorer.exe" ^| sort /+65') do @set explorerpid=%%p
taskkill /f /pid %explorerpid%

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

  • tasklist /nh /fi "imagename eq explorer.exe"liệt kê tất cả các quy trình với tên hình ảnh explorer.exe.

  • sort /+65 sắp xếp đầu ra trước đó bắt đầu bằng ký tự thứ 65 (nơi bắt đầu sử dụng mem).

  • for /f "tokens=2" %%p in ('COMMAND') do @set explorerpid=%%pđặt explorerpidthành đầu vào thứ hai ( tokens=2) - được phân cách bằng dấu cách - của mỗi dòng của đầu ra COMMAND, là PID tương ứng.

  • Vì thông số tasklistcủa nó đã được sắp xếp, explorerpidgiữ PID được yêu cầu và taskkillchấm dứt quá trình.


Cảm ơn bạn! Nhưng vì một số lý do, điều này không làm việc cho tôi. Tôi đang làm việc để xem liệu tôi có thể sửa đổi nó bằng cách nào đó để làm cho nó hoạt động.
Hod - Quân đội của Monica

1
@Dennis, > để đặt explorerpid thành PID của explorer.exe với mức sử dụng bộ nhớ cao nhất. Đó phải là cách đáng tin cậy nhất để xác định quy trình chính. Không đúng. Mở quy trình cửa sổ mới (ví dụ: thông qua phím tắt) và điều hướng đến thư mục có nhiều hình ảnh và xem chúng ở chế độ hình thu nhỏ. Quá trình mới sẽ nhanh chóng vượt qua quy trình ban đầu trong việc sử dụng bộ nhớ. > Chà, bạn đã không đề cập rằng bạn không sử dụng cấu hình mặc định. Câu hỏi là làm thế nào tôi có thể biết quá trình "explorer.exe" nào là quy trình chính? Làm thế nào khác bạn nghĩ rằng đó có thể là một vấn đề?
Synetech

Cả cách tiếp cận cửa sổ và cách tiếp cận bộ nhớ đều hoạt động. Tôi nghĩ rằng tôi sẽ đi với cửa sổ - có vẻ đáng tin cậy hơn. Cảm ơn rất nhiều!
Hod - Quân đội của Monica

3

Có lẽ bạn có thể bảo Explorer hiển thị đường dẫn trong thanh tiêu đề và sau đó sử dụng WINDOWTITLEbộ lọc để giết nó dựa trên đó?

  • Mở Explorer
  • nhấn Alt
  • Nhấp vào "Công cụ (mục menu)"
  • Nhấp vào "Tùy chọn thư mục ... (mục menu)"
  • Nhấp vào "Xem (tab trang)" trong "Tùy chọn thư mục"
  • Nhấp để chọn "Hiển thị đường dẫn đầy đủ trong thanh tiêu đề (Chỉ chủ đề cổ điển)" trong "Tùy chọn thư mục"
  • Nhấp vào "Áp dụng" -> "OK"

Đường dẫn sẽ không hiển thị trong thanh tiêu đề của Explorer với các chủ đề 'phi cổ điển', nhưng nó hiện tại ở đó; nó chỉ không nhìn thấy được

taskkill /F /FI "WINDOWTITLE eq C:\PathToThing\RunningInExplorer\ToRestart*"

Bạn có thể cần tạm thời chuyển sang một chủ đề cổ điển để xác định đường dẫn / tiêu đề cho phiên bản Explorer mà bạn muốn khởi động lại.

Không phải bằng chứng 100%, nhưng bất kỳ cửa sổ Explorer nào không có đường dẫn (một phần) đó trong tiêu đề đều sẽ an toàn ít nhất. :)

biên tập:

Vì bạn muốn lấy một cái có tiêu đề "Không áp dụng", nên bạn có thể phải sử dụng một tệp bó để bạn có thể mã hóa kết quả của TASKLIST khi sử dụng các kết quả mã thông báo đó để sử dụng TASKKIL để tiêu diệt bằng PID.

Tôi đã tìm thấy câu trả lời cho StackOverflow.com giải quyết vấn đề này:

Từ câu hỏi Nhiệm vụ một quá trình không có tiêu đề? câu trả lời này bao gồm tập tin lô ví dụ này:

@echo off
SETLOCAL enabledelayedexpansion
for /f "tokens=*" %%a in ('TASKLIST /V') do (
  set s=%%a
  set p=!s:~27,5!
  set t=!s:~152,3!
  if '!t!'=='N/A' ECHO TASKKILL /PID !p! /T
)

Bạn sẽ muốn thay đổi lệnh 'TASKLIST / V' để cụ thể hơn cho Explorer.exe và như vậy, nhưng nó sẽ cung cấp cho bạn một điểm khởi đầu tốt.


Quá trình tôi muốn giết là quá trình chính. tasklist /fi "imagename eq explorer.exe" /v /fo listnói với tôi rằng tiêu đề cửa sổ của nó là "Không có". Thật không may, `" windowtitle eq N / A "không hoạt động. Có ý kiến ​​gì không?
Hod - Quân đội của Monica

Ahhhhhh. gotcha. Tôi đã tìm thấy câu trả lời cho điều đó trên StackOverflow, tôi sẽ cập nhật câu trả lời với các bit có liên quan ở đây bằng một liên kết.
Ƭᴇcʜιᴇ007

Tôi vẫn không thấy nó sẽ hoạt động như thế nào. Điều gì nếu không có cửa sổ Explorer mở ngoài máy tính để bàn?
Synetech

1

Giết quá trình với mức thấp nhất (ID tiến trình). Nó sẽ được bắt đầu trước, vì các quy trình được đánh số liên tục.


+1 Điều này sẽ hoạt động lần đầu tiên khi tệp bó được chạy, nhưng vì explorer.exe được khởi động lại, quá trình "chính" mới sẽ có mức PID cao hơn. Có cách nào khác không?
Hod - Quân đội của Monica

Đây là sự thật. Tuy nhiên, bạn chỉ có thể xuất ra tasklist | find /f "explorer"và hỏi sau đó chỉ cần hỏi (với đầu vào của người dùng) mức thấp nhất để loại bỏ PID.
Chuyện hoang đường

@HodofHod: Cách đáng tin cậy nhất là chọn quy trình có mức sử dụng bộ nhớ cao nhất. Nếu bạn có thể sử dụng MinGW ( sed, awk, vv), mà khá dễ dàng để làm tự động. Nếu không, đầu vào của người dùng có thể là lựa chọn tốt nhất.
Dennis

@ Adam543i, > Tiêu diệt tiến trình với mức PID thấp nhất (ID tiến trình). Nó sẽ được bắt đầu trước, vì các quy trình được đánh số liên tục. Bạn đang nói về phiên bản Windows nào? Điều này chỉ đơn giản là không đúng sự thật. Ngoài chức năng bảo mật PID ngẫu nhiên, tôi nhớ lại một vài điều trên OldNewThing về các PID được chỉ định trong các khoảng (bốn hoặc 16 hoặc một cái gì đó). Thực tế là, việc sử dụng các PID (thậm chí là tương đối) là không đáng tin cậy.
Synetech

@Dennis, > Cách đáng tin cậy nhất là chọn quy trình có mức sử dụng bộ nhớ cao nhất. Không. Không có gì. Nó là cực kỳ dễ dàng cho một quá trình sinh sản để có mức sử dụng bộ nhớ cao hơn.
Synetech
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.