Inno setup 卸载时删除与文件掩码匹配的文件/快捷方式

Inno setup 卸载时删除与文件掩码匹配的文件/快捷方式,inno-setup,Inno Setup,我在桌面上创建了一个名为Myapp的快捷方式。如果我选择使用其他语言,例如西班牙语或法语,我安装的应用程序会更改该快捷方式。然后shorcut名称更改为:Myapp西班牙语或Myapp法语 这就是Inno安装程序在卸载时无法检测到它的原因。这不起作用,威瑟尔: [UninstallDelete] Type: files; Name: "{commondesktop}\Myapp*.ink";` 要在卸载时删除与掩码匹配的文件,可以使用: [代码] 函数DeleteWithMask(路径,掩码:

我在桌面上创建了一个名为
Myapp
的快捷方式。如果我选择使用其他语言,例如西班牙语或法语,我安装的应用程序会更改该快捷方式。然后shorcut名称更改为:
Myapp西班牙语
Myapp法语

这就是Inno安装程序在卸载时无法检测到它的原因。这不起作用,威瑟尔:

[UninstallDelete]
Type: files; Name: "{commondesktop}\Myapp*.ink";`

要在卸载时删除与掩码匹配的文件,可以使用:

[代码]
函数DeleteWithMask(路径,掩码:字符串):布尔值;
变量
FindRec:TFindRec;
FilePath:string;
开始
结果:=FindFirst(路径+'\'+掩码,FindRec);
如果没有结果的话
开始
日志(格式(“%s”未找到,[Path+'\'+Mask]);
结束
其他的
开始
尝试
重复
FilePath:=Path+'\'+FindRec.Name;
如果不删除文件(文件路径),则
开始
日志(格式('删除“%s”时出错,[FilePath]);
结束
其他的
开始
日志(格式('已删除的“%s”,[FilePath]);
结束;
直到没有FindNext(FindRec);
最后
FindClose(FindRec);
结束;
结束;
结束;
过程CurUninstallStep已更改(CurUninstallStep:TUninstallStep);
开始
如果CurUninstallStep=usUninstall,则
开始
日志('删除快捷方式')
DeleteWithMask(ExpandConstant({commondesktop}'),'Myapp*.ink');
结束;
结束;
(我不确定,
.ink
是关于什么的)


更安全的做法是迭代文件夹(桌面)中的所有快捷方式文件,只删除指向应用程序的文件

看看我对你的回答


如果我正确理解了您的问题,您的应用程序已经可以识别正确的快捷方式文件(因为当语言更改时,它似乎会重命名或删除旧的快捷方式)。在这种情况下,考虑将“卸载快捷方式”函数添加到应用程序本身。使用应用程序进程(未记录)命令行开关删除快捷方式(例如,
/DeleteShortcut
)。并使用以下信息:


是的,你说得对。这正是Inno不能删除它的原因——因为在你重命名它之后它不知道。你似乎已经知道了,你的问题到底是什么?卸载程序不可能删除它不知道存在的文件,也不知道你重命名的快捷方式,因为它没有安装你重命名的快捷方式。@KenWhite我不能通过省略全名来删除它吗?例如Myapp西班牙语的Myapp*intead,或者至少在卸载时使用一些cmd参数?不使用卸载程序,因为它不使用通配符。它将只卸载它安装的文件,而没有安装重命名的文件。为什么不使用Inno来安装基于语言的快捷方式(在这种情况下,它可以卸载它),而不是自己重命名它?
[UninstallRun]
Filename: "{app}\MyApp.exe"; Parameters: "/DeleteShortcut"; RunOnceId: "DeleteShortcut"