C# 从特定文件夹执行命令行

C# 从特定文件夹执行命令行,c#,cmd,C#,Cmd,我有一个从c:\work\SomeVariantFolder\MySolution\MyProject\Bin\Debug运行的项目,我需要从其中一个子文件夹执行此项目的命令行:c:\work\SomeVariantDev。 我面临的问题是如何从运行项目的文件夹中获取命令行的运行文件夹 请注意,我不能将批处理文件用于此解决方案 我试着做的是——声明一个私有方法,从同一个进程执行三个命令,向上移动四个文件夹,然后执行我的命令,但这似乎不起作用。我觉得我在这里做错了什么,因为如果我从c:\work\

我有一个从c:\work\SomeVariantFolder\MySolution\MyProject\Bin\Debug运行的项目,我需要从其中一个子文件夹执行此项目的命令行:c:\work\SomeVariantDev。 我面临的问题是如何从运行项目的文件夹中获取命令行的运行文件夹

请注意,我不能将批处理文件用于此解决方案

我试着做的是——声明一个私有方法,从同一个进程执行三个命令,向上移动四个文件夹,然后执行我的命令,但这似乎不起作用。我觉得我在这里做错了什么,因为如果我从c:\work\SomeVariantFolder\t运行这个命令,它会运行得很好

var process = new System.Diagnostics.Process();
var startInfo = new System.Diagnostics.ProcessStartInfo
                {
                       WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal,
                       FileName = "cmd.exe",
                       RedirectStandardInput = true,
                       UseShellExecute = false
                };

process.StartInfo = startInfo;
process.Start();



 process.StandardInput.WriteLine("cd..");
 process.StandardInput.WriteLine("cd..");
 process.StandardInput.WriteLine("cd..");
 process.StandardInput.WriteLine("cd..");

 process.StandardInput.WriteLine("my command");
请注意,由于我的解决方案的性质,我不能使用批处理文件,也不能使用c:\work\SomeVariantFolder作为硬编码文件夹,因为SomeVariantFolder名称在某些情况下可能会更改

任何帮助都会收到。

请尝试设置ProcessStartInfo的WorkingDirectory属性,以设置要启动的进程的初始目录

System.Environment.CurrentDirectory = @"..\..\..";
System.Diagnostics.Process.Start("MyCommand", "arg1, arg2, arg3");
var startInfo = new System.Diagnostics.ProcessStartInfo
{
  WorkingDirectory = @"The\Process\Working\Directory",
  WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal,
  FileName = "cmd.exe",
  RedirectStandardInput = true,
  UseShellExecute = false
};

参考资料:

为确保您在您想要的位置,您可以先选择驱动器C:然后转到该驱动器cd\的根目录,然后输入您最终想要的cd path\子文件夹的目录;请记住,您需要在c-strings中转义\或在字符串前面加@`以忽略转义序列,而不是从一个目录到另一个目录,为什么不直接设置ProcessStartInfo的工作目录?@NahumLitvin,我尝试使用此示例,但它没有满足我的需要。Thomas W,这是一个很好的答案,我没有想到。IronGeek,我相信这是正确的答案,如果你能回答我的问题,我会给你打分。另外,不要忘记,您可能会遇到权限问题-由于Windows以高优先级加载工作目录中的DLL,如果您没有以根权限运行应用程序,则可能会阻止您更改工作目录。尝试使用root权限运行应用程序总是一个很好的尝试,以捕获许多权限问题:@user3150947我已根据您的请求发布了一个答案当本地设置可以正常工作时,请不要设置全局设置。System.Environment.CurrentDirectory更改整个过程的工作目录,这通常不是您想要的。相反,您应该将ProcessStartInfo.WorkingDirectory属性与UseShellExecute一起使用(视情况而定)。