就是  "C:\Documents and Settings\Administrator\「开始」菜单\程序\启动\"
我用了以下方法,在2000下测试成功 ,但在XP下去失败了,我的程序要求是一执行就把自身复制到启动目录  用了函数  GetSpecialFolderDir(CSIDL_STARTUP)
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,ShlObj, ActiveX, ComObj, ExtCtrls;type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}
function GetSpecialFolderDir(mFolder: Integer): string;{ 返回获取系统文件或系统目录 }(*CSIDL_BITBUCKET * 回收站CSIDL_CONTROLS * 控制面板CSIDL_DESKTOP * 桌面CSIDL_DESKTOPDIRECTORY 桌面目录 //如C:CSIDL_DRIVES * 我的电脑CSIDL_FONTS 字体 //如C:CSIDL_NETHOOD 网上邻居目录 //如C:CSIDL_NETWORK * 网上邻居CSIDL_PERSONAL 我的文档 //如C:DocumentsCSIDL_PRINTERS * 打印机CSIDL_PROGRAMS 程序组 //如C:MenuCSIDL_RECENT 最近文档 //如C:CSIDL_SENDTO 发送到 //如C:CSIDL_STARTMENU 开始菜单 //如C:MenuCSIDL_STARTUP 启动 //如C:\u21551启动CSIDL_TEMPLATES 模版 //如C:*)varvItemIDList: PItemIDList;vBuffer: array[0..MAX_PATH] of Char;beginSHGetSpecialFolderLocation(0, mFolder, vItemIDList);SHGetPathFromIDList(vItemIDList, vBuffer); //转换成文件系统的路径Result := vBuffer;end; { GetSpecialFolderDir }function CreateShellLink(mPath: string; mWorkingDirectory: string;mFileName: WideString): Boolean; { 返回创建快捷方式是否成功 }varvShellLink: IShellLink;vPersistFile: IPersistFile;vUnKnown: IUnKnown;beginResult := True;tryvUnKnown := CreateComObject(CLSID_ShellLink);vShellLink := vUnKnown as IShellLink;vPersistFile := vUnKnown as IPersistFile;vShellLink.SetPath(PChar(mPath));vShellLink.SetWorkingDirectory(PChar(mWorkingDirectory));vPersistFile.Save(PWChar(mFileName), False);exceptResult := False;end;end; { CreateShellLink }///////End Source///////Begin Demoprocedure TForm1.FormCreate(Sender: TObject);begin
/////////复制自身到启动项
CopyFile(pchar(Application.exename),pchar(GetSpecialFolderDir(CSIDL_STARTUP)+'\Recodd.exe'),true);end;
end.

解决方案 »

  1.   

    其实用Registry注册表的Run项目一样的,还更简单还可以看InnoSetup的源代码的
      

  2.   

    同意ly_liuyang(Liu Yang) 
    修改注册表是个很好的方法,至少我是这么做的,呵呵!
      

  3.   

    读取注册表:
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders下的Startup键可以得到“启动”文件夹的位置。
      

  4.   

    修改注册表的一段代码
    procedure Tfrm_main.CheckBox_OSClick(Sender: TObject);
    Var
    Regf:TRegistry;
    begin
    If CheckBox_OS.Checked then
        begin
            Regf := TRegistry.Create;
            Regf.RootKey := HKEY_LOCAL_MACHINE;
            try
            Regf.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',False);
            Regf.WriteString('AoutNote',Application.ExeName);
            except
            end;
            Regf.CloseKey;
            Regf.Free;
        end
    else
        begin
            Regf := TRegistry.Create;
            Regf.RootKey := HKEY_LOCAL_MACHINE;
            try
            Regf.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',False);
            Regf.DeleteValue('AoutNote');
            except
            end;
            Regf.CloseKey;
            Regf.Free;
        end;
    end;
      

  5.   

    同意 :CloneCenter(复制中心)
      

  6.   

    function getshellfolder (const folder:string):string;
    const
      cwin32='software\microsoft\windows\currentversion';
      cshellprefix='\explorer\shell folders';
    var
      rr:tregistry;
    begin
      result:='';
      rr:=tregistry.Create;
      try
        rr.RootKey:=hkey_current_user;
        if rr.OpenKey(cwin32+cshellprefix,false) then
         result:=rr.ReadString(folder) +'\';
      finally
        rr.Free;
      end
    end;
    使用时,getshellfolder('stratup');