我是horn开源项目的开发人员,旨在简化构建其他开源项目的痛苦。我们试图使horn成为类似于Ruby gems的体验。horn的许多挑战之一是必须处理各种构建引擎,如Nant、PowerShell、msbuild和rake,这就是本文的重点。
Horn有两种形式,它作为一个命令行工具运行,也作为一个Windows服务运行,在其中构建可以从this网站下载的各种软件包。
某些开源项目使用rake构建其源代码,这最终带我到了本文的重点。
当从命令行运行时,我无法从Windows服务中运行rake进程,而完全相同的代码可以启动rake进程而不会出现任何问题。rake能够从cmd行工具中运行的原因可能是因为它与窗口相关联,尽管我不能确切地说。没有抛出异常,但进程只是不启动。
有趣的是,每个其他的.exe都正常工作,只有rake引起问题。
这里是启动创建进程的代码:
Horn有两种形式,它作为一个命令行工具运行,也作为一个Windows服务运行,在其中构建可以从this网站下载的各种软件包。
某些开源项目使用rake构建其源代码,这最终带我到了本文的重点。
当从命令行运行时,我无法从Windows服务中运行rake进程,而完全相同的代码可以启动rake进程而不会出现任何问题。rake能够从cmd行工具中运行的原因可能是因为它与窗口相关联,尽管我不能确切地说。没有抛出异常,但进程只是不启动。
有趣的是,每个其他的.exe都正常工作,只有rake引起问题。
这里是启动创建进程的代码:
public IProcess GetProcess(string pathToBuildTool, string cmdLineArguments, string workingDirectoryPath)
{
var psi = new ProcessStartInfo(pathToBuildTool, cmdLineArguments)
{
UseShellExecute = false,
RedirectStandardOutput = true,
WorkingDirectory = workingDirectoryPath,
Arguments = cmdLineArguments
};
return new DiagnosticsProcess(Process.Start(psi));
}
有人对问题有什么建议吗?