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

Каждый раз, когда возможный я использую ссылки по указателям. Причина этого состоит в том, что намного более трудно завинтить ссылку, чем указатель. Люди могут всегда передавать ПУСТОЙ УКАЗАТЕЛЬ значению указателя, но нет такого эквивалента ссылке.

единственная реальная оборотная сторона является там параметрами ссылки в C++, имеют отсутствие документации сайта вызова. Некоторые люди полагают, что это мешает понимать код (и я соглашаюсь до степени). Я обычно определяю следующее в своем коде и использую его для поддельной документации сайта вызова

#define byref
...
someFunc(byref x);

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

http://blogs.msdn.com/jaredpar/archive/2008/04/03/reference-values-in-c.aspx

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
поделиться
Другие вопросы по тегам:

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