2017-03-02 488 views
2

對於直接更改註冊表,無需重新啓動,我發現,使用的Process.Start(...)拋出「系統找不到指定文件」

cmd.exe /c taskkill.exe /f /im explorer.exe & explorer.exe 

正好做我想要的電腦。

我看,你不能使用像cmd.exe文件,而他們的整個路徑,因爲他們沒有一個PATH值和System32下文件夾不存在。

const string explorer = @"C:\Windows\explorer.exe"; 
string taskkill = "", commandprompt = ""; 
var task1 = Task.Run(() => 
    taskkill = Directory.GetDirectories(@"C:\Windows\WinSxS", "*microsoft-windows-taskkill_*")[0] + @"\taskkill.exe"); 
var task2 = Task.Run(() => 
    commandprompt = Directory.GetDirectories(@"C:\Windows\WinSxS", "*microsoft-windows-commandprompt_*")[0] + @"\cmd.exe"); 

Task.WaitAll(task1, task2); 
Process.Start(string.Format($"{commandprompt} /c {taskkill} /f /im {explorer} & {explorer}")); 

但是運行這段代碼拋出

"The system cannot find the file specified" 

將不勝感激,如果有人可以幫助我解決這個問題!

編輯#1:通過改變作爲回答代碼

Process.Start(commandprompt, string.Format($"/c {taskkill} /f /im {explorer} & {explorer}")); 

,命令提示符只對第二ANS打開類似於「的請求無效」,之後的探險家窗口打開。

+0

不知道是否有其他的問題,但最主要的是,如果你想帶參數運行的Process.Start - 你必須通過兩個參數:文件名和參數。所以你的情況首先是'commandprompt',其次是所有其餘的。 – Evk

回答

2

你不應該調用cmd.exe/c,你應該可以直接運行taskkill.exe。

此工程在我的機器上(窗口10)。做你需要每一次搜索的文件嗎?我認爲對於一個簡單的實用程序應用程序,硬編碼的路徑應該沒問題。

var startInfo = new ProcessStartInfo() 
{ 
    Verb = "runas", 
    Arguments = "/f /im explorer.exe", 
    FileName = @"c:\windows\system32\taskkill.exe" 
}; 
var process = new Process { StartInfo = startInfo }; 
process.Start(); 
process.WaitForExit(); 
startInfo = new ProcessStartInfo() 
{ 
    Verb = "runas", 
    FileName = @"C:\windows\explorer.exe" 
}; 
process = new Process { StartInfo = startInfo }; 
process.Start(); 
+0

原因尋找檔案是我沒有知道他們在位於** ** SYSTEM32也和我搜索的目錄是完全用戶特定,所以你不能硬編碼。但是,謝謝你現在工作正常! –

+0

我不認爲資源管理器和任務殺死應該是用戶特定的,也許特定於操作系統。是不是用於DEP和Windows更新的WinSxS文件夾?無論如何,很高興它爲你工作。 –

+0

是它的東西就像一個「組件商店」和保險箱一些systemfiles用於備份的種類 –

相關問題