再问上面这个问题之前,我先问个关于SetLength,我想问下他为什么不能直接赋值呢比如:SetLength('aaa',1);这样报错var
processInfo:TProcessInformation;
StartUp:TStartupInfo;
begin
FillChar(StartUp,SizeOf(StartUp),$00);
  StartUp.dwFlags:=STARTF_USESHOWWINDOW;
  StartUp.wShowWindow:=SW_HIDE;
  if CreateProcess(nil, PChar(BatFileName), nil, nil,
    False, IDLE_PRIORITY_CLASS, nil, nil, StartUp,
    ProcessInfo) then
  begin
    CloseHandle(processInfo.hThread);
    CloseHandle(processInfo.hProcess);
  end;
  Application.Terminate;
end;

解决方案 »

  1.   

    再问上面这个问题之前,我先问个关于SetLength,我想问下他为什么不能直接赋值呢比如:SetLength('aaa',1);这样报错SetLength用于动态设置数组大小,'aaa'是一个数组吗,它只是一个字符串常量,而你要把这个字符串常量设置大小为1,当然会报错了
      

  2.   

    var
    processInfo:TProcessInformation;
    StartUp:TStartupInfo;
    begin
    FillChar(StartUp,SizeOf(StartUp),$00); // 把变量StartUp的内存冲零 其实第三个参数直接0即可
      StartUp.dwFlags:=STARTF_USESHOWWINDOW;
      StartUp.wShowWindow:=SW_HIDE;
      if CreateProcess(nil, PChar(BatFileName), nil, nil,
        False, IDLE_PRIORITY_CLASS, nil, nil, StartUp,
        ProcessInfo) then //API运行
      begin
        CloseHandle(processInfo.hThread); // 如果运行成功关闭 进程/线程句柄
        CloseHandle(processInfo.hProcess);
      end;
      Application.Terminate; 
    end;