.net cmd Proces.Start()可以';t更改目录
本文关键字:Proces cmd Start 可以 net | 更新日期: 2023-09-27 18:26:09
我想我的问题标题已经非常清楚了。
我通过传递"cmd.exe"作为参数来调用Process.Start()
方法。但不知何故,当我执行程序时,出现的命令提示符将我的项目文件夹中的.../bin/debug/
作为其目录。我希望它改为C:
。
有人能给我建议吗?
这是为任何类型的进程设置指定工作目录的正确方法:
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"
});