我们公司使用Flexera InstallShield 2012(旧的,我知道),我目前正在创建一个InstallScript项目。一切都运行得很好,脚本正是我想要的。
然而,我目前正处于泡菜状态。 InstallScript具有OnUninstall
内置函数,在使用-uninstall
标志运行安装程序时会调用该函数。我编写了自定义卸载脚本来删除安装过程中安装的所有内容。
但显然InstallScript
(或Windows Installer)会在Windows控制面板中转到Programs and Functions -> Uninstall
时为其创建一个不同的卸载程序。
有没有办法用InstallScript
操作这个“默认卸载程序”?
如果您需要更多信息,请发表评论,我将更新此帖。
谢谢!
答案 0 :(得分:1)
我可以看到两个可供选择的选项......
正如您在使用OnUninstall
参数运行安装时正确提及-uninst
时所提到的那样。我怀疑Windows注册表项中缺少此参数。请看看......
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\{your_product_id}\UninstallString
该键应具有字符串,以便在卸载模式下使用-uninst
参数运行安装程序,以便设置为OnUninstall
处理程序。如果未设置,您可能需要在首次注册产品时手动添加。
您可以使用OnEnd
事件处理程序,它可以在安装结束时进行清理,并且会一直打到。在此事件处理程序中,您可以为删除产品执行特定的脚本编写。代码可能看起来像......
function OnEnd()
// local variables
begin
if (!MAINTENANCE) then
// initial setup; you may fix the Windows uninstall registry here (see point #1)
else
if ( nMaintTypeGlobal = REMOVEALL ) then
// product removal
endif;
endif;
end;
答案 1 :(得分:0)
如果这是一个Installscript MSI
项目,则Windows Installer
本身会隐式包含自己的MSI
卸载。
从理论上讲,根据你的工作方式,你自己应该几乎不需要实现自定义卸载逻辑 - 除非你做的事情非常不寻常。
除非其他MSI文件在使用中注册了其他MSI文件,否或与旧版安装程序共享组件引用,方法是更新并注意使用次数:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\SharedDLLs
(意味着将尊重从旧版安装程序计数的旧式引用 - 如果旧版安装程序已在使用中注册该文件,则不会卸载该资源)。
你在Uninstall event handler
做了什么?