2
자바 프로그램을 작성 중입니다. 관리자로 앱을 실행해야하며 실행이 끝나면 다른 작업을 수행해야합니다. 처음에는 내가 JNA를 사용하여 특정 프로세스를 찾는 방법은 무엇입니까?
String cmd[] = new String [3];
cmd [0] = "cmd";
cmd [1] = "/C";
cmd [2] = "runas /user:..."
Process p = Runtime.getRuntime().exec(cmd);
을 사용하지만, 문제는 내가 (내가 그것을 시도,하지만 난 해결책을 찾기 않았나) 암호를 입력 할 수 없습니다이었다. 후에, 나는 다음과 같이 그것을 만들 JNA를 사용 : 여기
boolean CreateProcessWithLogonW
(WString lpUsername,
WString lpDomain,
WString lpPassword,
int dwLogonFlags,
WString lpApplicationName,
WString lpCommandLine,
int dwCreationFlags,
Pointer lpEnvironment,
WString lpCurrentDirectory,
STARTUPINFO lpStartupInfo,
PROCESS_INFORMATION lpProcessInfo);
, 문제는이 과정 종료 (어쩌면, JNA에,이 작업을 수행하는 형태가 될 때까지 프로그램의 실행을 기다릴 수 있도록하는 방법이다, 하지만이처럼 ... 너무 크고, 나는 그것을 할 방법을 알고하지는 ...) 내가 할 수있는 또 다른 방법을 생각
만 키우면 가능하면 내가 알고하지는 :
Kernel32 kernel32 = (Kernel32) Native.loadLibrary(Kernel32.class, W32APIOptions.UNICODE_OPTIONS);
Tlhelp32.PROCESSENTRY32.ByReference processEntry = new Tlhelp32.PROCESSENTRY32.ByReference();
WinNT.HANDLE snapshot = kernel32.CreateToolhelp32Snapshot(Tlhelp32.TH32CS_SNAPPROCESS, new WinDef.DWORD(0));
try
{
while (kernel32.Process32Next(snapshot, processEntry))
{
System.out.println(processEntry.th32ProcessID + "\t" + Native.toString(processEntry.szExeFile));
}
}
위도,이 ID와 프로세스 이름이 있습니다. 이 프로세스를 실행하는 사용자의 이름을 찾는 것이 가능합니까 ?? 내가 성공한다면, 나는 그것을 할 수있다. (관리자 만이이 프로세스가 실행될 수있다.)
감사합니다.
프로세스의 입력 스트림을 사용해 보셨습니까? 네이티브 코드에 관한 부분은 시스템 의존적 인 코드를 사용한다면 시스템 의존적 인 방법을 사용해야 할 것이다. 그리고 코드를 작성한 OS를 지정한 경우 중복 목록이 길어질 수 있습니다. – Paul
OS는 Windows 7입니다. 예, InputStream과 InputStreamReader를 사용하여 시도했지만 작동하지 않습니다. – RMNBA
JNA 자체는 공유 라이브러리에서 코드를로드하고 실행하는 유틸리티 일뿐입니다. 작성하려는 코드는 작성한 OS에서 원시 코드로 실행해야합니다. 그래서 이것은 처음에는 자바 문제가 아니라 오히려 C++과 코드를 실행하고자하는 OS에 특정한 문제입니다. [이] (http://stackoverflow.com/questions/9454019/how-to-wait-for-a-process-to-finish-c) 트릭을해야합니다 – Paul