在unix / linux中,如果程序符号链接到另一个名称并在该另一个名称下调用,则符号链接本身的名称在ARGV [0]下可用。但是,在Windows中,如果我有可执行文件的快捷方式并通过快捷方式调用它,则ARGV [0]是原始程序名称,而不是快捷方式名称。
在Windows下有什么方法可以在运行时获取程序的快捷方式名称吗?
例如,假设在linux中我有一个名为“origprog”的可执行文件,我会执行以下操作:
ln -s origprog newprog
如果我运行“./origprog”,ARGV [0]为“./origprog”,如果我运行“./newprog”,则ARGV [0]为“./newprog”。
但是,在Windows下,假设我有一个名为“origprog.exe”的程序,我为它创建了一个名为“newprog.exe.lnk”的快捷方式。
如果我调用“c:\ path \ to \ origprog.exe”,ARGV [0]为“c:\ path \ to \ origprog.exe”,如果我调用“c:\ path \ to \ newprog” .exe.lnk“,ARGV [0]也是”c:\ path \ to \ origprog.exe“。在运行时Windows中是否有任何方法可以通过“c:\ path \ to \ newprog.exe.lnk”实际调用该程序?
提前谢谢。
答案 0 :(得分:2)
有很多方法可以做到这一点,例如在使用CreateProcess
和朋友以编程方式调用流程时;通过这些,您可以确定整个命令行的样子,甚至可以省略文件名,这样argv[0]
成为第一个通常'是argv[1]
。
如果使用快捷方式可以做同样的事情,我不知道。您始终可以创建一个启动程序可执行文件和快捷方式。
至于实际发现它是否使用快捷方式而不触及快捷方式本身,我非常怀疑这是可能的。资源管理器读取快捷方式并调用指定的程序;您无法知道为什么资源管理器启动了您的应用程序。