2014-11-21 54 views
0

我試圖用RenameFile函數重命名目錄沒有成功。使用DirExists函數,我確認了原始目錄存在,並且新目錄不存在。但重命名仍然失敗。目錄路徑只包含ASCII字符。我正在使用Inno Setup 5.5.5。嘗試了Unicode和非Unicode版本。相同的結果。該代碼是:Inno安裝程序:重命名目錄失敗

procedure CurStepChanged(CurStep: TSetupStep); 
var 
    NewFolder, BackupFolder: String; 
begin 
    NewFolder := LgtUserDirPage.Values[0]; 
    Log('NewFolder: ' + NewFolder); 
    if (CurStep = ssInstall) and DirExists(NewFolder) and (pos('backup', WizardSelectedComponents(False)) > 0) then begin 
    BackupFolder := NewFolder + '-backup' 
    Log('BackupFolder: ' + BackupFolder); 
    if DirExists(NewFolder) then Log('Found!'); 
    if not DirExists(BackupFolder) then Log('No backup!'); 
    if RenameFile(NewFolder, BackupFolder) then Log('Backup created!'); 
    end 
    else if (CurStep = ssPostInstall) then begin 
    if FileExists(BackupFolder + '\settings.lgt') then 
     FileCopy(BackupFolder + '\settings.lgt', NewFolder + '\settings.lgt', False); 
    if FileExists(BackupFolder + '\settings.logtalk') then 
     FileCopy(BackupFolder + '\settings.logtalk', NewFolder + '\settings.logtalk', False) 
    end 
end; 

調試輸出是:

Setup application started 
Setup version: Inno Setup version 5.5.5 (u) 
Original Setup EXE: C:\Users\pmoura\Desktop\Output\logtalk-3.00.0-rc7.exe 
Setup command line: /SL5="$3E0350,1739097,119296,C:\Users\pmoura\Desktop\Output\logtalk-3.00.0-rc7.exe" /SPAWNWND=$2D038A /NOTIFYWND=$220252 /DEBUGWND=$11027C 
Windows version: 6.1.7601 SP1 (NT platform: Yes) 
64-bit Windows: Yes 
Processor architecture: x64 
User privileges: Administrative 
64-bit install mode: No 
Created temporary directory: C:\Users\pmoura\AppData\Local\Temp\is-JA0BI.tmp 
NewFolder: C:\Users\pmoura\Documents\Logtalk 
BackupFolder: C:\Users\pmoura\Documents\Logtalk-backup 
Found! 
No backup! 

我從來沒有得到過Backup created!輸出。執行只是從該行開始到程序結束。任何人都知道任何可能解釋重命名失敗的原因?磁盤空間不是一個問題,順便說一句。

+0

'RenameFile'(因爲它的名稱表示)重命名**文件**,而不是文件夾。您可以創建新文件夾,將文件從舊文件夾複製到新文件夾,然後使用'RemoveDir'或'DelTree'刪除原始文件夾。 – 2014-11-21 23:22:27

+0

@KenWhite'RenameFile'函數的文檔在這方面是明確的:「嘗試將OldFile指定的文件或目錄的名稱更改爲NewFile。(...)」。因此,這不應該是問題。但是,謝謝你的建議。 – 2014-11-21 23:37:48

+0

InnoSetup的Pascal腳本基於Delphi運行時庫(RTL),如果您檢查源代碼,您將看到RTL的[RenameFile](http://docwiki.embarcadero.com/Libraries/XE6/en/System。 SysUtils.RenameFile)被調用。該功能的文檔聲明它重命名文件,並且根本沒有提及重命名目錄。 – 2014-11-22 00:11:45

回答

1

發現問題。事實證明RenameFile由於在我嘗試重命名的目錄內有一個當前目錄的開放shell而失敗。在這些情況下,RenameFile似乎只是返回false。指出問題的許可錯誤(代碼)會更有啓發性。

我現在已更新腳本,以在RenameFile失敗時警告用戶,指出可能的原因。更新代碼可以瀏覽here

相關問題