Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NSIS:如何在NSIS脚本中删除与通配符模式匹配的文件_Nsis - Fatal编程技术网

NSIS:如何在NSIS脚本中删除与通配符模式匹配的文件

NSIS:如何在NSIS脚本中删除与通配符模式匹配的文件,nsis,Nsis,当用户安装“我的软件”时,它会在用户的桌面上创建快捷方式。快捷方式的名称还反映了正在安装的版本 事实证明,我的一些客户确实安装了多个版本(尽管这没有问题,没有冲突或其他),但这意味着用户的桌面上已经安装了多个不同版本的快捷方式。(例如SchoolServer 7.1.lnk,SchoolServer 7.2.lnk,SchoolServer 8.5.lnk,然后是当前的SchoolServer 9.0.lnk) 他们必须手动删除这些过时的快捷方式 如何在NSIS脚本中实现这一点 注意:我已尝试使

当用户安装“我的软件”时,它会在用户的桌面上创建快捷方式。快捷方式的名称还反映了正在安装的版本

事实证明,我的一些客户确实安装了多个版本(尽管这没有问题,没有冲突或其他),但这意味着用户的桌面上已经安装了多个不同版本的快捷方式。(例如
SchoolServer 7.1.lnk
SchoolServer 7.2.lnk
SchoolServer 8.5.lnk
,然后是当前的
SchoolServer 9.0.lnk

他们必须手动删除这些过时的快捷方式

如何在NSIS脚本中实现这一点

注意:我已尝试使用通配符删除桌面上所有版本的快捷方式,然后为安装的版本创建快捷方式,但它创建了新的快捷方式,但仍保留了旧的快捷方式。我使用的代码如下:

;first delete stale shortcuts matching the wildcat
Delete "$DESKTOP\SchoolServer *.lnk"
;create the new shortcut
CreateDirectory "$INSTDIR"
CreateShortCut "${ICON_URL}" "$INSTDIR\SchoolServer.exe" "" "" "" SW_SHOWMAXIMIZED ALT|CONTROL|SHIFT|F5 "SchoolServer"
删除前使用,切换到当前用户:

SetShellVarContext current
Delete "$DESKTOP\SchoolServer *.lnk"
SetShellVarContext all

天才!但这不意味着在创建快捷方式时也建议
SetShellVarContext-current
?是的,除非您想为所有用户创建快捷方式。我很惊讶文档中没有提到这一点。这难道不意味着不设置当前的
SetShellVarContext
将为所有用户创建快捷方式吗?如果是这样的话,那么在我最初的例子中,为什么不将
SetShellVarContext设置为current
而不(递归地)删除所有用户的快捷方式呢?(而不是失败)好问题,我不知道