我有一个已部署在Shared Server上的Windows应用程序。我的应用程序将调用命令提示符来执行一些数据库操作。如果我从共享位置运行应用程序,我将面临问题。如果我在部署的服务器中运行应用程序,我没有遇到任何问题。我遇到的问题如下。
我在调用时将一些参数传递给命令提示符。如果我从共享位置打开应用程序并且它没有执行任何我传递的参数,我会收到以下消息。
CMD.EXE was started with the above path as the current directory. UNC paths are not supported. Defaulting to Windows directory. Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp.
命令提示符调用代码如下:
通常,命令参数将包含@"CD \&&C:&&CD\&&CD MyFolder &&CD MySubFolder\App.bat"
ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", command.ToString());
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
Process proc = new Process();
proc.StartInfo = procStartInfo;
proc.Start();
string result = proc.StandardOutput.ReadToEnd();
return result;
如果我直接运行.bat文件,我也会遇到同样的问题。
答案 0 :(得分:4)
答案就在你的问题中:
CMD.EXE以上述路径作为当前目录启动。的 UNC 路径不受支持。默认为Windows目录。微软 Windows XP [版本5.1.2600](C)版权所有1985-2001 Microsoft Corp.
http://compnetworking.about.com/od/windowsnetworking/g/unc-name.htm
摘要:unc路径是网络路径。你的cmd说不支持那些。
答案 1 :(得分:1)
您可以尝试使用pushd / popd命令让Windows将UNC路径映射到临时驱动器:
https://github.com/madskristensen/OpenCommandLine/issues/14#issuecomment-73608382
这应该适用于.bat方法,不确定是否必须执行.bat文件而不是cmd,或者是否可以管道。
答案 2 :(得分:0)
很难从您提供的信息中说出,但是您是否意识到当您从共享位置运行应用程序时,应用程序在本地客户端计算机上运行而不是在服务器计算机上运行。
因此,如果您运行的应用程序正在寻找服务器上的文件,那么如果没有相对于客户端计算机的路径,它将无法找到它。
如果您没有尝试打开文件或类似内容,请提供一些其他信息