我需要直接从远程计算机执行程序,因为他们拥有与程序有关的网络许可系统。
您可以在服务器上安装并注册一次,并且所有客户端都可以通过打开可执行文件来访问它。
我写了一个小应用程序,可以很容易地访问网络共享并打开程序。
到目前为止没问题。我能够像这样执行程序,然后打开。耶
// Some cred and network stuff.
// ...
Process.Start("\\192.168.0.100\Share\MyProgram.exe");
但程序会弹出一条消息,表示该程序可能已被复制。这就像它已在本地执行。
如果我通过资源管理器打开程序,只是以这种方式打开程序,就不会出现此问题=> \\192.168.0.100\Share\MyProgram.exe
。
Process.Start()
是否在本地机器上暂时存储远程打开的文件?如果确实如此,有办法吗?
其他信息:
问:有些人可能会想,如果您可以在桌面上创建快捷方式,为什么要经历这么多麻烦呢?或者为什么不制作批处理文件?
A: IMO,在c#中隐藏凭据更容易。只有在必要时才应该访问网络共享。只有当有人想要使用该程序时,这才是必要的。
答案 0 :(得分:1)
不,它没有。它确实会在内存中加载文件,但对于你启动的每个程序都是一样的。
您可以使用简单的控制台应用自行尝试:
static void Main(string[] args)
{
Console.WriteLine(typeof(Program).Assembly.Location);
Console.ReadKey();
}
此处打印\\someserver\temp\ConsoleApplication8.exe
。
您提到的程序可以对计算机名称进行一些检查,例如检查它是否已被复制。我建议检查Process Monitor以查看它是否创建/读取包含“上次使用的计算机名称”的文件。或类似的东西。我只是自己尝试使用控制台应用程序,但没有任何指向正在复制的文件。