unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, RzLabel, ExtCtrls, jpeg, RzPanel, Mask, RzEdit, RzBtnEdt,
  RzButton, FileCtrl, Registry,ShellAPI;type
  TForm1 = class(TForm)
    Image1: TImage;
    RzLabel1: TRzLabel;
    RzLabel2: TRzLabel;
    RzLabel3: TRzLabel;
    RzGroupBox1: TRzGroupBox;
    RzButtonEdit1: TRzButtonEdit;
    RzButtonEdit2: TRzButtonEdit;
    RzBitBtn1: TRzBitBtn;
    FileOpenDialog1: TFileOpenDialog;
    procedure RzButtonEdit1ButtonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure RzBitBtn1Click(Sender: TObject);
    procedure RzButtonEdit2ButtonClick(Sender: TObject);
  private
    { Private declarations }
  public
    procedure SeekDir;
    { Public declarations }
  end;var
  Form1: TForm1;
  Ddir: string;implementation{$R *.dfm}procedure TForm1.SeekDir;
var
  reg: TRegistry;
begin
  reg := TRegistry.Create;
  reg.RootKey := HKEY_CURRENT_USER;
  reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Uninstall\', false);
  if reg.KeyExists('Embarcadero RAD Studio 2010') then
    if reg.KeyExists('RAD Studio') then
    begin
      RzLabel1.Caption := '版本: Embarcadero RAD Studio 2010 & RAD Studio';
      Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Uninstall\Embarcadero RAD Studio 2010', false);
      ddir:='"'+reg.ReadString('installLocation')+'\bin\brcc32'+'"';
    end
    else
    RzLabel1.Caption := '版本: Embarcadero RAD Studio 2010'
  else  if reg.KeyExists('RAD Studio') then
  begin
     RzLabel1.Caption := '版本: RAD Studio';
     ddir:='"'+reg.ReadString('installLocation')+'\bin\brcc32'+'"';
  end;
  reg.Destroy;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
  SeekDir;
end;procedure TForm1.RzBitBtn1Click(Sender: TObject);
var
   SPath,EPath,S:string;
begin
   SPath:=' "'+RzButtonEdit1.Text+'"';
   EPath:=' "'+RzButtonEdit2.Text+'"';
   S:=' /k '+ddir+spath+epath ;
   ShellExecute(Handle,nil,'cmd.exe',PWideChar(s),nil,SW_SHOW);
  // ShowMessage(s);
end;procedure TForm1.RzButtonEdit1ButtonClick(Sender: TObject);
var
  sdir: string;
begin
  if FileOpenDialog1.Execute then
  begin
    RzButtonEdit1.Text := FileOpenDialog1.FileName;
    RzButtonEdit2.Text := ExtractFilePath(FileOpenDialog1.FileName);
  end;
end;procedure TForm1.RzButtonEdit2ButtonClick(Sender: TObject);
begin
  if FileOpenDialog1.Execute then
    RzButtonEdit2.Text := FileOpenDialog1.FileName;
end;end.点击RzBitBtn1后会显示 'D:\Program' 不是内部或外部命令,也不是可运行的程序 的错误,但是我已经在路径上加入双引号了啊
希望经过亲自测试后再做回答 谢谢

解决方案 »

  1.   

    'D:\Program' 是目录不是可执行的程序,看你的路径是不是组织错误
      

  2.   


    我试了很多次了,并且用showmessge函数显示是正确的 郁闷 能不能先编译一下我的代码再回答? 麻烦了
      

  3.   

    Shellexecute执行和运行中的效果一样,如果路径中有空格,没用"括起来,就会出错
      

  4.   


          ddir:='"'+reg.ReadString('installLocation')+'\bin\brcc32'+'"';已经加了
      

  5.   

    ddir:='"+reg.ReadString('installLocation')+'\bin\brcc32'+"';
      

  6.   

    哦~
    要做编译工具?
    我不会cmd,up 一下。
      

  7.   

    调试一下就知道调用shellexecute穿的参数对不对了