1.xp_cmdshell返回的结果是在SQL服务器上
2.xp_cmdshell调用的不能是有交互性质的程序,即需要用户输入的程序,否则就会死在那里. 
  不信你用xp_cmdshell调用记事本(notepad)试试
  检查一下你的程序中是否有需要用户输入的处理部分.

解决方案 »

  1.   

    1、我执行第二个程序,能在c:\生成test.txt文件,而不是在服务器输出。
    2、我2个程序都不用输入,程序1生成一个excel文件就退出了,程序2生成一个文本文件就退出。除了用到了ole创建excel对象,进行了一些简单的处理外,没有任何区别!
    望大侠再指点一二。
      

  2.   

    2个源程序如下:
    ----------------------------------------------------------------------------------program Project2;{$APPTYPE CONSOLE}uses
      SysUtils, Variants, DateUtils, ComObj, ActiveX;
    //  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    //  Dialogs, DateUtils, ComObj;
    var
      fn: String ;
      s: String ;
      dtFs : TFormatSettings;
      eclApp, WorkBook : Variant;   //ÉùÃ÷ΪOLE Automation ¶ÔÏó
      i : Integer;  begin
      { TODO -oUser -cConsole Main : Insert code here }
      GetLocaleFormatSettings(0, dtFs);
      dtFs.ShortDateFormat := 'yyyy-MM-dd';
      s := DateToStr(IncDay(Date, -1), dtFs);
      fn := 'st_report_' + Trim(Copy(s,1,4))+ '_' + Trim(Copy(s,6,2))+ '_' + Trim(Copy(s,9,2))+ '.xls';  oleInitialize(NIL);   //³õʼ»¯OLE¶ÔÏ󡪡ªÖØÒª
      try
      begin
        //´´½¨OLE¶ÔÏóExcel ApplicationÓë WorkBook
        eclApp := CreateOleObject('Excel.Application');
        WorkBook := CreateOleobject('Excel.Sheet');
      end;
      except
      begin
        //ShowMessage('ÄúµÄ»úÆ÷Àïδ°²×°Microsoft Excel¡£');
        Exit;
      end;
      end;  //н¨Ò»¸öXLSÎļþ,²¢Ð´ÈëÊý¾Ý,×îºó¹Ø±ÕËü
      WorkBook := eclApp.WorkBooks.Add;
      eclApp.Visible := False;
      for i:=1 to 4 do
      begin
        WorkBook.WorkSheets.Add ;
        eclApp.Cells(1, 1) := 'Öм̷½Ïò';
        eclApp.Cells(1, 2):= '×Ü»°ÎñÁ¿';
        eclApp.Cells(1, 3):= '¿ÉÓõç·Êý';
        eclApp.Cells(1, 4):= 'ÿÏß»°ÎñÁ¿';
        eclApp.Cells(1, 5):= 'Ó¦Õ¼±È';
        eclApp.Cells(1, 6):= 'ÍøÂç½ÓͨÂÊ';
      end;
        //WorkBook.SaveAs('C:\MSSQL7\TSReport\'+fn);
        WorkBook.SaveAs('C:\'+fn);    WorkBook.WorkSheets[7].Delete ;
        WorkBook.WorkSheets[6].Delete ;
        WorkBook.WorkSheets[5].Delete ;    WorkBook.WorkSheets[1].Name := 'Ò¦°¯»°ÎñÁ¿Èë';
        WorkBook.WorkSheets[2].Name := 'Ò¦°¯»°ÎñÁ¿³ö';
        WorkBook.WorkSheets[3].Name := 'ÄÏÕ¾»°ÎñÁ¿³ö';
        WorkBook.WorkSheets[4].Name := 'ÄÏÕ¾»°ÎñÁ¿Èë';
        WorkBook.Save;
        WorkBook.Close;
        eclApp.Quit;
        oleUninitialize;    //ÊÍ·ÅOLE¶ÔÏó
        Writeln('Export Successfully!');
    end.----------------------------------------------------------------------------------program console;{$APPTYPE CONSOLE}uses
      SysUtils;var
      f:TextFile;
      s:String;
    begin
      { TODO -oUser -cConsole Main : Insert code here }
      AssignFile(f,'c:\Test.txt');
      Rewrite(f);
      s := 'Console App for SQL SERVER!';
      Writeln(f,s);
      Writeln(s);
      Writeln('Thank u!');
      CloseFile(f);
    end.