如何在使用Inno Setup卸载期间取消固定同名的2个程序(diff版本)的图标?

时间:2014-08-25 08:32:32

标签: inno-setup uninstall

我有一个安装程序,它使用相同的名称安装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();

这里有什么建议吗?

1 个答案:

答案 0 :(得分:0)

假设您有一个" Variant为null,则无法在调用Verbs的{​​{1}}方法的行上调用。" 异常对象,表示objFolderItem对象为objFolderItem,表示NULL方法调用失败。换句话说,在该文件夹中找不到该文件。

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