Java를 통해 'net use'명령을 사용하여 네트워크 드라이브를 매핑하려고합니다.Java를 사용하는 매핑 된 네트워크 드라이브가 연결되지 않았습니다.
나는 그물에 보인 몇몇 접근을 시도했다 그러나 아무도 우리의 UAT PC에 작동하는 것처럼 보이지 않으며 항상 나의 PC에 작동한다.
UAT의 PC - Windows Server 2008 R2의 표준 서비스 팩 1 내 PC - 윈도우 7 프로 서비스 팩 어떻게됩니까 1
는 방법은 새 드라이브하지만 드라이브 아이콘이 X 표시가 뭔가 나타내는했습니다 생성입니다 잘못되었습니다. 클릭하면 다음과 같이 말합니다. "위치를 사용할 수 없습니다."[메시지 제목] L :에 액세스 할 수 없습니다. 로그온 실패 : 알 수없는 사용자 이름 또는 암호가 잘못되었습니다.
다음은 지금까지 시도했지만 동일한 결과를 산출 한 코드입니다. 나는 (시도 1) 명령 줄에서 실제 명령을 실행하거나 내가 (시도 4에서) 자체를 배치 파일을 실행하면
public void connectToRemoteServer()
{
try
{
String USER_NAME = "domain\\username";
String PASSWORD = "password";
/** ATTEMPT 1 - Call command from JAVA using string - OK in LOCAL, FAILED in UAT */
// String commandInside = "net use " + REMOTE_FILE_SERVER_DRIVE + ": \\\\ipaddress\\folder /user:" + USER_NAME + " " + PASSWORD;
// Process p = Runtime.getRuntime().exec(commandInside);
// Log.info("Executing command [" + commandInside + "]");
// p.waitFor();
/** ATTEMPT 2 - Call command from JAVA using an array of string - OK in LOCAL, FAILED in UAT */
// String[] commandInside = {"c:\\windows\\system32\\net.exe", "use", REMOTE_FILE_SERVER_DRIVE + ":", "\\\\ipaddress\\folder", "/user:" + USER_NAME, PASSWORD };
// Process p = Runtime.getRuntime().exec(commandInside);
// Log.info("Executing command [" + commandInside + "]");
// p.waitFor();
/** ATTEMPT 3 - Call command from JAVA using a process builder - OK in LOCAL, FAILED in UAT */
// String[] commandInside = { "cmd.exe", "/C", "net", "use", REMOTE_FILE_SERVER_DRIVE + ":", "\\\\ipaddress\\folder", "/user:" + USER_NAME, PASSWORD };
// Log.info("Constructed command [" + Arrays.toString(commandInside) + "]");
// ProcessBuilder pb = new ProcessBuilder(commandInside);
// Log.info("Starting command");
// Process process = pb.start();
// Log.info("Waiting for command to complete");
// process.waitFor();
/** ATTEMPT 4 - Write the command in a cmd/bat file then execute that cmd/bat file from JAVA using an array of string - OK in LOCAL, FAILED in UAT*/
File batchFile = new File(ROOT_PATH + "MapRemoteServer.cmd");
String commandInside = "net use " + REMOTE_FILE_SERVER_DRIVE + ": \\\\ipaddress\\folder/user:" + USER_NAME + " " + PASSWORD;
batchFile.createNewFile();
FileWriter fw = new FileWriter(batchFile);
fw.write(commandInside + "\r\n\r\nexit");
fw.close();
Thread.sleep(500); // just to ensure that the file is properly closed before running it
String[] command = { "cmd.exe", "/c", "Start", ROOT_PATH + "MapRemoteServer.cmd" };
Process process = Runtime.getRuntime().exec(command);
process.waitFor();
int exitStatus = process.exitValue();
Log.info("Exit status: [" + exitStatus + "]");
if (exitStatus != 0 && exitStatus != 2)
{
BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String messageLine = null;
Log.info("Error/Warning encountered during execution of net use!");
while ((messageLine = stdError.readLine()) != null) {
if (messageLine.length() > 0)
{
Log.info(messageLine);
}
}
}
else if (exitStatus == 2)
{
Log.info("Connection already established!");
}
else
{
Log.info("Connection successful!");
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
, 그것을 작동합니다. 내 Java 코드에 의해 실행될 때만 그렇습니다.
넷 사용 이외에도 Java를 통해 Windows에서 드라이브를 매핑하는 다른 방법이 있습니까? Windows PC에서 프로그램에서 매핑을 방지 할 수있는 일종의 설정이 있습니까?
드라이브 매핑에는 관리자 액세스 권한이 필요합니다. 높은 보안으로 명령을 실행해야합니다. 방법은 Google ['java as administrator' (https://www.google.com/search?q=java+run+as+administrator)]를 참조하십시오. – Andreas
드라이브를 매핑하는 데 사용하는 ID는 이미'(/ user : "+ USER_NAME +" "+ PASSWORD) '액세스 권한이 있습니다. 또한 일괄 스크립트를 실행하려면 관리자 ID를 사용해야하며? – leahsaif
그것은 네트워크 공유에 액세스하는 데 사용되는 ID입니다. 그러나 드라이브 문자를 매핑하는 데 로컬 관리자 권한이 필요합니다. OS 설정 변경 때문이며 Windows UAC가 활성화되어있는 경우 권한 상승이 필요한 이유입니다. – Andreas