命令不会在命令提示符中运行
Posted
技术标签:
【中文标题】命令不会在命令提示符中运行【英文标题】:Command won't run in Command Prompt 【发布时间】:2020-03-21 02:32:23 【问题描述】:当用户点击一个按钮时,我希望它运行登录脚本(从服务器启动),但是每台计算机在不同的服务器上,所以我得到了服务器名称。但是netlogon.StartInfo.Arguments = slnres + @"/c \netlogon\logon.cmd";
行没有按应有的方式工作。它应该在 PC 上运行 logon.cmd(映射网络驱动程序、打印机等),然后 CMD 应该关闭。
private void MapNetwork_Click(object sender, EventArgs e)
Process sln = new Process();
sln.StartInfo.UseShellExecute = false;
sln.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
sln.StartInfo.FileName = "cmd.exe";
sln.StartInfo.Arguments = "/c echo %logonserver%";
sln.StartInfo.RedirectStandardOutput = true;
sln.Start();
string slnres = sln.StandardOutput.ReadToEnd();
label1.Text = slnres;
Process netlogon = new Process();
netlogon.StartInfo.UseShellExecute = false;
netlogon.StartInfo.FileName = "cmd.exe";
netlogon.StartInfo.Arguments = slnres + @"/c \netlogon\logon.cmd";
netlogon.Start();
【问题讨论】:
您的问题没有明确说明您要解决的问题?或者不清楚。所以尝试添加你喜欢的结果(截图) 看来您可以通过使用System.Environment.GetEnvironmentVariable("logonserver") 大大简化您的任务。 我建议阅读:***.com/help/how-to-ask 以了解如何正确提问。如果您遵循指南,您将不会有那么多的反对票,并且您会更快地得到答案。 感谢您帮助简化我的任务,但毕竟只是弹出并关闭。在我的家用电脑上,我应该得到错误,因为找不到 logon.cmd。下次我会检查如何提问。 您能描述一下您的总体目标是什么吗?你为什么要打开命令提示符? 【参考方案1】:几件事:
您无需运行命令提示符即可获取环境变量。你可以使用Environment.GetEnvironmentVariable
。
用于调用logon.cmd
的Arguments
属性正在构造为:
\\myserver/c \netlogon\logon.cmd
当我认为你想要这个时:
/c \\myserver\netlogon\logon.cmd
所以请确保将slnres
放在字符串中的正确位置。您的代码应如下所示:
private void MapNetwork_Click(object sender, EventArgs e)
string slnres = Environment.GetEnvironmentVariable("logonserver");
label1.Text = slnres;
Process netlogon = new Process();
netlogon.StartInfo.UseShellExecute = false;
netlogon.StartInfo.FileName = "cmd.exe";
netlogon.StartInfo.Arguments = "/c " + slnres + @"\netlogon\logon.cmd";
netlogon.Start();
【讨论】:
netlogon.StartInfo.Arguments = @$"/c slnres\netlogon\logon.cmd";
Few errors come out: Invailid expression term" ;expected Keyword, identifier, or string expected after verbatim specifier: @ unrecognized escape sequence between netlogon and logon.cmd
$
是 C# 6 中引入的string interpolation 功能。听起来您使用的是旧项目,无法使用。我已经更新了我的答案,改为使用字符串连接。【参考方案2】:
我对你的问题有点困惑,我不确定我是否理解正确。前段时间我做了一个程序,我必须运行几个powershell命令,所以我为它做了一个类。重定向到您的按钮,它看起来像这样:
(请记住,您需要将 fqdn 指向您的文件位置 => Reading File From Network Location)
using System.Diagnostics;
//class lvl scope vars
string output;
string ErrorOutput;
private void MapNetwork_Click(object sender, EventArgs e)
//define process arguments
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = @"cmd.exe";
startInfo.Arguments = @"FQDN path to your file on the server; exit";
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
//start process
Process process = new Process();
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();
//outpunt handling
if (string.IsNullOrEmpty(ErrorOutput))
return output;
else
return ErrorOutput;
-
首先我会检查您的应用程序是否能够打开共享网络位置的文件。 (服务器可用?对服务器的访问权限?服务器映射?)
之后你可以检查他是否能够在本地启动文件。 (运行 *.cmd、*.bat 文件是否需要管理员权限)
现在您可以检查您的应用程序是否正确运行。
【讨论】:
以上是关于命令不会在命令提示符中运行的主要内容,如果未能解决你的问题,请参考以下文章
BAT 文件不会在 Windows 10 任务计划程序中运行,但会以管理员身份或在提升的命令提示符下运行
应用程序不会从命令提示符运行,而是通过双击运行 ERROR: WERC6F9.tmp.WERInternalMetadata.xml