我们公司使用的是Flexera InstallShield 2012 (我知道是旧的),我目前正在创建一个InstallScript项目。一切都运行得很好,脚本做的正是我想让它做的。
然而,我目前正处于困境。InstallScript具有内置的OnUninstall函数,当使用-uninstall标志运行安装程序时会调用该函数。我已经编写了自定义卸载脚本来删除我在安装过程中安装的所有内容。
但显然InstallScript (或Windows Installer)创建了一个不同的卸载程序,当你在Windows控制面板中进入Programs and Functions -> Uninstall时。
有没有办法用InstallScript来操作这个“默认卸载程序”?
如果你需要更多的信息,请评论,我会更新这篇文章。
谢谢!
发布于 2018-06-04 23:44:51
我可以看到两个可供您尝试的选项...
-uninst参数运行安装时,将正确调用OnUninstall。我怀疑Windows注册表项中缺少此参数。请看一下……HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall{your_product_id}\UninstallString
为了使安装程序命中OnUninstall处理程序,注册表项应包含字符串,以便在卸载模式下使用-uninst参数运行安装程序。如果未设置,您可能需要在产品初始注册时手动添加。
OnEnd事件处理程序,它设计用于在安装结束时进行清理,并且会一直命中。在此事件处理程序中,您可以为您的产品删除执行特定的脚本。代码可能看起来像...函数OnEnd() //局部变量开始if (!MAINTENANCE) then //初始设置;您可以在此处修复Windows卸载注册表(参见第1点) else if ( nMaintTypeGlobal = REMOVEALL ) then //产品删除endif;endif;end;
发布于 2018-06-05 04:09:00
如果这是一个Installscript MSI项目,那么它自己的Windows Installer卸载就隐式地包含在MSI本身中。
从理论上讲,根据你如何做事情,应该有很少或不需要自己实现自定义卸载逻辑-除非你正在做一些非常不寻常的。
使用MSI组件添加的所有文件和注册表项都应正确卸载,除非其他MSI文件已在使用中注册它们,或者您已通过更新并注意此处的使用计数将组件设置为permanent或与旧版安装程序组件引用共享:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLsHKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\SharedDLLs(这意味着将尊重来自遗留安装程序的旧式引用计数-如果遗留安装程序在使用中注册了文件,则不会卸载该资源)。
你在Uninstall event handler里做什么?
https://stackoverflow.com/questions/50682072
复制相似问题