Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows bat文件中运行另一个程序,但不创建子进程_Windows_Batch File_Svn_Svn Hooks_Post Commit - Fatal编程技术网

在Windows bat文件中运行另一个程序,但不创建子进程

在Windows bat文件中运行另一个程序,但不创建子进程,windows,batch-file,svn,svn-hooks,post-commit,Windows,Batch File,Svn,Svn Hooks,Post Commit,我有一个带有post-commit钩子的subversion服务器来做一些事情 我希望尽快完成签入,而不是等待钩子脚本。 但根据设计,Subversion提交后钩子脚本将一直运行到所有子进程退出为止,因此使用如下方式: 开始另一个程序 在hook中,bat文件没有任何用处 因此,我想知道如何在Windows bat文件中运行另一个程序,该程序不创建子进程,也不让子进程与父进程分离。请尝试cmd/c您的命令是否可以使用Windows任务计划程序命令行界面schtasks/run启动运行另一个程序的

我有一个带有post-commit钩子的subversion服务器来做一些事情

我希望尽快完成签入,而不是等待钩子脚本。 但根据设计,Subversion提交后钩子脚本将一直运行到所有子进程退出为止,因此使用如下方式:

开始另一个程序

在hook中,bat文件没有任何用处


因此,我想知道如何在Windows bat文件中运行另一个程序,该程序不创建子进程,也不让子进程与父进程分离。

请尝试cmd/c您的命令

是否可以使用Windows任务计划程序命令行界面schtasks/run启动运行另一个程序的作业?你必须提前创建工作。以前还有一个带有Windows NT资源工具包的SOON程序,它可以为AT命令计划程序创建动态条目,以便在几分钟内运行作业,而不需要提前设置作业,只需稍加搜索即可找到该作业。

使用:

start cmd /c "your command"

干杯。

。在关闭第一个记事本之前,第二个记事本不会启动

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
异步:即使尚未关闭第一个记事本,第二个记事本也将启动

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
有关start命令的详细信息:

编辑:以下评论由原海报@zhongshu在别处发表。我只是在这里复制:


start cmd/c不工作,因为SVN post-commit钩子将等待 钩子和由创建的子进程 吊钩出口。这是SVN的设计。 我已找到解决方案,请参考:


假设他知道他在说什么,我错了,而且……不值得。

你能做的就是创建一个计划任务,执行批处理脚本或其他长时间运行的可执行文件。将其设置为在过去运行一次,不要将其设置为在不再计划运行时删除任务。然后在Subversion钩子脚本中,放入以下行:

schtasks /run /tn NameOfYourTaskHere

我通过测试确认了这一点,让我的计划任务运行Notepad++并且Notepad++可执行文件显示为svchost.exe的子文件,而不是执行schtasks命令的cmd.exe窗口。

我找到了解决问题的方法,编译以下c代码并将exe输出命名为runjob.exe,然后在hook bat文件中,使用runjob另一个程序,现在就可以了

#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; 
} 

您可以创建一个混合批处理/JScript文件,即一个能够运行嵌入式JScript的批处理文件,其中JScript部件将在分离模式下运行另一个_prog,具有:


不,cmd/c没有用,svn将等待您的命令完成。您能否澄清您试图解决的问题?subversion提交后钩子是否真的会等待所有进程退出?为什么启动cmd/c startweblog.cmd不起作用?启动cmd/c不起作用,因为SVN post commit钩子将等待钩子和钩子出口创建的子进程。这是SVN的设计。我找到了一个解决方案,请参考:在许多情况下,您应该能够省略cmd/c see-answer by Corey tragert这将不适用于Windows上的SVN post-commit钩子。它仍将等待子进程完成。见百万感谢正确的解决方案!创建自己的程序来执行其他程序仍然有点不舒服。但是,比使用计划任务等要好100倍。Thx Thx Thx有一个指向源代码的已编译可执行文件的链接:做些准备,为另一个程序提供命令行参数,怎么样?否则,我将不得不包装另一个批处理脚本来调用带有argst的exe。这对于windows上的SVN Post commit非常有效。我们使用了一个Powershell脚本,该脚本在提交到svn时造成了明显的延迟。现在,对于计划任务,提交立即完成,任务在后台执行。schtasks/run/tn NameOfTask是这里最好的解决方案。