命令不会在命令提示符中运行

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.cmdArguments 属性正在构造为:

\\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

从命令行运行Python文件不会加载模块

在 Windows 上通过 c 程序执行命令

在cmd里运行了notepad命令

MVC 5 - 预编译视图仅适用于命令提示符