从网络路径运行可执行文件的Windows
当您运行一个驻留在相对于您正在使用的机器的网络路径上的可执行文件时,例如,从网络路径运行可执行文件的Windows,windows,networking,Windows,Networking,当您运行一个驻留在相对于您正在使用的机器的网络路径上的可执行文件时,例如,\\networkmachine\folder\target.exe arg1 arg2,我知道它是在本地执行的,但是有人知道命令行参数是否最终通过网络连接传递吗?当然没有。开始思考位于网络位置的二进制文件如何在本地计算机中执行。执行命令时,负责执行命令的immideate任务(在Linux shell中,在windows中,我不知道是什么)将键入的整个命令作为其参数进行解析,以了解它是执行可执行文件的指令,第一个参数是可
\\networkmachine\folder\target.exe arg1 arg2
,我知道它是在本地执行的,但是有人知道命令行参数是否最终通过网络连接传递吗?当然没有。开始思考位于网络位置的二进制文件如何在本地计算机中执行。执行命令时,负责执行命令的immideate任务(在Linux shell中,在windows中,我不知道是什么)将键入的整个命令作为其参数进行解析,以了解它是执行可执行文件的指令,第一个参数是可执行文件的名称,下一个参数是要传递给它的参数。然后它尝试开始执行,在Linux中,它执行fork()
,然后执行exec()
。基本上,尝试在内存中加载可执行文件,然后在开始执行之前将参数保持在适当的位置。要将可执行文件加载到内存,它必须读取可执行文件,这是它尝试读取可执行文件的时间,而这正是它执行网络操作(在您的情况下)或磁盘读取操作(如果在磁盘中)的时间。如果它在Linux中,并且是NFS类型的网络托管文件,那么网络操作将再次进入另一层,因为加载程序执行常规文件读取,NFS层执行必要的网络操作以使数据可用。在这个序列中,您不必通过网络发送参数
因此,总而言之,参数永远不会通过网络发送。好吧,最好是用一个简单的exe来测试它,但我不明白为什么它会被阻止……命令行参数被传递到本地运行的可执行实例。就这么简单,我从没想过。该进程是在本地构建的,不需要将任何此类数据发送到远程文件系统。