.net cmd Proces.Start()可以';t更改目录

本文关键字:Proces cmd Start 可以 net | 更新日期: 2023-09-27 18:26:09

我想我的问题标题已经非常清楚了。

我通过传递"cmd.exe"作为参数来调用Process.Start()方法。但不知何故,当我执行程序时,出现的命令提示符将我的项目文件夹中的.../bin/debug/作为其目录。我希望它改为C:

有人能给我建议吗?

.net cmd Proces.Start()可以';t更改目录

这是为任何类型的进程设置指定工作目录的正确方法:

var processStartInfo = new ProcessStartInfo();
processStartInfo.WorkingDirectory = @"c:'";
processStartInfo.FileName = "cmd.exe";
// set additional properties     
Process proc = Process.Start(processStartInfo);

除了这里描述的解决方案外,cmd.exe的参数还可以接受在打开命令行后立即执行的命令。此外,还有/k开关,它将在执行命令后保持命令行运行。你可以用这两件事来实现你的目标:

Process.Start("cmd.exe", @"/k ""cd /d C:'""");

更多信息:Cmd参数。

编辑:其他人发布了更雄辩的解决方案,比如尤里·古特斯的。。。Process.Start("cmd.exe", @"/k ""cd /d C:'""");

(工作原理:
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/cmd.mspx?mfr=true

"/k"是执行后命令的一部分,它在目录更改后保持cmd提示符打开。)

如果你的唯一目标是启动命令提示符,但我建议将它们包装在错误处理中,例如…

  try 
  {
     Process.Start("cmd.exe", @"/k ""cd /d C:'""");
  }
  catch(Exception e)
  { 
      //Just in case...
      Console.WriteLine(e.ToString()); 
      string[] str=Directory.GetLogicalDrives();
      Console.WriteLine( "Using C# Directory Class ,Available drives are:");
      for(int i=0;i< str.Length;i++)
      Console.WriteLine(str[i]);
      //If fatal
      //Environment.Exit(1)
   } 

此外,如果您正在用C:/做其他事情,我相信下面的解决方案是最透明的。

简短回答:IDE会自动将您转储到调试目录中,因为这是它为放置可执行文件而编程的路径。你的可执行文件对系统对象的引用点是它所在的文件夹。你必须使用绝对索引才能到达你想去的根位置C:

带代码的长答案,自助建议先试试谷歌,了解基本信息:https://www.google.com/search?q=change+目录+c%23

第一个结果:http://www.c-sharpcorner.com/UploadFile/chandrahundigam/WorkingWithDirectory07022005012852AM/WorkingWithDirectory.aspx

(它的格式很差,但包含良好的内容。)

转述:

添加到您的代码:

using System;
using System.IO; 
using System.MarshalByRefObject;
class DoStuff 
{
   char driveLetter;
   ...
   void Initialize()
   {
      try
      {
         Directory.SetCurrentDirectory( string(driveLetter)+string(@":'"); 
      }
      catch(FileNotFoundException e)
      { 
         //Just in case...
         Console.WriteLine(e.ToString()); 
         string[] str=Directory.GetLogicalDrives();
         Console.WriteLine( "Using C# Directory Class ,Available drives are:");
         for(int i=0;i< str.Length;i++)
         Console.WriteLine(str[i]);
         //If fatal
         //Environment.Exit(1)
      } 
      Process.Start("cmd.exe");
      //Do whatever else you need to do in C:/ ...
} 

注意,我是C#的新手,不知道如何做到这一点,但弄清楚这一点相对来说微不足道。如果我的方法有任何缺陷,C#专家可以随时纠正我。

var process = Process.Start(new ProcessStartInfo
                            {
                                WorkingDirectory = "C:''",
                                FileName="cmd.exe"
                            });