如何在C#中更改执行shell的目录?

时间:2017-07-29 12:54:16

标签: c# windows

我希望我的程序能够像Set-Location命令一样更改当前目录。所以我的程序执行,然后我在命令提示符中看到一个不同的目录。

这不起作用:

Directory.SetCurrentDirectory(Scripts);
Environment.CurrentDirectory = Scripts;

这会更改执行进程的当前目录,而不是正在执行的shell目录。

我所看到的:

PS C:\Users\Test>test.exe
PS C:\Users\Test>

我想要的是:

PS C:\Users\Test>test.exe
PS C:\Test>

是的,我是从PowerShell执行的,但我不想要PowerShell脚本,我需要我的C#应用​​程序为我更改shell路径,然后继续使用相同的shell。当然它也应该在cmd.exe中工作。

我想避免创建一个单独的shell,而是希望我的程序充当shell命令。如果你好奇它是一个配置管理器,它应该根据作为命令参数给出的模板名称配置脚本目录,它应该改变配置脚本目录的路径。

1 个答案:

答案 0 :(得分:0)

您无法更改父进程的当前目录。

我多年前为cmd.exe实现了一个GUI“更改目录”实用程序,我通过使用执行我的应用程序的批处理文件来完成它,然后从应用程序编写的文件中读取并应用新的目录路径。这是因为批处理脚本在cmd.exe进程内运行,并且能够更改当前目录。我假设在PowerShell中也可以这样做。

批处理文件很简单:

@echo off
call "c:\path\to\app.exe" "%temp%\newdir.txt"
if exist "%temp%\newdir.txt" for /F "usebackq tokens=*" %%A in ("%temp%\newdir.txt") do cd /D "%%~A"