Inno setup 使用Inno安装程序在安装期间删除和注销DLL文件

Inno setup 使用Inno安装程序在安装期间删除和注销DLL文件,inno-setup,Inno Setup,在我的[文件]部分中,我有以下内容: ; Database password decryption (for PTS importing) Source: "..\..\..\PTSTools\PTSTools\bin\x86\Release\PTSTools.dll"; DestDir: "{app}"; \ DestName: "PTSTools_x86.dll"; Flags: ignoreversion Source: "..\..\..\PTSTools\PTSTools\bi

在我的
[文件]
部分中,我有以下内容:

; Database password decryption (for PTS importing)
Source: "..\..\..\PTSTools\PTSTools\bin\x86\Release\PTSTools.dll"; DestDir: "{app}"; \
    DestName: "PTSTools_x86.dll"; Flags: ignoreversion
Source: "..\..\..\PTSTools\PTSTools\bin\x64\Release\PTSTools.dll"; DestDir: "{app}"; \
    DestName: "PTSTools_x64.dll"; Flags: ignoreversion; Check: IsWin64
[Run]
部分,我有:

Filename: "{dotnet40}\regasm.exe"; Parameters: "PTSTools_x86.dll /codebase"; \
    WorkingDir: "{app}"; Flags: runhidden
Filename: "{dotnet4064}\regasm.exe"; Parameters: "PTSTools_x64.dll /codebase"; \
    WorkingDir: "{app}"; Flags: runhidden; Check: IsWin64
Filename: {dotnet40}\regasm.exe; Parameters: /u PTSTools_x86.dll; WorkingDir: {app}; \
    Flags: runhidden
Filename: {dotnet4064}\regasm.exe; Parameters: /u PTSTools_x64.dll; WorkingDir: {app}; \
    Flags: runhidden; Check: IsWin64;
最后,在
[UninstallRun]
部分,我有:

Filename: "{dotnet40}\regasm.exe"; Parameters: "PTSTools_x86.dll /codebase"; \
    WorkingDir: "{app}"; Flags: runhidden
Filename: "{dotnet4064}\regasm.exe"; Parameters: "PTSTools_x64.dll /codebase"; \
    WorkingDir: "{app}"; Flags: runhidden; Check: IsWin64
Filename: {dotnet40}\regasm.exe; Parameters: /u PTSTools_x86.dll; WorkingDir: {app}; \
    Flags: runhidden
Filename: {dotnet4064}\regasm.exe; Parameters: /u PTSTools_x64.dll; WorkingDir: {app}; \
    Flags: runhidden; Check: IsWin64;
现在,在此版本的程序中,我已将这两个DLL文件的功能整合到另一组DLL文件中:

Source: "..\..\..\MSAToolsLibrary\MSAToolsLibrary\bin\x86\Release\MSAToolsLibrary.dll"; \
    DestDir: "{app}"; DestName: "MSAToolsLibrary_x86.dll"; Flags: ignoreversion
Source: "..\..\..\MSAToolsLibrary\MSAToolsLibrary\bin\x64\Release\MSAToolsLibrary.dll"; \
    DestDir: "{app}"; DestName: "MSAToolsLibrary_x64.dll"; Flags: ignoreversion; \
    Check: IsWin64
因此,不再需要
ptool
DLL文件。现在,我知道如果它们存在,我可以简单地删除它们:

[InstallDelete]
Type: files; Name: "{app}\PTSTools_x64.dll"
Type: files; Name: "{app}\PTSTools_x86.dll"
但据我所知,这不会像在
[UninstallRun]
中那样触发DLL文件的注销


我该怎么做?在安装过程中删除和注销DLL文件(如果存在)?

我认为您无法使用标准部分轻松实现这一点

只有在
[InstallDelete]
之后才会出现
[Run]
条目。在删除DLL之前,您需要以另一种方式首先取消注册


所以你需要Pascal脚本

添加到
[InstallDelete]
并注销DLL程序

或者添加到
[Run]
并以编程方式删除DLL

后者对您来说工作量较小,因为您已经知道如何使用
[Run]
来(取消)注册

[Run]
Filename: {dotnet40}\regasm.exe; Parameters: /u PTSTools_x86.dll; WorkingDir: {app}; \
    Check: FileExists(ExpandConstant('{app}\PTSTools_x86.dll')); \
    AfterInstall: DoDeleteFile(ExpandConstant('{app}\PTSTools_x86.dll')); \
    Flags: runhidden
Filename: {dotnet4064}\regasm.exe; Parameters: /u PTSTools_x64.dll; WorkingDir: {app}; \
    Check: IsWin64 and FileExists(ExpandConstant('{app}\PTSTools_x64.dll')); \
    AfterInstall: DoDeleteFile(ExpandConstant('{app}\PTSTools_x64.dll')); \
    Flags: runhidden
[代码]
{无法在AfterInstall中直接使用内置的DeleteFile,因为它是一个函数,
{不是过程。这样我们也可以添加一些错误处理。}
过程DodeletFile(文件名:字符串);
开始
如果删除文件(文件名),则
开始
日志(格式(“%s”已删除,[FileName]);
结束
其他的
开始
MsgBox(格式('未能删除“%s”,文件名]),mbError,MB_OK);
结束;
结束;