2013-07-14 78 views
1

爲了適應運8的要求,我需要從以前安裝的安裝目錄複製數據文件(data.mpd)(通常c:\ProgramFiles但用戶可能已經更改爲別的東西)到一個新的目錄c:\User\....複製文件從以前的安裝

如何我:

  • 獲取先前的路徑安裝
  • 檢查,如果該文件存在data.mpd
  • 將該文件複製到C:\用戶...
+0

如果我弄明白了,你想要得到以前安裝應用程序的路徑,檢查是否有'data.mpd'文件並將該文件複製到'C:\ Users \ ..'文件夾中,是對的嗎 ? – TLama

+0

是的...重點是它可以位於C:\ ProgramFiles(因爲這是InnoSetup提出的默認目錄),但不能保證(用戶可以更改默認目錄)... – TGMDev

回答

0

您可以使用WizardForm.PrevAppDir屬性,其持有的文件夾路徑,其中具有一定AppId安裝以前安裝的應用程序(如空尚未安裝)。請注意,此屬性在嚮導窗體初始化後填充,因此請在InitializeWizard事件之後閱讀它。

對於你的任務,我會在安裝前階段做這個手術,所以對於CurStepChanged事件的方法,我會寫這樣的:

[Code] 
procedure CurStepChanged(CurStep: TSetupStep); 
var 
    DataFilePath: string; 
begin 
    // check if the current step is pre-installation step and if the 
    // application had been previously installed; if so, then... 
    if (CurStep = ssInstall) and (WizardForm.PrevAppDir <> '') then 
    begin 
    // build and store the path to the Data.mpd file from the prev. 
    // installation path 
    DataFilePath := AddBackslash(WizardForm.PrevAppDir) + 'Data.mpd'; 
    // check, if that Data.mpd file exists; if so, then... 
    if FileExists(DataFilePath) then 
     // copy it to the target directory; if it fails, show error message 
     if not FileCopy(DataFilePath, <your new directory here>, False) then 
     MsgBox('Copying of the Data.mpd failed!', mbError, MB_OK); 
    end; 
end; 
+0

感謝你的答案......但是,我猜,我是一個非常基本的InnoSetup用戶......我從來沒有使用過支持類......你有這樣的使用樣本嗎? – TGMDev

+0

它在答案中是正確的...我發佈的代碼只會粘貼到腳本文件中,並將字符串'<您的新目錄在此>'替換爲您想要複製'Data.mpd'文件的文件夾因爲你沒有指定具體的文件夾(你只說'C:\ Users ...')。 – TLama

+1

謝謝,TLama ...它工作正常... – TGMDev

0

使用DisableDirPage=auto。這會阻止人們在升級時更改安裝路徑。

然後讓您的應用程序(而不是安裝程序)在自己的文件夾中檢測到此文件並將其複製到每個用戶文件夾。如果多個用戶運行你的應用程序(這是每個用戶數據的完整點),這將爲你提供最強大的行爲。

相關問題