在Inno安装程序中加载带有依赖项的DLL在卸载程序中失败;无法导入DLL";,但在安装程序中工作
当我卸载该程序时,出现以下错误: 无法导入dll:c:\TestProg\IsStart.dll 我做错了什么?有人能帮我解决这个问题吗在Inno安装程序中加载带有依赖项的DLL在卸载程序中失败;无法导入DLL";,但在安装程序中工作,dll,import,inno-setup,uninstallation,pascalscript,Dll,Import,Inno Setup,Uninstallation,Pascalscript,当我卸载该程序时,出现以下错误: 无法导入dll:c:\TestProg\IsStart.dll 我做错了什么?有人能帮我解决这个问题吗 选中O4taskmngrsvcstop并卸载停止并删除O4TaskManager服务: 代码如下: [文件] 来源:“IsStartServer.dll”;DestDir:“{tmp}”;DestName:IsStart.dll 来源:“IsStartServer.dll”;DestDir:“{app}”;DestName:IsStart.dll 来源:“sq
选中O4taskmngrsvcstop并卸载
停止并删除O4TaskManager服务
:
代码如下:
[文件]
来源:“IsStartServer.dll”;DestDir:“{tmp}”;DestName:IsStart.dll
来源:“IsStartServer.dll”;DestDir:“{app}”;DestName:IsStart.dll
来源:“sqlite3x86.dll”;DestDir:“{src}”;DestName:sqlite3.dll
来源:“sqlite3x86.dll”;DestDir:“{app}”;DestName:sqlite3.dll
来源:“sqlite3x64.dll”;DestDir:“{app}”
[守则]
功能任务MNGRINST:LongBool;
外部的CheckO4TaskMngrSvcStopAndUninstall@files:IsStart.dll,sqlite3.dll stdcall loadwithalteredsearchpath setuponly';
函数TaskMngrUninst:LongBool;
外部“checko4taskmngrsvcstop和uninstall@{app}\IsStart.dll stdcall uninstall only”;
过程CurStepChanged(CurStep:TSetupStep);
开始
如果CurStep=ssInstall,则
开始
TaskMngrInst();
结束;
结束;
过程CurUninstallStep已更改(CurUninstallStep:TUninstallStep);
开始
如果CurUninstallStep=usUninstall,则
开始
TaskMngrUninst();
DeleteFile(ExpandConstant({app}\sqlite3.dll');
DeleteFile(ExpandConstant({app}\IsStart.dll');
重命名文件(“{app}\sqlite3x64.dll)”,“{app}\sqlite3.dll”);
结束;
结束;
IsStart.dll是否依赖于sqlite3.dll?可能是因为它不知道什么是sqlite3x86.dll。在带有插件的totalcmd中,您可以查看丢失的dll我相信存在一系列不同的问题(其中一些问题确实是基于我的错误建议)
正确的代码是,国际海事组织:
[Files]
Source: "IsStartServer.dll"; DestDir: "{app}"; DestName: IsStart.dll
Source: "sqlite3x86.dll"; DestDir: "{app}"; DestName: sqlite3.dll
[代码]
功能任务MNGRINST:LongBool;
外部的CheckO4TaskMngrSvcStopAndUninstall@files:IsStart.dll,sqlite3.dll stdcall loadwithalteredsearchpath setuponly';
函数TaskMngrUninst:LongBool;
外部“checko4taskmngrsvcstop和uninstall@{app}\IsStart.dll stdcall loadwithalteredsearchpath uninstallonly”;
要点:
- 您最初的问题是卸载程序的导入声明中缺少。您需要它来加载依赖项(
)sqlite3.dll
- 您需要将依赖项(
)安装到sqlite3.dll
以供卸载程序使用{app}
- 依赖项的已安装副本必须与主DLL查找的名称匹配(
,而不是sqlite3.DLL
)sqlite3x86.DLL
声明中dll的名称必须与目标文件名(外部
,DestName:IsStart.dll
)匹配,而不是与原始文件名匹配DestName:sqlite3.dll
- 仅当从安装程序中加载DLL时(使用
前缀),该依赖项才能在声明中列出。从物理路径(文件:
)加载DLL时不是这样。列出依赖项的唯一目的是让安装程序提取它(它不加载它,主DLL加载它,因此前一点)。加载物理文件时,不需要列出它,因为所有文件都已安装(必须安装)。如果使用{app}\IsStart.DLL
,卸载程序将实际尝试加载名为{app}\primary.dll、{app}\dependency.dll
的文件-显然失败{app}\primary.dll、{app}\dependency.dll
- 在
或{tmp}
上安装任何东西都没有意义{src}