【问题标题】:Is there any alternative to Process in .NET for running commands in the command line?.NET 中的 Process 是否有任何替代方法可以在命令行中运行命令?
【发布时间】:2010-09-29 16:24:55
【问题描述】:

my previous question我详细描述了我遇到的问题。

其中一种解决方案是模拟用户在提示符中键入命令。我不知道如何在 .NET 中执行此操作,因为执行此操作的常用方法是使用导致错误的 System.Diagnostics.Process

我想知道该课程是否有其他选择?使用该类和以用户身份输入命令有什么区别?

【问题讨论】:

  • 您将更好地了解真正的问题并解决它,而不是寻找疯狂的黑客和解决方法。一方面,当您不知道某物是什么或在哪里时,很难解决该问题。你只是在黑暗中刺伤。
  • @dthorpe 如果可以的话我不会
  • 好吧,不要放弃你之前的问题。你 4 小时前才问过这个问题。至少 24 小时内,您将无法充分受益于您的所有全球 stackoverflow 专家池。 ;>
  • @dthorpe 已经解决了,但问题的原因或解决方案仍然未知

标签: .net windows-7 process console command-prompt


【解决方案1】:

不太确定它与命令提示符有什么关系。但是,通过使用相同的命令行解释器,您获得的行为与从命令提示符获得的行为完全相同。使用cmd.exe作为进程文件名,/c powercfg.exe作为参数。

【讨论】:

    【解决方案2】:

    我不知道。

    如果是这样,它看起来并不能解决您的问题(您的问题似乎是正在启动的程序在以编程方式启动和手动启动时具有不同的环境变量)。

    【讨论】:

      【解决方案3】:

      看起来 DLL 是在运行时动态加载的。您可以在命令行中找到 PATH 变量的设置,然后使用“控制面板\系统\高级\?环境?”进行设置。或调用 setEnv 或任何 API(我可能不得不在上次调用时调用 win32 调用)来更改代码中的环境变量。

      请记住,在使用系统 EnvVar 时,它们只会在您第一次运行时读取,因此您通常必须重新启动应用程序才能获得新设置。

      【讨论】:

        【解决方案4】:

        为什么不通过命令行调用exe:

        using (var process = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                 FileName = "cmd.exe",
                 Arguments = "/C powercfg.exe",
                 RedirectStandardOutput = true,
                 UseShellExecute = false,
            }
        })
        {
            process.Start();
            process.WaitForExit();
        }
        

        这有点不寻常,但它应该可以工作....

        【讨论】:

        • 对不起,如果示例代码没有按原样工作,但我从您的原始问题中复制了您的代码......我将参数放在文件名中;-)
        • 我为你更正了,因为文件名中的参数不起作用,而且它缺少括号
        • 代码运行,对于这个问题来说不是一个坏主意,但它不能解决我的问题
        猜你喜欢
        • 2019-08-24
        • 2021-07-12
        • 2018-09-28
        • 2021-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-30
        • 1970-01-01
        相关资源
        最近更新 更多