我需要编写一个控制台应用程序,它返回一个可以通过xp_cmdshell捕获的返回代码。
我从c#代码开始,如下所示,
class Program
{
static int Main(string[] args)
{
//make sure the correct number of arguments are being passed.
if (args.Length !=5)
{
Console.WriteLine("not thr right number of args. \nUsage SFTPUploadFile <host> <port> <username> <password> <localFilePath>");
return 1;
}
return 0;
}
}
XP_cmdhsell我正在使用我发现的一些代码
declare @rc int
create table #output (id int identity(1,1), output nvarchar(255) null)
insert #output (output) exec @rc = master..xp_cmdshell 'd:\FILENAME PARA1 PARA2 PARA3 PARA4 PARA5'
select * from #output where output is not null order by id
drop table #output
但是当我运行我的xp_cmdshell时,我只是得到null。我不应该得到1或0吗?
由于
答案 0 :(得分:0)
看起来您的程序会检查是否有5个参数,如果有则不执行任何操作(返回0
)。
反过来,xp_cmdshell命令提供所有参数。如果xp_cmdshell没有收到任何输出,它将返回NULL
。
如果您将代码更改为以下内容:
class Program
{
static int Main(string[] args)
{
//make sure the correct number of arguments are being passed.
if (args.Length !=5)
{
Console.WriteLine("not thr right number of args. \nUsage SFTPUploadFile <host> <port> <username> <password> <localFilePath>");
return 1;
}
Console.WriteLine("You had the right number of args.");
return 0;
}
}
(或者,如果你真的想要0或1,你可以Console.WriteLine("0");
和Console.WriteLine("1");
。)
你会回来You had the right number of args.
。这是因为return 0;
和return 1;
不会向控制台打印任何内容,这是xp_cmdshell
将发送回客户端的内容。
你可以通过EXEC master..xp_cmdshell 'cd ..'
来证明这一点......这是一个不会返回结果的命令。另一方面,EXEC master..xp_cmdshell 'dir *.exe'
将返回目录内容,因为这是输出(或写入)控制台的内容。