В Ubuntu вы редактируете / etc / apache2 / envvars, как предложил Берри.
Когда вы меняете пользователя Apache, остерегайтесь непредвиденных последствий. Одним из них являются сеансы PHP, которые могут храниться в / var / lib / php5. Возможно, вам также придется изменить владельца этой папки.
Вы пробовали вариант B для "start"?
proc = Runtime.getRuntime().exec("cmd /c start /B somebat.bat");
Edit:
Хорошо, Аниш, забавно, что ваш код не выполняется.
Я установил модульный тест:
Process proc = null;
try
{
proc = Runtime.getRuntime().exec("cmd /c start /B D:\\temp\\_test\\somebat.bat");
proc = Runtime.getRuntime().exec("cmd /c call D:\\temp\\_test\\somebat.bat");
proc = Runtime.getRuntime().exec("D:\\temp\\_test\\somebat.bat");
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
Мой файл somebat.bat выглядит так:
rem somebat.bat:
d:
cd D:\temp\_test
copy somebat.bat somebat2.bat
Все три версии в блоке try выше работают в моем сценарии. Somebat.bat копируется в somebat2.bat без всплывающего окна командной строки (что произойдет, если я использую ваш вызов, указанный в вашем вопросе).
Редактировать 2: Следующий раунд; -)
Аниш, можешь показать нам, как выглядит твой somebat.bat и файл ant?
Поскольку все три приведенных ниже вызова работают в моем сценарии:
тестовый код:
Process proc = null;
proc = Runtime.getRuntime().exec("cmd /c start /B c:\\temp\\_test\\somebat.bat");
proc = Runtime.getRuntime().exec("cmd /c call c:\\temp\\_test\\somebat.bat");
proc = Runtime.getRuntime().exec("c:\\temp\\_test\\somebat.bat");
somebat.bat:
cd\temp\_test
ant mycopy
build.xml:
<?xml version="1.0"?>
<project name="testproj" default="mycopy" basedir=".">
<target name="mycopy">
<copy file="myfile.txt" tofile="mycopy.txt" />
</target>
</project>
myfile.txt: произвольный текстовый файл
Вы пробовали
start /min "title" "c:\path\batchfile.bat"
Это запустит ваш командный файл без окна. Однако он по-прежнему будет отображаться на панели задач (поскольку он свернут)
Добавьте / Q
Runtime.getRuntime().exec( "cmd /c /Q start somebat.bat");
Посмотрите это сообщение на форуме . В одном из ответов предлагается использовать сценарий vbs , чтобы скрыть окно.
Я не очень хорошо разбираюсь в окнах, но предлагаю вам опустить бит "cmd" в команде. cmd.exe - это терминал Windows. Просто предположение. Найдите другие методы exec (), есть тот, который запускает исполняемый файл команды и аргументы. По крайней мере, в UNIX вы обычно не можете делать ничего, что не поддерживает оболочка (например, передавать вывод в файл), поскольку это функции оболочки, а не выполняемые вызываемой программой. Может быть, поэтому вы обнаружите, что после удаления префикса cmd некоторые вещи не работают.
попробуйте просто:
Process proc = Runtime.getRuntime (). Exec ("somebat.bat");