【问题标题】:c++ shorcut.lnk update paths if file is missing如果文件丢失,c ++ shortcut.lnk 更新路径
【发布时间】:2017-09-28 15:24:34
【问题描述】:

从 c++ 中,我为可执行文件创建了一个快捷链接。 它工作正常,但如果可执行文件夹已更改路径,则链接不再可用。(它会手动弹出经典搜索丢失的文件)。

如果我通过将可执行文件拖动到我想要创建链接的路径然后更改文件夹路径来从 Windows 创建快捷链接,它仍然会找到可执行文件并更新快捷链接的路径,而无需手动搜索或类似的东西这个。

我如何也可以从 c++ 中做到这一点? 我尝试使用参数,但我猜参数只能在命令提示符下使用,并且不会仅通过运行快捷链接来更新链接。

这是一个关于我如何在 C++ 中做到这一点的链接 How to programmatically create a shortcut using Win32

【问题讨论】:

  • 那个 SO 答案只是来自MSDN article 的复制/粘贴。请改用 ResolveIt 示例代码。
  • “应用程序可能需要访问和操作之前创建的快捷方式。此操作称为解析快捷方式。”好吧,只有我没有检查这本身是否会更新快捷方式,因为快捷方式无法找到应用程序本身。它会完成这项工作还是只是浪费时间?这就是为什么我在这里要求一个已经这样做并且知道该怎么做的人......
  • 您问题中的隐含假设是您以某种方式知道链接目标发生了什么,因此可以更新 Path 属性如果您不知道,并且您怎么知道,那么它确实是浪费时间。
  • Windows 会在调用快捷方式时自动查找移动/重命名的目标。快捷方式有关原始目标的信息越多,如果目标已被移动/重命名,它找到目标的机会就越大。例如,您是为快捷方式分配一个 ITEMIDLIST (IShellLink::SetIDList()),还是只是一个路径字符串 (IShellLink::SetPath())?如果没有 ITEMIDLIST,请尝试添加。
  • @Remy:标准的 IShellLink 实现通常会在您保存为 .lnk 时填写 PIDL

标签: c++ winapi shortcut


【解决方案1】:

shell 只使用IShellLink::Resolve 方法。

Resolve 使用存储在 .lnk 中的信息来查找移动的目标。该信息包括创建/修改日期、大小和文件属性。如果分布式链接跟踪服务正在运行,它也可能会提供帮助。

有关 Windows 95 与 Windows NT 的详细信息,请参阅this Windows Confidential article,有关 LTS 的信息,请参阅this KB articlethis web page

【讨论】:

  • 我会再试一次,虽然我试过但效果不佳。这次我会再试一次,它会起作用的,谢谢你的详细回复安德斯
猜你喜欢
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 2019-06-12
  • 2016-01-17
  • 2011-04-18
相关资源
最近更新 更多