2017-07-29 64 views
0

我希望我的程序能夠像Set-Location命令一樣更改當前目錄。所以我的程序執行,然後我在命令提示符下看到一個不同的目錄。如何在C#中更改執行shell的目錄?

這不起作用:

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

這與您的問題有關嗎? https://stackoverflow.com/a/18875988/4301653 – raichiks

+0

看看這個。 https://msdn.microsoft.com/en-us/library/system.io.directory.setcurrentdirectory(v=vs.110).aspx 您的目錄是否存在? 如果您嘗試更改爲不存在的目錄,您將得到一個異常 –

回答

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" 
+0

它從cmd.exe工作,但不在PowerShell中。但是無法使用cmd.exe或PowerShell從C#更改當前工作目錄。所以我認爲現在這個問題的答案根本不存在,或者說它是不可能的。 – Harry