.net cmd Proces.Start () не может изменить каталог - PullRequest
3 голосов
/ 01 марта 2012

Я думаю, что заголовок моего вопроса уже совершенно ясен.

Я вызываю метод Process.Start(), передавая "cmd.exe" в качестве параметра.Но каким-то образом, когда я запускаю программу, в появившейся командной строке мой .../bin/debug/ находится в папке моего проекта в качестве каталога.Я хотел изменить его на C:.

Может кто-нибудь посоветовать мне по этому поводу?

Ответы [ 4 ]

14 голосов
/ 01 марта 2012

Это правильный способ установить указанный рабочий каталог для любого вида процесса:

var processStartInfo = new ProcessStartInfo();
processStartInfo.WorkingDirectory = @"c:\";
processStartInfo.FileName = "cmd.exe";

// set additional properties     
Process proc = Process.Start(processStartInfo);
1 голос
/ 01 марта 2012
var process = Process.Start(new ProcessStartInfo
                            {
                                WorkingDirectory = "C:\\",
                                FileName="cmd.exe"
                            });      
1 голос
/ 01 марта 2012

В дополнение к решениям, описанным здесь, аргументы cmd.exe могут принимать команду, которая будет выполнена сразу после открытия командной строки.Также есть переключатель /k, который будет поддерживать командную строку после выполнения команды.Вы можете использовать эти две вещи для достижения своей цели:

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

Дополнительная информация: Параметры Cmd .

1 голос
/ 01 марта 2012

Изменить: Другие опубликовали более красноречивые решения, такие как Yuriy-Guts ... 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:, в который вы хотите перейти.

Длинный ответ с кодом, Самопомощь Попробуйте сначала Google, для основ: https://www.google.com/search?q=change+directory+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 # могут поправить меня, если в моем подходе есть недостатки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...