//功能:热行程序参数所带的软件
//例如"test c:\windows\notepad.exe"则执行"c:\windows\notepad.exe"
//发现问题1:如果将主程序中X2行换为加了注释的X1行,则无法创建进程
//发现问题2:如果使用X2行,则无法正确识别文件名中带空格的程序,
//          例如"c:\program files\realplay one.exe"
//奖分原则:奖分给最先完美解决问题者(最好能给出详细的解释)
//希望能得到大家的帮助。//变量说明
var
  I:Integer;
  pa:string;//过程定义
procedure procRun(exeName,exePath:PChar;trace:boolean);
var
  SUInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
begin
FillChar(SUInfo, SizeOf(SUInfo), #0);
with SUInfo do
  begin
    cb := SizeOf(SUInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow :=1;
  end;
if CreateProcess(NIL,exeName, NIL, NIL, FALSE,CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, NIL,exePath, SUInfo, ProcInfo) then
  begin
    if trace then
      WaitForSingleObject(ProcInfo.hProcess, INFINITE);
    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
  end;
end;
//主程序
begin
    for i:=1 to ParamCount do
        pa:=pa+' '+ParamStr(i);
    if Pa <>'' then
      //procRun(PChar(pa),PChar(ExtractFilePath(pa)),false);   {X1}
      procRun(PChar(pa),PChar(ExtractFilePath(paramStr(1))),false);   //x2
end.

解决方案 »

  1.   

    可以用Winexec命令,不用写那么多的代码.
      

  2.   


    var curAutoCADPath:string;  //AUTOCAD程序路徑
    如:curAutoCADPath='c:\acde\acde.exe'procedure TdfrmMrp_EvaluatCostIn.SpeedButton7Click(Sender: TObject);
    var
      locAutoCADPath: String;
    begin
      locAutoCADPath := curAutoCADPath+'  '+DBEdit32.Text;
      if Winexec(Pchar(locAutoCADPath),sw_show) < 31 then
        DJShow(CON_NO_FIND_APP);  --未找到應用程序(自寫對話框)
    end;
      

  3.   

    ParamStr(n):是将空格作为分隔符号的,如果你这样:c:\test c:\program file\abc.exe那么:
    paramstr(0) := 'c:\test.exe' 
    paramstr(1) := 'c:\program' 
    paramstr(2) := 'file\abc.exe'给每个入口参数循环赋空格后:
    for i:=1 to ParamCount do
       pa:=pa+' '+ParamStr(i);pa := 'c:\program  file\abc.exe'
                     ^^->此处已变成两个空格
      
    这样当然不能运行c:\program file\abc.exe了! 
      

  4.   

    好办,你再写一个函数把路径名中空格替换掉就行了:
    "c:\program files\realplay one.exe"=》
    "c:\program%20%files\realplay%20%one.exe"
    这样的函数还不会写的话我也没话说了。
      

  5.   

    to:net_z呵呵呵!谢了兄弟! 原来是自己程序的BUG啊!要学的还很多啊!:)