【问题标题】:Does Process.Start store a local copy of a remotely executed file?Process.Start 是否存储远程执行文件的本地副本?
【发布时间】:2015-03-26 00:40:34
【问题描述】:

我需要直接从远程计算机执行程序,因为他们的网络许可系统与程序一起使用..
您在服务器上安装和注册一次,所有客户端都通过它访问它通过打开可执行文件来共享网络。 我编写了一个小应用程序,应该可以轻松访问网络共享并打开程序。

到目前为止没有问题。我可以像这样执行程序,它会打开。耶

// Some cred and network stuff.
// ...
Process.Start("\\192.168.0.100\Share\MyProgram.exe");

但是程序弹出一条消息,该程序可能已被复制。就像是在本地执行的一样。

如果我通过资源管理器打开程序就不会出现此问题,只需以这种方式打开它 => \\192.168.0.100\Share\MyProgram.exe.

Process.Start() 是否存储在机器上本地远程打开的文件(临时)?如果是这样,有没有办法解决?

附加信息:
问:有些人可能会想,如果您可以在桌面上创建一个快捷方式,为什么还要为此费力?或者为什么不制作一个批处理文件?
答: IMO,在 C# 中隐藏凭据更容易。仅在必要时才应授予对网络共享的访问权限。只有当有人想使用该程序时才需要这样做。

【问题讨论】:

  • 您可以尝试将 ShellExecute 设置为 true 吗?真正的问题是“为什么应用程序认为它被复制了?”。您可能可以使用 ProcessMonitor 找到这一点。
  • 我会在几分钟后尝试使用ShellExecute = true。提前致谢。
  • ShellExecute 没有帮助
  • 奇怪; ShellExecute 的行为应该与 Explorer 完全相同。

标签: c# windows remote-access network-shares


【解决方案1】:

不,它没有。虽然它确实将文件加载到内存中,但对于您启动的每个程序都是一样的。

您可以使用简单的控制台应用自己尝试:

static void Main(string[] args)
{
    Console.WriteLine(typeof(Program).Assembly.Location);
    Console.ReadKey();
}

这里打印\\someserver\temp\ConsoleApplication8.exe

您提到的程序可以对计算机名称进行一些检查,例如检查它是否被复制。我建议检查Process Monitor 以查看它是否创建/读取包含“上次使用的计算机名称”或类似内容的文件。我只是用控制台应用程序自己尝试过,但没有任何指向正在复制的文件。

【讨论】:

  • 我怀疑。检查typeof(Program).Assembly.Location;代码库不同,组装位置不同。代码库是找到程序集的地方,而不是正在使用的地方
  • @SriramSakthivel:还是一样。更新帖子以使用Location
  • 感谢您提供的代码 sn-p。我自己也试过了。也许将不得不使用 ProcMon 更深入地研究它。 好奇
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多