【问题标题】:NSIS: How to delete file matching wildcat pattern in nsis scriptNSIS:如何在 nsis 脚本中删除匹配通配符模式的文件
【发布时间】:2017-01-18 08:30:46
【问题描述】:

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

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

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

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

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

;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"

【问题讨论】:

    标签: nsis


    【解决方案1】:

    删除前使用SetShellVarContext,切换到当前用户:

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

    【讨论】:

    • 天才!但这是否意味着在创建快捷方式时也建议SetShellVarContext current
    • 是的,除非您想为所有用户创建快捷方式。我很惊讶文档中没有提到它。
    • 不是说不设置SetShellVarContext current会为所有用户创建快捷方式吗?如果是这种情况,那么在我原来的情况下,为什么不设置 SetShellVarContext current 不删除所有用户的快捷方式(递归)? (而不是失败)
    • 好问题,我不知道
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2012-01-31
    • 2020-06-19
    • 2019-11-05
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多