【问题标题】:How to unpin icons of 2 programs(diff versions) of the same name during uninstall using Inno Setup?如何在使用 Inno Setup 卸载期间取消固定 2 个同名程序(不同版本)的图标?
【发布时间】:2014-10-18 08:51:16
【问题描述】:

我有一个安装程序,可以安装 2 组同名但版本不同的应用程序。这些应用程序也必须固定到任务栏和开始菜单。

安装没有问题。问题是当我尝试卸载时。如果只安装了其中一个版本,则卸载顺利,图标从任务栏和开始菜单中删除。但是,如果两者都安装了,则第一个版本被卸载,第二个版本异常。我想这与两个具有相同名称的应用程序有关。

这是取消固定图标的代码,TLama 在这里帮助我解决了 Unpin app from taskbar, startmenu using Inno Setup

我知道我还没有包含 TLama 的完美代码。我仍在使用原始版本,

oShell := CreateOleObject('Shell.Application');
objFolder := oShell.Namespace(ExpandConstant('{localappdata}\My_Path'));
objFolderItem := objFolder.ParseName('MyApp.exe');
colVerbs := objFolderItem.Verbs();
for i := 0 to colverbs.count() do
begin
   VerbName := lowercase(colverbs.item(i).name);
   StringChangeEx(VerbName,'&','',true);
   if (CompareText(Verbname, 'Pin to Start Menu') = 0) then
     colverbs.item(i).DoIt
   if (CompareText(Verbname, 'Pin to Taskbar') = 0) then
     colverbs.item(i).DoIt
end;

我得到一个 Nil 指针异常

colVerbs := objFolderItem.Verbs();

这里有什么建议吗?

【问题讨论】:

    标签: inno-setup uninstallation


    【解决方案1】:

    假设你在调用objFolderItem 对象的Verbs 方法的那行得到一个“Variant is null, cannot invoke.” 异常,这意味着objFolderItem 对象是NULL 指向 ParseName 方法调用失败的事实。换句话说,在该文件夹中找不到该文件。

    请注意,您只能将这些函数用于现有文件和文件夹,因此请确保在卸载它们之前调用它。

    【讨论】:

    • 是的,我明白...问题是我的一个愚蠢的错误。谢谢!
    猜你喜欢
    • 2017-08-15
    • 2015-10-19
    • 2013-03-28
    • 2018-05-04
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    相关资源
    最近更新 更多