我正在开发一个程序,其中包括一个通用引擎、一些特定于程序的内容和一个自定义的自动更新程序,以尽可能高效地处理更新内容中价值数十亿字节的媒体。在引擎的最新版本中,我们重新组织了目录结构,这样,它就不再是安装到(例如)c:\Program Files\Program\Engine.exe
的可执行文件,而是现在位于c:\Program Files\Program\engine\win32\NewEngine.exe
中(请注意,在此过程中,引擎的名称也发生了更改)。
问题是,为了启动程序,用户需要使用快捷方式,我们在他们的“开始”菜单和(可选)桌面上安装快捷方式。不过,更新后引擎的移动会破坏这些快捷方式。所以现在我需要找出一种方法来修复用户为了启动程序而拥有的所有快捷方式。
来自unix/mac os x的背景,我倾向于创建一个从旧的可执行文件名到新的可执行文件名的符号链接。据我所知,在windows上并没有真正的符号链接(从google上,我看到有symlinks on Vista and later,但这需要在xp上工作)。我的假设错了吗?在windows上有没有与指向可执行文件的符号链接等效的东西?
想到的其他一些可能的解决方案是:
在旧位置创建一个小的可执行文件,在新位置启动真正的可执行文件。有没有什么简单快捷的方法可以创建一个简单的、无头的可执行文件,只需启动另一个程序?同样,在unix上,我只需创建一个shell脚本,但据我所知,我不能命名一个.bat
文件并让它运行,所以这需要一种方法来实际生成一个.exe
。
更新后,搜索指向可执行文件的所有快捷方式并对其进行编辑。是否有任何(高效和可靠的)方法可以找到系统上指向给定位置的所有快捷方式并更新它们?
上面的一个组合,带有一个小的可执行文件,检测到它是从一个快捷方式启动的,并在启动真正的程序之前编辑该快捷方式。是否有任何方法可以检测到程序正在从快捷方式启动,从而能够编辑该快捷方式?
这些选择中的任何一个可行吗?如果可行,又是如何实现的?在windows上做这类事情的最佳方法是什么?我是否遗漏了将快捷方式从一个位置重定向到另一个位置的其他方法?
编辑添加:我们有一些附加要求:
我们的许多用户都是非技术性的。任何需要用户干预的解决方案都是不可能的。
这应该是尽可能无缝的。每次用户单击快捷方式时都会弹出任何额外的窗口,这是不可接受的。
面对用户本可以做的大多数事情,例如重新排列开始菜单或移动快速启动栏的快捷方式,这应该是健壮的。
我们的快捷方式对于程序的运行是绝对必要的,因为它们传递了引擎加载内容所必需的参数(是的,这不太理想;我更希望修复此问题,但此时无法修复)
我正在寻找一个相对快速,易于实现和非常可靠的东西。
最佳答案
奇怪的是,没有人提到ntfs硬链接。
一些参考资料:
CreateHardLink Function来自msdn的win32 api文档;
NTFS Hard Links, Directory Junctions, and Windows Shortcuts
Windows Symbolic and Hard Links
Link Shell Extension - Hardlinks
关于windows - 如何将所有快捷方式重定向到给定的可执行文件? Windows上是否有等效于符号链接(symbolic link)的工具?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1547011/