我正在创建安装程序以更新服务。我的想法是:
backup
的文件夹中的所有文件和文件夹。backup
复制一些文件(配置文件),以覆盖创建的新文件。这实际上是我的代码:
[Run]
;1. Stop service
Filename: "{sys}\sc.exe"; Parameters: "stop ""myService"
[Files]
;2. Create temporally backup
Source: {app}\*; Excludes: "backup"; DestDir: {app}\backup\backup{code:GetTodaysName}; \
Flags: external skipifsourcedoesntexist recursesubdirs createallsubdirs
;Install new version.
Source: "{#MyInstalerPath}\bin\*"; DestDir: "{app}"; \
Flags: ignoreversion recursesubdirs createallsubdirs
;Restore config files.
Source: "{app}\backup\backup{code:GetTodaysName}\myService.Configuration.xml"; \
DestDir: "{app}"; Flags: external
[Code]
var
TodaysName : String;
function GetToday : String;
begin
Result := GetDateTimeString ('yyyymmddhhnnss', '-', #0);
end;
function GetTodaysName (Param: String): String;
begin
if ('' = TodaysName) then
begin
TodaysName := GetToday ();
end;
Result := TodaysName;
end;
我在第2部分和第3部分中遇到问题。我应该避免在backup
进程中使用备份文件夹,但是不能同时使用Excludes
和external
。
任何人都可以帮助解决此问题吗? 谢谢
答案 0 :(得分:1)
如果要排除某些文件,则必须使用Pascal脚本复制/备份文件。
请参见Inno Setup: Backup external file before install delete section
除了需要修改Inno Setup: copy folder, subfolders and files recursively in Code section中的DirectoryCopy
函数以排除backup
文件夹本身。
只需修改此行:
if (FindRec.Name <> '.') and (FindRec.Name <> '..') then
到
if (FindRec.Name <> '.') and (FindRec.Name <> '..') and
(CompareText(FindRec.Name, 'backup') <> 0) then
尽管如果备份是“临时的”,为什么不将文件备份到{tmp}
而不是{app}
的子文件夹?这样您就不必排除任何内容。