2015-09-18 78 views
0

在unix/linux中,如果某个程序符号链接到另一个名称并在该名称下调用,则符号链接的名称本身在ARGV [0]下可用。但是,在Windows中,如果我有快捷方式并通过快捷方式调用它,则ARGV [0]是原始程序名称,而不是快捷方式名称。在运行时获取Windows程序快捷方式的名称?

在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”调用的?

预先感谢您。

回答

2

有办法调用编程方式使用CreateProcess和朋友的过程时这样做,例如;用这些你可以确定整个命令行的样子,甚至可以省略文件名,这样argv[0]成为第一个参数,通常是'argv[1]'。

如果可以用快捷方式完成同样的操作,我不知道。你总是可以创建一个启动器可执行文件和快捷方式。

至于实际发现它是否使用快捷方式运行而不触及快捷方式本身,我非常怀疑这是可能的。 Explorer读取快捷方式并调用指定的程序;没有办法让你知道为什么浏览器启动了你的应用程序。

+0

好的,非常感谢。 – HippoMan

相关问题