我的程序修改了安裝界面,所以我的界面中提供了更改安裝路徑的方法。
用戶修改后的路徑會被傳回inno setup腳本,腳本中需要做的事情如下:
1,寫一個函數,來返回新的安裝路徑,如:
function MyDestDir(SubDir:String):String;
begin
if SubDir = '' then
Result := RootDestFolder
else
Result := RootDestFolder + '\'+ SubDir;
end;
2,把原來使用{app}的地方都改成:{code:MyDestDir},安裝腳本自己能夠調用MyDestDir並得到正確的路徑。如:
Source: "test.xml"; DestDir: {code:MyDestDir};
Source: "\res\ReloadHigh\*"; DestDir: {code:MyDestDir|res\ReloadHigh}
最后記得加上:UninstallFilesDir={code:MyDestDir}, 否則卸載程序會被放到{app}.
注意:
如果在定制后的DLL中修改安裝路徑,可以讓inno setup把原來的路徑以TCHAR*的形式傳給DLL,DLL直接修改。
但因為PASCAL的String類型並非是C語言的0結尾字符串,它會記錄字符串的真實長度,所以被C語言修改后的String不能直接使用。因為長度不一定相同(實際情況是如果長度沒變,就是正確的,如果長度有變化,程序安裝路徑中的文件名就不見了,安裝不了)。
所以在從DLL返回后,需要使用Length函數重新給String設置正確的長度。
