Запущение другой программы в bat-файле Windows и не создает дочерний процесс

У меня есть сервер подверсии с рычагом постфиксации, чтобы сделать что-то.

Я скоро хочу конец регистрации, не ожидают сценарий рычага. Но дизайном, сценарий рычага постфиксации Подверсии будет работать до всего выхода дочернего процесса, таким образом с помощью чего-то как:

запустите another_prog...

в рычаге bat-файл имеет быть бесполезное.

Таким образом, я хочу знать, как запустить другую программу в bat-файле Windows, которые не создают дочерний процесс или позволяют дочернему процессу отсоединиться от родителя.

17
задан bahrep 22 July 2019 в 20:23
поделиться

6 ответов

Я нашел способ решить свой вопрос, скомпилировал следующий код c и назвал вывод exe как runjob.exe, а затем в файле ловушки bat, используйте "runjob another_prog", теперь это ок.

#include <windows.h> 
#include <stdio.h> 
#include <tchar.h> 
int _tmain() 
{ 
    char * pCmd = ::GetCommandLine(); 
    // skip the executable 
    if (*pCmd++ == L'"')
    {
        while (*pCmd++ != L'"'); 
    }
    else 
    {
        while (*pCmd != NULL && *pCmd != L' ') 
            ++pCmd; 
    }

    while (*pCmd == L' ')
        pCmd++; 

    STARTUPINFO si; 
    ZeroMemory( &si, sizeof(si) ); 
    si.cb = sizeof(si); 
    PROCESS_INFORMATION pi; 
    ZeroMemory( &pi, sizeof(pi) ); 

    // Start the child process. 
    BOOL result = CreateProcess 
    ( 
        NULL, // No module name (use command line) 
        pCmd, // Command line 
        NULL, // Process handle not inheritable 
        NULL, // Thread handle not inheritable 
        FALSE, // Set bInheritHandles to FALSE 
        DETACHED_PROCESS, // Detach process 
        NULL, // Use parent's environment block 
        NULL, // Use parent's starting directory 
        &si, // Pointer to STARTUPINFO structure 
        &pi // Pointer to PROCESS_INFORMATION structure (returned) 
    ); 
    if (result) return 0; 

    char msg[2048]; 
    FormatMessage 
    ( 
        FORMAT_MESSAGE_FROM_SYSTEM, 
        NULL, 
        ::GetLastError(), 
        MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT), 
        msg, sizeof(msg), 
        NULL 
    ); 
    fputs(msg, stderr); 
    _flushall(); 

    return -1; 
} 
12
ответ дан 30 November 2019 в 11:13
поделиться

Try cmd /c "your command"

1
ответ дан 30 November 2019 в 11:13
поделиться

Не могли бы вы использовать интерфейс командной строки планировщика задач Windows "schtasks / run" для запуска задания, которое запускает "another_prog"? Вам придется создавать работу заранее. Раньше также существовала программа «СКОРО» с Windows (NT) Resource Kit, которая создавала динамические записи для планировщика команд «AT», чтобы запустить задание за несколько минут, которое не требовало бы предварительной настройки задания, его все еще можно найти, немного поискав.

1
ответ дан 30 November 2019 в 11:13
поделиться

Использование:

start cmd /c "your command"

Ура.

4
ответ дан 30 November 2019 в 11:13
поделиться

Что вы можете сделать, так это создать запланированную задачу, которая выполняет пакетный сценарий или другой исполняемый файл, который выполняется в течение длительного времени. Установите его на запуск один раз в прошлом и не настраивайте его на удаление задачи, когда больше не запланировано запусков. Затем в вашем сценарии перехвата Subversion введите следующую строку:

schtasks /run /tn NameOfYourTaskHere

Я подтвердил тестом, запустив запланированную задачу Notepad ++, и исполняемый файл Notepad ++ появился как дочерний для svchost.exe, а не как окно cmd.exe, которое я выполнил команду schtasks из.

7
ответ дан 30 November 2019 в 11:13
поделиться

Синхронный. Второй блокнот не запустится, пока вы не закроете первый.

notepad.exe c:\temp\a.txt
notepad.exe c:\temp\b.txt

Асинхронный: второй блокнот запустится, даже если вы не закрыли первый.

start notepad.exe c:\temp\a.txt
start notepad.exe c:\temp\b.txt

Подробнее о команде запуска:
http: // www.robvanderwoude.com/ntstart.php[125 visibleEDIT: следующий комментарий был сделан в другом месте @zhongshu, оригинальным автором. Я только копирую его здесь:

start cmd / c не работает, потому что SVN хук после фиксации будет ждать крючок и дочерний процесс, созданный выход крючка. Это дизайн SVN. Я нашел решение, обратитесь: http://svn.haxx.se/users/archive-2008-11/0301.shtml

Если предположить, что он знает, о чем говорит, я ошибаюсь и ... не заслуживаю.

18
ответ дан 30 November 2019 в 11:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: