Zamknij konsolę Java, używając pliku wsadowego

0

Pracuję dla lokalnej rady, która z jakiegoś powodu zakupiła aplikację bardzo niestabilną podczas korzystania z Javy. Niektóre ekrany internetowe się nie uruchamiają, a jedynym sposobem, w jaki udało mi się rozwiązać problem, jest otwarcie konsoli Java, a następnie natychmiastowe zamknięcie bez robienia czegokolwiek innego. Niestety powiedziano mi, że nie jest to zadowalająca poprawa, gdy setki osób będą korzystać z systemu. Napisałem plik wsadowy, który otworzy i zamknie konsolę przed otwarciem adresu URL IE (patrz poniżej).

Start /wait "" "C:\Program Files\Java\jre6\bin\javacpl.exe"  
ECHO Opening JAVA Console  
timeout 4  
TASKKILL /F /IM javacpl.exe

Problem polega na tym, że zabija ona każdą sesję Java, która działa na komputerze, nie tylko konsolę. Dlatego ludzie nie są w stanie uruchomić wielu wersji aplikacji, tj. Test, Dev, Train i / lub Live. Czy istnieje sposób na zamknięcie konsoli, ale pozostawienie wszystkich innych uruchomionych programów Java?

Dzięki

Wayne Shepherd
źródło
Z jakiego systemu operacyjnego korzystasz?
Doktoro Reichard

Odpowiedzi:

0

Jeśli spojrzysz na polecenie taskkill, zobaczysz przełączniki taskkill:

TASKKILL [/S system [/U username [/P [password]]]]
         { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]

Description:
    This tool is used to terminate tasks by process id (PID) or image name.

Parameter List:
    /S    system           Specifies the remote system to connect to.

    /U    [domain\]user    Specifies the user context under which the
                           command should execute.

    /P    [password]       Specifies the password for the given user
                           context. Prompts for input if omitted.

    /FI   filter           Applies a filter to select a set of tasks.
                           Allows "*" to be used. ex. imagename eq acme*

    /PID  processid        Specifies the PID of the process to be terminated.
                           Use TaskList to get the PID.

    /IM   imagename        Specifies the image name of the process
                           to be terminated. Wildcard '*' can be used
                           to specify all tasks or image names.

    /T                     Terminates the specified process and any
                           child processes which were started by it.

    /F                     Specifies to forcefully terminate the process(es).

    /?                     Displays this help message.

Filters:
    Filter Name   Valid Operators           Valid Value(s)
    -----------   ---------------           -------------------------
    STATUS        eq, ne                    RUNNING |
                                            NOT RESPONDING | UNKNOWN
    IMAGENAME     eq, ne                    Image name
    PID           eq, ne, gt, lt, ge, le    PID value
    SESSION       eq, ne, gt, lt, ge, le    Session number.
    CPUTIME       eq, ne, gt, lt, ge, le    CPU time in the format
                                            of hh:mm:ss.
                                            hh - hours,
                                            mm - minutes, ss - seconds
    MEMUSAGE      eq, ne, gt, lt, ge, le    Memory usage in KB
    USERNAME      eq, ne                    User name in [domain\]user
                                            format
    MODULES       eq, ne                    DLL name
    SERVICES      eq, ne                    Service name
    WINDOWTITLE   eq, ne                    Window title

    NOTE
    ----
    1) Wildcard '*' for /IM switch is accepted only when a filter is applied.
    2) Termination of remote processes will always be done forcefully (/F).
    3) "WINDOWTITLE" and "STATUS" filters are not considered when a remote
       machine is specified.

Examples:
    TASKKILL /IM notepad.exe
    TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
    TASKKILL /F /IM cmd.exe /T 
    TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
    TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
    TASKKILL /S system /U domain\username /FI "USERNAME ne NT*" /IM *
    TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"

Być może będziesz w stanie TASKKILL /FI "Windows title"zabić określoną instancję, z którą masz problemy.

Możesz również zrobić zasadniczo to samo w PowerShell, ale istnieją inne potencjalne drogi, aby spróbować lepiej zgadywać.

Na przykład możesz zobaczyć, jaki jest czas działania różnych plików Java.ex i zabić tylko ten właściwy:

Get-Process -Name "java" | where {$_.Starttime -lt 100}
Austin T French
źródło