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



作为游戏副本保护的一部分,安装程序需要在安装过程后删除自己。此代码:

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

不执行任何操作,因为安装程序正在运行。有没有一种解决方案可以运行"命令行"或cmd来获取安装程序的完整路径(它可能在客户端光盘上的任何位置),并在安装后将其删除?

在[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;

如果需要在安装后立即删除安装程序,则必须实现一些自定义解决方案。正如您已经发现的那样,可执行文件无法删除自身,因为可执行文件在运行时被锁定。

您可以实现一个由安装程序安装的小工具。安装完成后,安装程序将运行该工具。该工具将保持静默运行,并尝试删除安装程序,直到成功为止。

[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。动态创建的简单批处理文件可以执行以下操作:例如,请参阅从非托管进程卸载.NET DLL。


需要说的是,我真的不明白你为什么要这么做

最新更新