好的,所以这就是场景。
CruiseControl.NET(版本:1.5.7256.1)运行一个项目来重建数据库。 CruiseControl.NET窗口服务作为我们为CC.NET创建的Windows用户运行。项目中有几项任务,但它们都运行良好。但是,运行的任务之一是我在C#中编写的基于控制台的实用程序,它生成批处理文件,然后通过.NET Process
类的实例运行它。
正确生成批处理文件,并且该进程在C#中运行正常。但是,运行的批处理文件运行SQLServer(版本2005 SP3)的sqlcmd命令行实用程序。 sqlcmd按预期运行,但sqlcmd的其中一个选项永远不会被应用... -I(打开带引号的标识符)。
e.g。
sqlcmd -U %1 -P %2 -S %3 -d %4 -i someScript.sql -k -b -I >> %LogFileName%
奇怪的是,如果我从持续集成服务器上的命令提示符运行它,它会在-I被应用的情况下运行。
我很困惑。我理解sqlcmd
是否失败,因为执行进程的用户没有足够的权限,如果SQLServer身份验证失败,我会理解SQLServer端是否出现问题,但是它是否有效但是没有对sqlcmd
应用选项是不可思议的。
答案 0 :(得分:0)
可能是因为 - 我是最后一个参数吗?也许那里有一个缺少的空间或某些东西..你试过切换参数顺序吗?
(另外,你为什么要运行一个创建批处理文件并调用它的C#控制台应用程序?cc.net不能自己运行这个文件吗?)