2014-01-13 50 views
12

我有一个项目,从c:\ work \ SomeVariantFolder \ MySolution \ MyProject \ Bin \ Debug运行,我需要从一个子文件夹执行此项目的命令行:c :\工作\ SomeVariantDev。 我面临的问题是从我的项目运行到我想运行此命令行的文件夹从哪里获取文件夹。从特定文件夹执行命令行

请注意,我无法使用此解决方案的批处理文件。

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

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:\工作\ SomeVariantFolder以来“SomeVariantFolder”名称的硬编码的文件夹,在某些情况下可能会改变。

任何帮助将appriciated

+0

,以确保你在哪里,你想,你可以先选中驱动器'C:'然后去到该驱动器'CD \\的根'然后进入你最终想要'cd path \ to \ subfolder'的目录;请记住,您需要在c#字符串中转义“\”,或者在字符串前加上@来忽略转义序列 – DrCopyPaste

+2

而不是从一个目录到另一个目录的“CD”,为什么不把'WorkingDirectory'设置为'ProcessStartInfo'直接? – IronGeek

+0

@NahumLitvin,我试图使用这个例子,但它没有设置我的需要。托马斯W,这是我没有遇到的一个很好的答案。 IronGeek,我相信这是正确的答案,如果你能回答我的问题,我会标记你。 – user3150947

回答

16

尝试的ProcessStartInfoWorkingDirectory属性设置为设定初始目录要启动的过程。

var startInfo = new System.Diagnostics.ProcessStartInfo 
{ 
    WorkingDirectory = @"The\Process\Working\Directory", 
    WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal, 
    FileName = "cmd.exe", 
    RedirectStandardInput = true, 
    UseShellExecute = false 
}; 

参考文献:ProcessStartInfo.WorkingDirectory Property

1
System.Environment.CurrentDirectory = @"..\..\.."; 
System.Diagnostics.Process.Start("MyCommand", "arg1, arg2, arg3"); 
+5

*永远不会*设置一个全局设置,当一个本地工作就好了。 'System.Environment.CurrentDirectory'改变整个进程的工作目录,通常不是你想要的。 相反,您应该使用'ProcessStartInfo.WorkingDirectory'属性(根据需要使用'UseShellExecute')。 – Luaan