当前位置: 首页 > 知识库问答 >
问题:

Inno Setup -在安装过程中注销共享DLL

荀辰钊
2023-03-14

另请参见:

使用Inno Setup在安装期间删除和取消注册DLL文件

Inno Setup:如何自动卸载以前安装的版本?

在我的Inno安装脚本的[Files]部分,我有这样一行:

Source: {#InstallSource}\OldDll.dll; DestDir: {sys}; Flags: sharedfile regserver

应用程序的更新版本不再使用此DLL。在安装新版本时,我想做的是减少此DLL的共享文件锁计数,如果为零,则注销并删除它。

最简单的方法是告诉用户在更新之前卸载应用程序的早期版本,但这意味着各种配置设置也将被删除,用户必须手动重新输入。是否可以自动执行DLL注销/删除过程?

共有1个答案

於炯
2023-03-14

虽然您可以这样做来注销和卸载DLL:

    < li >调用< code > decrement shared count ; < li >如果返回true,请用< code>UnregisterServer注销共享DLL,并用< code>DeleteFile删除它。

…它实际上会破坏引用计数,因为它不会阻止卸载程序再次减少引用计数器。这是因为卸载程序会记住安装程序过去所有版本的操作,并将处理它们。

示例:如果您的DLL由您的应用程序和彼此共享-2个引用。您运行更新,将计数器减少到1。然后卸载您的应用程序,这会将计数器减少到0并删除DLL=

所以最终唯一真正正确的解决方案是在安装程序的开头运行卸载程序。

请参阅Inno安装程序:如何自动卸载以前安装的版本?

您只能在共享文件仍然存在时有条件地执行此操作。

然而,事实证明,您实际上不需要通过新版本的安装程序卸载共享DLL。您只担心当新安装程序不再安装共享DLL时,其卸载程序也无法正确卸载它。但它会的,正是因为第一节中提到的原因。

 类似资料:
  • 在我的< code>[Files]部分中,我有以下内容: 在部分我有: 最后,在部分,我有: 现在,在这个版本的程序中,我已经将这两个DLL文件的功能合并到另一组DLL文件中: 因此, DLL 文件。现在,我知道如果它们存在,我可以简单地删除它们: 但据我所知,这不会像 中那样触发 DLL 文件的注销。 我该怎么做?在安装过程中删除并注销DLL文件(如果存在)?

  • 本文向大家介绍Centos5.5中安装Mysql5.5过程分享,包括了Centos5.5中安装Mysql5.5过程分享的使用技巧和注意事项,需要的朋友参考一下 这几天在centos下装mysql,这里记录一下安装的过程,方便以后查阅 Mysql5.5.37安装需要cmake,5.6版本开始都需要cmake来编译,5.5以后的版本应该也要装这个。 安装cmake 安装mysql 可能还会报这个错,没

  • 如何在hostgator共享主机上安装laravel php框架PHP版本5.2-AddType application/x-httpd-php53.PHP in.htaccess文件 我的问题:无法使用SSH安装composer:$curl-sShttps://getcomposer.org/installer |php获取错误:缺少phar扩展。请在不禁用phar的情况下安装或重新编译php

  • 问题内容: 我有这些东西: 文件http://api.odtu.lu/composer.phar http://api.odtu.lu/phpinfo.php FTP访问 面板 FreeBSD上的Cron职位 PHP,Perl,CGI-BIN,Python,Curl。 如何安装Composer?(我的目的是安装Restler) 编辑:我没有SSH访问。 问题答案: 它取决于主机,但是您可能根本无法

  • 我下载了Visual Studio Ultimate CTP 6的完整ISO。安装程序达到了90%左右,通过进度条进行测量,然后就卡在那里了。Superfetch、反恶意软件保护和其他后台进程的活动频繁,但进度条仍然死气沉沉。最终,后台任务活动在20分钟后消退,但进度条仍不动。 便宜的技巧:打开一个记事本窗口,并将其左边缘定位,使其完美地标记进度条的当前位置。如果进度条在大约一个小时内没有移动过记

  • 我按照本教程安装Laravel 5上共享的cboard主机。一切顺利,但我得到一个错误,当我打开我的网站: 内部服务器错误 服务器遇到内部错误或配置错误,无法完成您的请求。 请通过以下地址与服务器管理员联系:webmaster@naxon.co.il通知他们此错误发生的时间,以及您在此错误之前执行的操作。 有关此错误的详细信息,请参阅服务器错误日志。 此外,尝试使用ErrorDocument处理请