2017-07-15 32 views
0

我想創建一個c#應用程序,創建一個批處理,關閉所有cmd和Taskmanager的循環。它可以與「taskmgr.exe」完美配合,但如果我添加它應該關閉所有cmd,它也會自動關閉。有沒有辦法改變自己的線程名稱,因此它不再被稱爲cmd.exe?c#將線程名稱cmd.exe更改爲xxx.exe

我的代碼:

  File.Delete(path); 
      using (var tw = new StreamWriter(path, true)) 
      { 
       tw.WriteLine(":ttt"); 
       tw.WriteLine("taskkill /f /Im taskmgr.exe"); 
       tw.WriteLine("goto ttt:"); 
       tw.WriteLine("pause"); 
       tw.Close(); 
       File.SetAttributes(path, FileAttributes.Hidden); 
      } 
      Process.Start(path); 
+0

副本C:

我寧願直接從使用類似的程序內殺死的任務管理和CMDS \ WINDOWS \ SYSTEM32 \ CMD.EXE並運行副本? –

+0

我想讓它在C#所以如何? 編輯:它也應該在其他電腦的工作 –

+0

我會考慮它的不同。確定您的正在運行的線程並關閉所有具有cmd.exe的線程並進行檢查,以確保它不屬於您的線程。 –

回答

1

我認爲這裏存在一些誤解,不存在所謂的「cmd.exe的」線程的名字,它只是當你運行你的應用程序,它會創建一個批處理文件,那麼Process.Start(path);將運行一個新的cmd應用程序以在其中運行此新創建的批處理腳本(因爲根據定義,.bat腳本是cmd程序)。

while(true){ 
    foreach (Process proc in Process.GetProcessesByName("cmd")) 
    { 
     proc.Kill(); 
    } 
    foreach (Process proc in Process.GetProcessesByName("taskmgr")) 
    { 
     proc.Kill(); 
    } 
    // Sleep for 2 seconds, so that the program does not do this too often. 
    Thread.Sleep(2000); 
} 
+0

op是使用控制檯應用程序,而不是Windows窗體和控制檯應用程序是cmd.exe本身 –

+0

Op可以使用此答案並跳過父pid。如果系統訪問功能很容易出現,產生一個Cmd腳本真的不是很優雅 – eckes

+0

@Joe_DM我不這麼認爲。我想殺死的是由'Process.Start(path);'運行的蝙蝠。他的程序的可執行文件當然不會被命名爲'cmd.exe',並且沒有任何跡象表明op正在cmd中運行他的程序,他還可以直接從visual中運行它,使用powershell或者雙擊它,它不應該特別運行一個新的cmd。 – Thundzz