最新消息:

NSIS的卸载出现 nsis error launching installer问题

nsis 永恒心锁 1827浏览 0评论

花了两天的时间,终于发现此问题的原因了.
问题描述:
利用NSIS写的卸载程序,但是,经过多次的安装卸载以后发现,无法无法卸载程序了.所有利用NSIS生成的卸载程序都无法卸载了.

问题细分:
问题背景知识:
NSIS卸载程序每次卸载的时候,先是拷贝自己到一个临时文件夹C:/Documents and Settings/userXXXXX/Local Settings/Temp/~nsu.tmp/
名字一般是Au_.exe,或者是Bu_.exe,。。。一直可以到Zu_.exe。假设上一步骤生成的是Au_.exe.然后uninstall.exe调用Au_.exe _?=$(path),注意_?=$(path)为Au_.exe的参数,&(path)为uninstall所在的的文件夹。意思是把当前目录设置为uninstall所在的文件夹。
NSIS这么做主要是利用Au_.exe最后来删除自己。

其中有个细节就是删除程序运行开始会先生产一个临时的文件,名字是Au_.exe,,,,,,,Zu_.exe。
规则如下:
uninstall.exe先是尝试删除上面提到的临时目录下已经有Au_.exe,Bu_.exe,,,,,一直到Zu.exe的文件,然后去生成一个Xu_.exe,X为A~~Z的字母,优先级从高到低。

说说我的问题:
我在出现了nsis error launching installer的提示后,发现上面提到那个临时文件夹里面的有26个文件依次为Au_.exe,,,,,Zu.exe也就是26个字母完全用完了。所有nsis无法在生产临时的卸载文件,导致这个错误出现。

利用Procmon monitor来监控卸载的时候进行了什么操作,发现其他nsis制作的卸载程序刚开始都回删除Au_.exe,,,Zu_.exe的临时文件,但是在删除,用我的nsis制作的卸载文件生成的临时Au_.exe,或者是Bu_.exe时无法进行删除(返回结果都是can not delete)。

问题的原因就在于此了。

问题出现在临时文件的生成上,再进一步,为什么前面的临时文件(Au_.exe)没有删除呢?

经过一天的查找,无疑中发现是因为,uninstall.exe这个文件因为是从光盘拷贝过来的,所有,每次卸载生产的文件也是只读属性的,所有在下一次的时候,是无法把他删除的,这也算是nsis的一个bug吧!

免责声明:根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。丨本站为个人博客非盈利性站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途。丨本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权BY-NC-SA协议进行授权

转载请注明:永恒心锁-分享互联网 » NSIS的卸载出现 nsis error launching installer问题

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址