2011-07-29 143 views
4

我有一個C#應用程序應用程序在某種程度上工作。我需要做的是繼續執行,如果一臺計算機(給定一個IP地址)正在運行一個應用程序(TEKBSS.exe)。我怎樣才能做到這一點?有人能幫我嗎?檢查應用程序是否在網絡上運行PC

回答

-1

查找到:

System.Diagnostics.Process 

Process p = new Process(); 
p.StartInfo.FileName = "TEKBSS.exe"; 
p.StartInfo.CreateNoWindow = true; 
p.Start(); 
p.WaitForExit(); 

編輯:

using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.IO; 
using System.Reflection; 
using System.Runtime; 
using System.Runtime.CompilerServices; 
using System.Security; 

public class MainClass 
{ 
    public static void Main() 
    { 
     Process[] allProcs = Process.GetProcesses("RemoteMachineOnYourNetwork"); 
     foreach (Process p in allProcs) 
      Console.WriteLine(" -> {0} - {1}", p.ProcessName, p.PeakWorkingSet64); 

    } 
} 
+0

他試圖告訴一個過程是否已經運行,而不是啓動一個新過程(根據原始問題)。 –

+0

@Steve 看看WaitForExit這一行。那是什麼告訴你這個過程結束了。是的,這只是一個建議,他應該從c#開始這個過程... – Lysgaard

+0

id喜歡檢查應用程序(tekbss.exe)是否運行可以說172.16.32.34 – Privesh

0

我知道這是.net代碼。但我前一陣子也這樣做了。希望它會給你一個想法,我會嘗試和轉換。只要你有權限,你可以在你的代碼中執行命令pushd。您可以嘗試在命令行中執行第一,確保你可以得到的。

PushD

//pushes into the Given Machine on the C:\ and filters for your program 
Dim sCommand as String = "pushd \\<MachineName>\C$ && tasklist.exe /FI ""IMAGENAME eq <NameOfExecutable>.exe"" 
//execute command from program 
Shell("cmd.exe /c" & sCommand. AppWinStyle.Hide, True); 

您將最有可能要執行popd後返回到你的機器上的目錄。

讓我看看我是否可以轉換爲C給你。我會編輯一下。

編輯

Link to executing commands in C#

+1

我將命令改爲:任務列表/ s的計算機名/ FI「IMAGENAME EQ WHATEVER.exe」 –

+0

那會以及 – sealz

+0

EISH能跟大家正在談論希臘的工作給我,哈哈。我剛剛開始在C# – Privesh

6

您可以通過WMI做到這一點。您將需要適當的憑據來訪問遠程機器。

System.Management命名空間包括從C#使用WMI的功能。

在這裏你去:

 // Don't forget... 
     // using System.Management; <-- Need to add a reference to System.Management, too. 

     ManagementScope scope = new ManagementScope(@"\\192.168.1.73\root\cimv2"); 
     string query = "SELECT * FROM Win32_Process WHERE Name='TEKBSS.exe'"; 
     var searcher = new ManagementObjectSearcher(query); 
     searcher.Scope = scope; 
     bool isRunning = searcher.Get().Count > 0; 

範圍告訴WMI什麼機器來執行的查詢,所以不要忘了相應更改IP地址。

然後ManagementObjectSearcher將向機器查詢名爲TEKBSS.exe的所有進程的列表。

+0

錯誤史蒂夫,說什麼!大聲笑不知道你說什麼笑lol – Privesh

+0

WMI是Windows管理界面。它被諸如Systems Management Server等工具用於遠程詢問和操縱機器。您可以使用WMI來確定特定進程是否在遠程計算機上運行 - 這正是您想要執行的操作。我鏈接到的文章顯示了使用VBScript執行此操作的示例,但您可以從其他語言調用WMI API。 –

3

您可以使用WMI查詢在遠程機器上,如正在運行哪些程序的信息。

您將需要引用System.Management.dll,並且在遠程計算機上具有訪問WMI的適當權限。

using System; 
using System.Linq; 
using System.Management; 

namespace Bling 
{ 
    public static void Main() 
    { 
     const string Host = "vmhost01"; 
     const string Path = (@"\\" + Host + @"\root\CIMV2"); 
     const string Exe = "TEKBSS.exe"; 

     var queryString = string.Format("SELECT Name FROM Win32_Process WHERE Name = '{0}'", Exe); 

     var query = new SelectQuery(queryString); 

     var options = new ConnectionOptions(); 
     options.Username = "Administrator"; 
     options.Password = "*"; 

     var scope = new ManagementScope(Path, options); 

     var searcher = new ManagementObjectSearcher(scope, query); 

     bool isRunnning = searcher.Get().Count > 0; 

     Console.WriteLine("Is {0} running = {1}.", Exe, isRunnning); 
    } 
} 
+0

用戶名和密碼對我來說是一個問題,因爲我們的環境在全國範圍內的政策是這樣的,遠程PC必須每隔一段時間更改密碼月,這是一個通用的程序,該國的不同地區將使用它來連接到不同的遠程PC(運行Tekbss軟件的PC) – Privesh

+0

@Privesh假設您的計算機在Windows域中。您需要專門設置一個帳戶,以便訪問您的域中的WMI信息。您可以精確調整帳戶可以訪問的WMI信息。這是系統管理員要解決的問題。 –

相關問題