2012-03-01 4 views
3

私の質問のタイトルはすでにクリスタルクリアです。.net cmds.Proart.Start()ディレクトリを変更できません

私はパラメータとして "cmd.exe"を渡してProcess.Start()メソッドを呼び出しています。しかし、何とか私はプログラムを実行すると、表示されるコマンドプロンプトが私の.../bin/debug/私のプロジェクトフォルダにそのディレクトリとして持っています。代わりにC:に変更したかったのです。

誰かがこれについて助言できますか?

+0

の可能性のある重複した(HTTPS: //stackoverflow.com/questions/10222004/how-to-change-the-directory-location-in-command-prompt-using-c) – HaveSpacesuit

答えて

14

これは、プロセスの任意の種類の指定の作業ディレクトリを設定するための適切な方法である:[?C#を使用して、コマンドプロンプトでディレクトリの場所を変更する方法]

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

// set additional properties  
Process proc = Process.Start(processStartInfo); 
+1

ベストアンサー.. :) – rofans91

+4

'processStartInfo.Verb = "runas"; 'どんな解決策ですか? – Jalal

1

編集: その他が投稿したより雄弁ソリューション、ラ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で他のものをやっている場合はさらに、:/ Iは、以下のソリューションは、最も透明であると信じています。

短い答え:それはあなたの実行可能ファイルを配置するようにプログラムのパスであるため、 あなたの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#の専門家が私を修正してくれます。

1

ここに記載された解決策に加えて、cmd.exeの引数は、コマンドラインが開かれた直後に実行されるコマンドを受け入れることができます。また、/kスイッチがあり、コマンドを実行した後にコマンドラインを実行し続けることになります。

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

詳細情報:Cmd parametersあなたはあなたの目標を達成するために、これらの二つのものを使用することができます。

1
var process = Process.Start(new ProcessStartInfo 
          { 
           WorkingDirectory = "C:\\", 
           FileName="cmd.exe" 
          });  
関連する問題