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

Inno setup Inno安装程序-在安装过程后删除安装程序,inno-setup,Inno Setup,作为“我的游戏”副本保护的一部分,安装程序需要在安装过程后删除自身。此代码: [代码] 程序MyAfterInstall(); 开始 删除文件('F:\TEST\u SETUP\SETUP.exe'); 终止 …由于安装程序正在运行,因此不执行任何操作。 是否有一种解决方案可以运行“命令行”或cmd来获取安装程序的完整路径(它可能位于客户端光盘上的任何位置)并在安装后将其删除?如果您需要在安装后立即删除安装程序,您必须实施一些自定义解决方案。正如您已经发现的,可执行文件无法删除自身,因为可执行

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

[代码]
程序MyAfterInstall();
开始
删除文件('F:\TEST\u SETUP\SETUP.exe');
终止
…由于安装程序正在运行,因此不执行任何操作。
是否有一种解决方案可以运行“命令行”或cmd来获取安装程序的完整路径(它可能位于客户端光盘上的任何位置)并在安装后将其删除?

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

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

[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
。动态创建一个简单的批处理文件就可以了,例如,请参阅



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

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

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

[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
。动态创建一个简单的批处理文件就可以了,例如,请参阅



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

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

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