我无法想象为什么你需要这个,因为远程实例的完整路径是\danas-pc\PublicDoc,但如果你让想象力发挥,我建议像这样做:
(1)在共享文件夹内部的远程计算机上,您可以放置一个小脚本,如果执行返回完整路径。您必须搜索适用于Windows或Linux环境的适当编码,同时还需要具有执行特权或权限。例如,在Windows上,您可以使用VBScript或CScript,在Linux上可以使用.sh脚本。
此外,请注意,从远程主机的角度来看,在远程主机方面,完整路径是\NAME-OR-IP\Path\to\Folder\or\File等。对于您在远程连接上,那就是完整路径;)
更新:
根据下面的评论,这是一个完整的脚本,它执行以下操作:
- 创建一个包含代码的VBScript来检索当前完整路径
- 将文件复制到网络所需路径
- 执行VBScript并读取结果
- 删除VBScript
假设:您对网络文件夹具有读写访问权限。
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net.Mime;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
namespace GetNetworkFullPath
{
class Program
{
static void Main(string[] args)
{
var networkFolder = "\\\\REMOTE-PC-NAME\\SharedFolder";
var nameOfVBScript = "capturepath.vbs";
var vbsOutput = "";
var currentDirectory = Directory.GetCurrentDirectory();
Console.WriteLine("Current Dir: " + currentDirectory);
var vbscriptToExecute = "Dim folderName \n" +
"folderName = \"\" \n" +
"Dim fso \n" +
"Set fso = CreateObject(\"Scripting.FileSystemObject\") \n" +
"Dim fullpath \n" +
"fullpath = fso.GetAbsolutePathName(folderName) \n" +
"WScript.Echo fullpath \n";
System.IO.File.WriteAllText(@""+ nameOfVBScript + "", vbscriptToExecute);
string sourceFile = System.IO.Path.Combine(currentDirectory, nameOfVBScript);
string destFile = System.IO.Path.Combine(networkFolder, nameOfVBScript);
System.IO.File.Copy(sourceFile, destFile, true);
Process scriptProc = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.WorkingDirectory = @"" + networkFolder + "";
info.FileName = "Cscript.exe";
info.Arguments = nameOfVBScript;
info.RedirectStandardError = true;
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
info.WindowStyle = ProcessWindowStyle.Hidden;
scriptProc.StartInfo = info;
scriptProc.Start();
scriptProc.WaitForExit();
bool exit = false;
while (!scriptProc.StandardOutput.EndOfStream)
{
vbsOutput = scriptProc.StandardOutput.ReadLine();
}
Console.WriteLine("vbscript says: " + vbsOutput);
System.IO.File.Delete(@"" + networkFolder + "\\" + nameOfVBScript);
}
}
}
很遗憾,当脚本在远程执行时,它会回复网络路径 :( 我感到非常失望...真的很抱歉!只要执行来自远程系统外的用户,它就会回复与该实例相关的绝对路径。我认为内部进程/用户应该执行文件并回复应用程序的答案。
明天我会再想一些东西,如果我运气好的话,可能会回复。
<drive-letter>$
共享名称的路径。什么使其中任何一个成为“真实”路径?如果有人配置他们的服务器禁用了<drive-letter$>
共享,那该怎么办?请修正你的问题,以便在所有情况下都清楚地说明你实际期望发生的事情以及原因。你很可能无法实现你的目标,但目前还不清楚这个目标究竟是什么。 - Peter Duniho