作为游戏复制保护的一部分,安装程序需要在安装过程后自行删除。这段代码:
[Code]
procedure MyAfterInstall();
begin
DeleteFile('F:\TEST_SETUP\setup.exe');
end;
...因为设置运行而无效。 是否有运行“命令行”或cmd的解决方案来获取安装程序的完整路径(它可能位于客户端光盘上的任何位置)并在安装后将其删除?
答案 0 :(得分:2)
在[CODE]部分添加以下方法,您已全部设置......
[CODE]
procedure CurStepChanged(CurStep: TSetupStep);
var
strContent: String;
intErrorCode: Integer;
strSelf_Delete_BAT: String;
begin
if CurStep=ssDone then
begin
strContent := ':try_delete' + #13 + #10 +
'del "' + ExpandConstant('{srcexe}') + '"' + #13 + #10 +
'if exist "' + ExpandConstant('{srcexe}') + '" goto try_delete' + #13 + #10 +
'del %0';
strSelf_Delete_BAT := ExtractFilePath(ExpandConstant('{tmp}')) + 'SelfDelete.bat';
SaveStringToFile(strSelf_Delete_BAT, strContent, False);
Exec(strSelf_Delete_BAT, '', '', SW_HIDE, ewNoWait, intErrorCode);
end;
end;
答案 1 :(得分:0)
如果您需要在安装后立即删除安装程序,则必须实施一些自定义解决方案。正如您已经发现的那样,可执行文件无法自行删除,因为可执行文件在运行时被锁定。
您可以实施安装程序安装的小工具。安装完成后,安装程序将运行该工具。该工具将继续静默运行并尝试删除安装程序,直到成功。
[Files]
; Install the tool
Source: "zapself.exe"; DestDir: "{app}"
[Run]
; Run the tool and pass the installer path
Filename: "{app}\zapself.exe"; Parameters: "{srcexe}"
实际上,您不需要为此构建.exe
。例如,动态创建的简单批处理文件可以查看Unload a .NET DLL from an unmanaged process。
需要说我真的不明白你为什么要这样做。