001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 *
017 */
018
019 package org.apache.commons.exec.launcher;
020
021 import java.io.File;
022 import java.io.IOException;
023 import java.util.Map;
024
025 import org.apache.commons.exec.CommandLine;
026
027 /**
028 * A command launcher for Windows XP/2000/NT that uses 'cmd.exe' when launching
029 * commands in directories other than the current working directory.
030 */
031 public class WinNTCommandLauncher extends CommandLauncherProxy {
032 public WinNTCommandLauncher(final CommandLauncher launcher) {
033 super(launcher);
034 }
035
036 /**
037 * Launches the given command in a new process, in the given working
038 * directory.
039 *
040 * @param cmd
041 * the command line to execute as an array of strings
042 * @param env
043 * the environment to set as an array of strings
044 * @param workingDir
045 * working directory where the command should run
046 * @throws IOException
047 * forwarded from the exec method of the command launcher
048 */
049 public Process exec(final CommandLine cmd, final Map env,
050 final File workingDir) throws IOException {
051 if (workingDir == null) {
052 return exec(cmd, env);
053 }
054
055 // Use cmd.exe to change to the specified directory before running
056 // the command
057 CommandLine newCmd = new CommandLine("cmd");
058 newCmd.addArgument("/c");
059 newCmd.addArguments(cmd.toStrings());
060
061 return exec(newCmd, env);
062 }
063 }