在Inno Setup中加载用于卸载过程的外部DLL

亚历山大·史密斯

我正在尝试加载VclStylesInno.dll以进行Inno Setup的卸载形式。在该[Code]部分的中间声明下一个代码

procedure uLoadVCLStyle(VClStyleFile: String);
    external 'LoadVCLStyleW@{app}/VclStylesInno.dll stdcall';

但我遇到了一个错误

试图在初始化之前扩展“ app”常量

为卸载过程加载DLL的最佳方法是什么?

马丁·普里克里(Martin Prikryl)

我假设您在启动安装程序而不是卸载程序时遇到错误。

当安装程序启动时,{app}显然是未知的。

但是由于您只需要导入卸载程序(即){app},您可以添加以下uninstallonly选项

procedure uLoadVCLStyle(VClStyleFile: String); 
  external 'LoadVCLStyleW@{app}\VclStylesInno.dll stdcall uninstallonly';

尽管它并没有真正的帮助,但由于卸载程序会锁定DLL,因此卸载程序将要删除该DLL失败。

解决方案很简单,只需按照官方说明卸载Inno Setup的VCL样式即可

基本上,您需要将DLL安装在之外的其他位置,{app}并在卸载时将DLL留在后面。这实际上是一个丑陋的解决方案,imho并不能证明样式化的卸载程序是合理的。但这是您的选择。


按照您的建议,您可以将DLL复制到Windows临时文件夹,从那里加载它,并希望Windows在临时目录清理期间最终删除DLL。

这应该做(请注意delayload选项):

[Files]
Source: VclStylesInno.dll; DestDir: {app}
Source: skin.vsf; DestDir: {app}
[Code]

procedure LoadVCLStyle_UnInstall(VClStyleFile: String); 
  external 'LoadVCLStyleW@{%TEMP}\VclStylesInno.dll stdcall uninstallonly delayload';

function InitializeUninstall: Boolean;
begin
  if FileCopy(ExpandConstant('{app}\VclStylesInno.dll'),
              ExpandConstant('{%TEMP}\VclStylesInno.dll'), False) and
     FileCopy(ExpandConstant('{app}\skin.vsf'),
              ExpandConstant('{%TEMP}\skin.vsf'), False) then
  begin
    LoadVCLStyle_UnInstall(ExpandConstant('{%TEMP}\skin.vsf'));
  end;
end;

尽管我没有对其进行测试,但最好使用{tmp}而不是使用它{%TEMP}(卸载完成后,文件可能会被卸载程序的父进程删除-并且您不会干扰其他可能要存储VclStylesInno.dll到的进程%TEMP%)。


有关另一种解决方案(实施起来更好,但更复杂),请参阅
如何将卸载文件保留在卸载程序中?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Inno Setup中加载用于卸载过程的外部DLL

来自分类Dev

在Inno Setup中加载具有依赖项的DLL在带有“无法导入DLL”的卸载程序中失败,但在安装程序中有效

来自分类Dev

Inno Setup:在卸载过程中从安装程序读取文件

来自分类Dev

如何在Inno Setup中将VCL样式应用于基于DLL的表单进行卸载?无法导入dll

来自分类Dev

卸载程序中的Inno Setup脚本常量

来自分类Dev

Inno Setup语法-OR,AND

来自分类Dev

Inno Setup中的TTreeView

来自分类Dev

在Inno Setup中从过程调用函数?

来自分类Dev

从Dephi DLL更新Inno Setup进度栏

来自分类Dev

Inno Setup:在卸载过程中重新启动后删除文件夹

来自分类Dev

基于外部信息的Inno Setup Set Password

来自分类Dev

如何在Inno Setup中将VCL样式应用于基于DLL的表单?新样式将无法加载

来自分类Dev

如何在Inno Setup中将VCL样式应用于基于DLL的表单?新样式将无法加载

来自分类Dev

Inno Setup:{code:...}无法用于OutputBaseFilename吗?

来自分类Dev

inno setup中的“ Not in a loop”错误

来自分类Dev

未捕获Inno Setup异常

来自分类Dev

如何从Inno Setup安装JRE?

来自分类Dev

Inno Setup ComponentsList OnClick事件

来自分类Dev

Inno Setup设置TInputQueryWizardPage高度

来自分类Dev

Inno Setup从CDATA创建TStringList

来自分类Dev

Inno Setup:选择组件的功能

来自分类Dev

Inno Setup隐藏日志条目

来自分类Dev

Inno Setup Abs(Integer)功能

来自分类Dev

Inno Setup更改CreateOutputMsgMemoPage字体

来自分类Dev

在Inno Setup中取消安装

来自分类Dev

Inno Setup中的条件DisableProgramGroupPage

来自分类Dev

缺少Inno-Setup分号

来自分类Dev

在Inno Setup中记录TWindowsVersion

来自分类Dev

Inno Setup更改c:\权限

Related 相关文章

热门标签

归档