Ant exec - не может запустить программу 'start' Ошибка CreateProcess = 2 - PullRequest
8 голосов
/ 17 декабря 2009

Я не могу запустить windows 'start' с помощью ant exec. Ant версия 1.7.1.

Вот пример build.xml для воссоздания проблемы

<project name="test"  basedir="." default="test-target">
<target name="test-target">
        <exec executable="start">
            <arg line="cmd /c notepad" />  
        </exec>      
</target>
</project>

получая следующую ошибку при выполнении этого файла сборки:

Execute failed: java.io.IOException: Cannot run program "start": Cre
ateProcess error=2, The system cannot find the file specified

Мой env - Windows XP, Ant 1.7.1 Я пытаюсь запустить это из командной строки DOS. Я исключаю любые проблемы, связанные с PATH, так как я могу запустить 'start cmd / c notepad' из приглашения DOS вручную.

Есть предложения, как это исправить?

веселит с

Ответы [ 3 ]

14 голосов
/ 17 декабря 2009

start - это не исполняемый файл, а внутренняя команда оболочки cmd.exe, поэтому для запуска нужно выполнить:

<exec executable="cmd.exe">
        <arg line="/c start notepad" />  
    </exec>

EDIT:

Для создания нескольких окон это должно работать:

<target name="spawnwindows">
    <exec executable="cmd.exe" spawn="yes">
        <arg line="/c start cmd.exe /k echo test1" />  
    </exec>
    <exec executable="cmd.exe" spawn="yes">
        <arg line="/c start cmd.exe /k echo test2" />  
    </exec>
</target>

но вы упомянули, что spawn = "true" не подходит для вашей среды, почему это так?

1 голос
/ 15 декабря 2010

мое решение

<project name="test"  basedir="." default="test-target">
<target name="start-init">
        <exec executable="where" outputproperty="START">
            <arg line="start" />
        </exec>
</target>
<target name="test-target">
        <exec executable="${START}">
            <arg line="cmd /c notepad" />  
        </exec>      
</target>
</project>
0 голосов
/ 17 декабря 2009

Как насчет <exec executable="start.exe">? Или start.bat?

Кроме того, где basedir="." указывает на? Если вы поместите <echo message="basedir = ${basedir}"/> непосредственно перед вашим тегом <exec>, будет ли он печатать правильную папку (ту, в которой находится программа "start")?

Кроме того, вы можете добавить <echoproperties /> до <exec>, чтобы увидеть все видимые свойства.

...