Inno Setup - 在安装过程后删除安装程序

时间:2015-02-27 10:47:14

标签: inno-setup

作为游戏复制保护的一部分,安装程序需要在安装过程后自行删除。这段代码:

[Code]
procedure MyAfterInstall();
begin
  DeleteFile('F:\TEST_SETUP\setup.exe');
end;

...因为设置运行而无效。 是否有运行“命令行”或cmd的解决方案来获取安装程序的完整路径(它可能位于客户端光盘上的任何位置)并在安装后将其删除?

2 个答案:

答案 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


需要说我真的不明白你为什么要这样做。