我做了个安装程序
要根据不同的操作系统来确定某一个文件
也就有a_xp.exe,a_2k.exe
如果是xp操作系统则把a_xp.exe改名成a.exe
如果是2000操作系统则把a_2k.exe改名为a.exe
在OnFirstUIAfter中我实现上面功能
但用nValue = RenameFile(szDir + "\\a_xp.exe", szDir + "\\a.exe");
却不行呀why 
who can help me

解决方案 »

  1.   

    文件的删除与重新命名  InstallShield提供的DeleteFile与RenameFile函数分别用来文件的删除与重新命名,它们的原型如下:   DeleteFile (szFile);
       RenameFile (szFileOld, szFileNew);  需要说明的是:DeleteFile函数不能删除系统文件、只读文件、隐含文件以及网络上没有删除权限的文件。并且该函数使用TARGETDIR作为其工作路径。而RenameFile函数是将由SRCDIR指定的源文件夹下的文件重新命名并移至由TARGETDIR指定的目标文件夹中。  [例Ex_Rename] 文件重新命名示例。
       #define TARGET_DIR "D:\\Temp"
       program
        VarSave (SRCTARGETDIR); // 将缺省的源文件夹和目标文件夹路径保存
        SRCDIR = TARGET_DIR; // 设定源文件夹路径
        TARGETDIR = TARGET_DIR; // 设定目标文件夹路径
        // 将My.TXT文件重新命名为MyNew.TXT
        if ( RenameFile("My.TXT", "MyNew.TXT") < 0 ) then
         MessageBox ("文件不能重新命名!", SEVERE);
        else
         MessageBox ("文件已重新命名。", INFORMATION);
        endif;
        VarRestore (SRCTARGETDIR); // 恢复缺省的源文件夹和目标文件夹路径
      

  2.   

    为什么我这样不行呢
    代码如下:(文件也不是只读的呀)
    谢谢
    ------------------------------------------------------------------function OnCheck()                           
    STRING szMsg, svOS_xp, svOS_2k, szDir;
    int nResult;
    NUMBER nValue, nvCheck_xp, nvCheck_2k;
    begin
    szMsg = "请选择你的操作系统类型\n\n注:此程序支持Windows XP、Windows 2000操作系统";
    svOS_xp = "Windows XP";             
    svOS_2k = "Windows 2000";
    nValue = EXCLUSIVE;          
    nvCheck_xp = TRUE;  //默认是xp操作系统
    nvCheck_2k = FALSE;                           
                         
    AskOptions(nValue, szMsg, svOS_xp, nvCheck_xp, svOS_2k, nvCheck_2k);
    if(nvCheck_xp)  //copy xp的程序到目标
    goto Copy_xp; if(nvCheck_2k)  //copy 2k的程序到目标
    goto Copy_2k; 

    Copy_xp: 
        TARGETDIR = PROGRAMFILES ^@COMPANY_NAME ^@PRODUCT_NAME;
    VarSave (SRCTARGETDIR);                            
        szDir = TARGETDIR;   
        SRCDIR = szDir;
        TARGETDIR = szDir;          
    nValue = RenameFile("aforxp.exe", "a.exe");
    nValue = DeleteFile("afor2k.exe");
    VarRestore (SRCTARGETDIR);
    return 0;

    Copy_2k:  
        TARGETDIR = PROGRAMFILES ^@COMPANY_NAME ^@PRODUCT_NAME;
    VarSave (SRCTARGETDIR);                            
        szDir = TARGETDIR;             
    nValue = RenameFile("afor2k.exe", "a.exe");
    nValue = DeleteFile("aforxp.exe");
    VarRestore (SRCTARGETDIR);
    return 0;  
     
    end;
      

  3.   

    help me 
    why can't rename the filename
      

  4.   

    估计不是重命名的问题,你不要用goto,用if也可以实现