클라이언트가 서버 및 클라이언트를 가지고 있으며 클라이언트가 wrapper을 사용하여 백그라운드에서 실행 중입니다. 나는 보통처럼 내가 콘솔에서 클라이언트를 실행할 때래퍼를 사용하여 Runtime.exec()를 통해 명령 실행
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(command);
이 잘 작동 : 서버 SocketChannels
를 사용하여 클라이언트와 클라이언트에 명령을 전송하는 명령이 방법을 실행합니다. 그러나 Windows 서비스로 실행하면 일부 명령이 작동하지 않습니다. 예 :
runtime.exec("shutdown -s -t 300");// works perfectly
runtime.exec("shutdown -a"); // works perfectly
runtime.exec("shutdown -l"); // works only when client started from console
// note that these commands will shutdown your computer or log off
세 번째 명령은 단순히 아무 일도하지 않고 프로그램이 정상적으로 작동합니다. 나는 명령을 무작위 순서로 분리하여 실행하는데 아무런 차이가 없다. Windows를 사용하고 있습니다.
그래서 내가 뭘 잘못하고 있니?
또한 서비스 "notepad.exe"(또는 전체 경로의 다른 .exe)에서 실행할 수 없습니다. 이 작업을 수행하는 올바른 방법이 무엇인지 알고 싶습니다 (다시 콘솔에서 작동 함).
똑같은'-y' 매개 변수는 아무런 차이가 없으며 콘솔에서만 작동합니다. 도와 주셔서 감사합니다. 어쨌든'-y'를 사용하겠습니다. – alaster
@alaster, 현재 로그인 한 사용자로 서비스 실행을 시도하고 "데스크탑과 상호 작용"옵션을 선택하십시오. 이 명령이 표시되는 UI를보아야합니다. 아마도'-y' 스위치로는 충분하지 않을 수도 있습니다. 또한 Sysinternal의 [PsShutdown] (http://technet.microsoft.com/en-us/sysinternals/bb897541.aspx)을 살펴보십시오. '-f' 플래그가 유망 해 보입니다. – eran