Okno CMD nie zostanie zamknięte, jeśli folder zostanie zamknięty podczas wykonywania pliku nietoperza

17

Mam 64-bitową maszynę wirtualną Server 2012 R2 Standard, która działa dziwnie. Pliki nietoperzy działają dobrze, a okno CMD zamyka się normalnie; ale jeśli folder zawierający plik nietoperza zostanie zamknięty podczas wykonywania pliku nietoperza, zakończy się, ale okno CMD nie zostanie zamknięte. Upraszczam to do tego stopnia, że ​​mam najprostszy możliwy plik nietoperzy. Zawiera 1 linię. pauza

  1. Otwórz folder zawierający plik nietoperza za pomocą Eksploratora Windows
  2. Uruchom plik nietoperza, klikając go dwukrotnie
  3. Zamknij okno Eksploratora Windows
  4. Naciśnij dowolny klawisz w oknie CMD
  5. Kursor przechodzi do następnego wiersza po zakończeniu pliku nietoperza
  6. Okno CMD pozostaje

Dzieje się tak tylko na jednym komputerze. Czy ktoś wie, dlaczego tak się dzieje? Jest to testowa maszyna wirtualna i być może powinna zostać przebudowana, ale mnie ciekawi. Dzięki

Mój prosty plik nietoperza zastąpiłem plikiem zawierającym:

@assoc .bat
@for /F "tokens=1,* delims==" %%G in ('assoc .bat') do @ftype %%H
@reg query "HKLM\Software\Microsoft\Command Processor" /v AutoRun 2>NUL
@reg query "HKCU\Software\Microsoft\Command Processor" /v AutoRun 2>NUL
@wmic process where "caption = 'cmd.exe'" get CommandLine, ParentProcessId,     ProcessID
@echo please close Windows Explorer before continuing
@pause
@wmic process where "caption = 'cmd.exe'" get CommandLine, ParentProcessId,     ProcessID
@pause

Wyniki pokazano poniżej:

.bat=batfile
batfile="%1" %*



CommandLine                                      ParentProcessId  ProcessId
C:\Windows\system32\cmd.exe /c ""D:\test.bat" "  1608             8460

please close Windows Explorer before continuing
Press any key to continue . . .
CommandLine                                      ParentProcessId  ProcessId
C:\Windows\system32\cmd.exe /c ""D:\test.bat" "  1608             8460

Press any key to continue . . .

Wiersz poleceń

13.04.2016 Dowiedziałem się nieco więcej, patrząc na Menedżera zadań. Po uruchomieniu pliku nietoperza w oknie Menedżer zadań - okno szczegółów pojawiają się 2 wiersze ... 1 dla cmd.exe i 1 dla conhost.exe. Po zakończeniu nietoperza cmd.exe znika, ale plik conhost.exe pozostaje. Inną rzeczą, którą zauważyłem, jest to, że tak naprawdę nie musisz wychodzić z folderu Eksploratora Windows, jak już wcześniej powiedziałem ... wystarczy, że klikniesz gdziekolwiek w oknie Eksploratora. Jeśli nie kliknę nigdzie w oknie Eksploratora, okno CMD pliku nietoperza zamyka się normalnie, a oba zadania znikają z okna szczegółów, jak można by się spodziewać.

RGuggisberg
źródło
2
Niestety nie mogę pomóc. Ale muszę Cię uzupełnić, udzielając dobrze napisanego pytania, które precyzyjnie opisuje Twój problem. Chciałbym, aby więcej plakatów po raz pierwszy poświęciło trochę czasu na napisanie dobrze napisanego pytania w ten sposób. Oczywiście nie mogę odtworzyć zachowania na moim komputerze z systemem Windows 10. A ponieważ widzisz zachowanie tylko na jednej konkretnej maszynie, może być trudno komuś zdiagnozować, co się dzieje.
dbenham,
Dzięki @dbenham. Szanuję twoją wiedzę i mądrość, którą rozdajesz w SO pod tagiem pliku wsadowego. Jestem więc plakatem po raz pierwszy na Super User, ale wiem, co masz na myśli na temat nowych plakatów. Tak, zgadzam się, że nie jest prawdopodobne, że ktoś może powielić ... mając tylko nadzieję, że może ktoś to spotkał. To tylko testowa maszyna wirtualna, więc nie jest krytyczna. Chciałbym tylko wiedzieć, co to jest, na wypadek gdyby zdarzyło się to na komputerze klienta.
RGuggisberg,
1
@RGuggisberg - Pamiętaj, aby połączyć swoje konta, aby móc edytować własne pytania. Nie musisz dodawać wskazań, które edytujesz swoje pytanie, system robi to za Ciebie, zupełnie niepotrzebne.
Ramhound 11.04.2016
1
Miałem również ten sam problem na jednej z moich maszyn wirtualnych, jako obejście, które wyraźnie wspomniałem exit poleceniu zamknięcia okna CMD. Może to pomóc.
manjesh23
1
Czy wypróbowałeś już funkcję Analizuj łańcuch oczekiwania w Monitorze zasobów, aby ustalić, na którą aplikację czeka proces ConHost.exe?
Xtremity

Odpowiedzi:

1

Jest to mało prawdopodobne, ale wydaje się, że wykluczyłeś wszystkie prawdopodobne rzeczy. Sprawdź następujące dwa wpisy rejestru, aby zobaczyć, czy coś zawierają:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

lub

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor

Wszystko tam będzie wywoływane za każdym razem, gdy uruchomisz plik wsadowy i jeśli tak jest cmd /k , spowoduje to takie zachowanie.

Argonauci
źródło
Dzięki ... to nie wszystko. To tylko maszyna testowa, więc nie próbuję już tego rozgryźć.
RGuggisberg
0

Próbowałeś tego?

@echo off
rem some code
pause
cls
exit

Te same rzeczy, ale pozwalają na to samo co pauza i same wychodzą.

Ponadto, dlaczego umieszczasz @ przed wszystkim? Dlaczego nie użyć @echo przed pozostałymi poleceniami?

qq410219243
źródło
Tak .. już tego próbowałem. Zaakceptuj przedmowę @. Zazwyczaj tak robię. Nie ma to znaczenia. Prawdopodobnie miał to tam na wstępnych testach, aby zobaczyć polecenia.
RGuggisberg