首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InnoSetup:卸载时无法删除dll

InnoSetup:卸载时无法删除dll
EN

Stack Overflow用户
提问于 2014-11-11 11:43:40
回答 1查看 729关注 0票数 2

我正在使用此链接中提供的VCL样式来皮肤我的安装程序/卸载程序:https://code.google.com/p/vcl-styles-plugins/wiki/VCLStylesInnoSetup

但是,当我卸载程序时,包含函数的dll不会被删除。

我怎么能删除它?

我已经考虑过这个替代方案:将dll复制到一个临时文件夹并加载Windows将来应该删除的临时dll,但这导致了我在这篇文章中谈到的另一个问题:https://stackoverflow.com/questions/26863987/innosetup-pascalscript-filecopy-doesnt-copy,但这是另一个问题,我想知道的是如何删除这个dll文件。

这是我使用的完整的[Code]部分,请注意我尝试删除文件的DeinitializeUninstall方法:

代码语言:javascript
复制
// Import the LoadVCLStyle function from VclStylesInno.DLL
procedure LoadVCLStyle(VClStyleFile: String); external 'LoadVCLStyleA@files:unins000.dll stdcall setuponly';
procedure LoadVCLStyle_UnInstall(VClStyleFile: String); external 'LoadVCLStyleA@{app}\unins000.dll stdcall uninstallonly';

// Import the UnLoadVCLStyles function from VclStylesInno.DLL
procedure UnLoadVCLStyles; external 'UnLoadVCLStyles@files:unins000.dll stdcall setuponly';
procedure UnLoadVCLStyles_UnInstall; external 'UnLoadVCLStyles@{app}\unins000.dll stdcall uninstallonly';

function InitializeSetup(): Boolean;
begin
    ExtractTemporaryFile('unins000.vsf');
    LoadVCLStyle(ExpandConstant('{tmp}\unins000.vsf'));
    Result := True;
end;

procedure DeinitializeSetup();
begin
    UnLoadVCLStyles;
end;

function InitializeUninstall: Boolean;
begin
    Result := True;
    LoadVCLStyle_UnInstall(ExpandConstant('{app}\unins000.vsf'));
end;

procedure DeinitializeUninstall();
begin
    UnLoadVCLStyles_UnInstall;
    DeleteFile(ExpandConstant('{app}\unins000.dll'));
end;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-11 12:15:16

您需要在删除之前卸载库。为此使用UnloadDLL函数(帮助包含本例中的一个示例)。导致DeleteFile函数在代码中失败的缺失。对于您的卸载程序,请将以下内容写成:

代码语言:javascript
复制
procedure LoadVCLStyle_UnInstall(VClStyleFile: String); external 'LoadVCLStyleA@{app}\unins000.dll stdcall uninstallonly';
procedure UnLoadVCLStyles_UnInstall; external 'UnLoadVCLStyles@{app}\unins000.dll stdcall uninstallonly';

function InitializeUninstall: Boolean;
begin
  Result := True;
  LoadVCLStyle_UnInstall(ExpandConstant('{app}\unins000.vsf'));
end;

procedure DeinitializeUninstall();
begin
  UnLoadVCLStyles_UnInstall;
  UnloadDLL(ExpandConstant('{app}\unins000.dll'));
  DeleteFile(ExpandConstant('{app}\unins000.dll'));
end;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26864098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档