您的位置:首页 > 编程语言 > C#

判断该exe是否在运行并且强制关闭它? .NET技术 / C#

2008-06-17 10:29 543 查看
可以考虑用平台调用的方式;以及CreateProcess, TerminateProcess, OpenProcess等进程函数。

下面贴一段C++的代码,如果要在C#中使用,记住使用平台调用封装一下:

#include
#include
#include

BOOL GetProcessList ()
{
HANDLE hProcessSnap = NULL;
BOOL bRet = FALSE;
PROCESSENTRY32 pe32 = {0};

// Take a snapshot of all processes in the system.

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if (hProcessSnap == INVALID_HANDLE_VALUE)
return (FALSE);

// Fill in the size of the structure before using it.

pe32.dwSize = sizeof(PROCESSENTRY32);

// Walk the snapshot of the processes, and for each process,
// display information.

if (Process32First(hProcessSnap, &pe32))
{
DWORD dwPriorityClass;
BOOL bGotModule = FALSE;
MODULEENTRY32 me32 = {0};

do
{
bGotModule = GetProcessModule(pe32.th32ProcessID,
pe32.th32ModuleID, &me32, sizeof(MODULEENTRY32));

if (bGotModule)
{
HANDLE hProcess;

// Get the actual priority class.
hProcess = OpenProcess (PROCESS_ALL_ACCESS,
FALSE, pe32.th32ProcessID);
dwPriorityClass = GetPriorityClass (hProcess);
CloseHandle (hProcess);

// Print the process??s information.
printf( "/nPriority Class Base/t%d/n",
pe32.pcPriClassBase);
printf( "PID/t/t/t%d/n", pe32.th32ProcessID);
printf( "Thread Count/t/t%d/n", pe32.cntThreads);
printf( "Module Name/t/t%s/n", me32.szModule);
printf( "Full Path/t/t%s/n/n", me32.szExePath);
}
}
while (Process32Next(hProcessSnap, &pe32));
bRet = TRUE;
}
else
bRet = FALSE; // could not walk the list of processes

// Do not forget to clean up the snapshot object.

CloseHandle (hProcessSnap);
return (bRet);
}

///////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////////

KillProcess(string processName)
{
System.Diagnostics.Process myproc = new System.Diagnostics.Process();
//得到所有打开的进程
try
{
foreach (Process thisproc in Process.GetProcessesByName(processName))
{
if (!thisproc.CloseMainWindow())
{
thisproc.Kill();
}
}
}
catch (Exception Exc)
{
MessageBox.Show(Exc.ToString());
}
}

private void Form1_Load(object sender, EventArgs e)
{
String tempName = "";
int begpos;
int endpos;

foreach (Process thisProc in System.Diagnostics.Process.GetProcesses())
{
tempName = thisProc.ToString();
begpos = tempName.IndexOf("(") + 1;
endpos = tempName.IndexOf(")");
tempName = tempName.Substring(begpos, endpos - begpos);
//this.listBox1.Items.Add(tempName);
if (tempName == "newfax")
{
KillProcess(tempName);
}
}
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
//MessageBox.Show(listBox1.SelectedItem.ToString());
if (listBox1.SelectedItem.ToString() == "newfax")
{
KillProcess(listBox1.SelectedItem.ToString());
}
}

以上是判断进程里是否有newfax这个文件在运行,如有就关闭它。c#

.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐