日韩欧美人妻无码精品白浆,www.大香蕉久久网,狠狠的日狠狠的操,日本好好热在线观看

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

【C#.net】Winform判斷指定路徑的程序是否已經(jīng)打開,不區(qū)分32位或64位

admin
2025年6月2日 16:53 本文熱度 743

一、在C#中判斷指定路徑的程序是否已經(jīng)運(yùn)行(不區(qū)分32/64位)

可以通過(guò)以下步驟實(shí)現(xiàn):

  1. 獲取系統(tǒng)中所有進(jìn)程

  2. 獲取每個(gè)進(jìn)程的主模塊路徑

  3. 與目標(biāo)路徑比較(忽略大小寫和路徑格式差異)

以下是完整代碼示例:

using System;

using System.Diagnostics;

using System.IO;

using System.Linq;

using System.Runtime.InteropServices;


public class ProcessChecker

{

    public static bool IsProcessRunning(string targetPath)

    {

        // 規(guī)范化為絕對(duì)路徑

        string fullTargetPath = Path.GetFullPath(targetPath).TrimEnd('\\');


        foreach (var process in Process.GetProcesses())

        {

            try

            {

                // 跳過(guò)無(wú)主模塊的進(jìn)程

                if (process.MainModule == null) continue;


                string processPath = Path.GetFullPath(process.MainModule.FileName).TrimEnd('\\');

                

                // 路徑比較(不區(qū)分大小寫)

                if (string.Equals(processPath, fullTargetPath, StringComparison.OrdinalIgnoreCase))

                {

                    return true;

                }

            }

            catch (Exception ex) when (ex is Win32Exception || ex is InvalidOperationException || ex is NotSupportedException)

            {

                // 跳過(guò)權(quán)限不足或無(wú)法訪問(wèn)的進(jìn)程

                continue;

            }

            finally

            {

                process.Dispose();

            }

        }

        return false;

    }


    // 使用示例

    public static void Main()

    {

        string exePath = @"C:\Program Files\MyApp\MyProgram.exe";

        bool isRunning = IsProcessRunning(exePath);

        

        Console.WriteLine(isRunning 

            ? $"程序已在運(yùn)行: {exePath}" 

            : $"程序未運(yùn)行: {exePath}");

    }

}

關(guān)鍵點(diǎn)說(shuō)明:

1、路徑規(guī)范化處理:

  • 使用Path.GetFullPath()統(tǒng)一路徑格式

  • TrimEnd('\\')消除尾部反斜杠差異

2、異常處理:

  • 跳過(guò)系統(tǒng)/權(quán)限不足的進(jìn)程(Win32Exception)

  • 忽略已退出的進(jìn)程(InvalidOperationException)

  • 跳過(guò)非托管進(jìn)程(NotSupportedException)

3、比較優(yōu)化:

  • 使用StringComparison.OrdinalIgnoreCase進(jìn)行大小寫不敏感比較

  • 直接比較完整路徑而非進(jìn)程名稱

4、資源釋放:

  • 在finally塊中調(diào)用process.Dispose()釋放資源

注意事項(xiàng):

  • 需要管理員權(quán)限才能訪問(wèn)所有進(jìn)程信息

  • 對(duì)于UWP/Store應(yīng)用可能不適用

  • 路徑比較時(shí)考慮到了不同格式(如長(zhǎng)短路徑、大小寫)

  • 支持32/64位混合環(huán)境

如果遇到權(quán)限問(wèn)題,可在應(yīng)用程序清單文件(app.manifest)中添加:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />


二、如果此程序已經(jīng)打開,則強(qiáng)制將此程序終止退出

代碼如下:

using System;

using System.Diagnostics;

using System.IO;

using System.ComponentModel; // 用于Win32Exception


public class ProcessManager

{

    public static bool IsProcessRunning(string targetPath)

    {

        string fullTargetPath = Path.GetFullPath(targetPath).TrimEnd('\\');


        foreach (var process in Process.GetProcesses())

        {

            try

            {

                if (process.MainModule == null) continue;

                

                string processPath = Path.GetFullPath(process.MainModule.FileName).TrimEnd('\\');

                

                if (string.Equals(processPath, fullTargetPath, StringComparison.OrdinalIgnoreCase))

                {

                    return true;

                }

            }

            catch (Exception ex) when (ex is Win32Exception || ex is InvalidOperationException)

            {

                // 跳過(guò)無(wú)權(quán)限訪問(wèn)的進(jìn)程

            }

            finally

            {

                process.Dispose();

            }

        }

        return false;

    }


    public static void KillProcessByPath(string targetPath)

    {

        string fullTargetPath = Path.GetFullPath(targetPath).TrimEnd('\\');

        bool found = false;


        foreach (var process in Process.GetProcesses())

        {

            try

            {

                if (process.MainModule == null) continue;

                

                string processPath = Path.GetFullPath(process.MainModule.FileName).TrimEnd('\\');

                

                if (string.Equals(processPath, fullTargetPath, StringComparison.OrdinalIgnoreCase))

                {

                    process.Kill();

                    process.WaitForExit(3000); // 等待最多3秒

                    found = true;

                    Console.WriteLine($"已終止進(jìn)程: {process.ProcessName} (PID: {process.Id})");

                }

            }

            catch (Win32Exception ex)

            {

                Console.WriteLine($"權(quán)限不足,無(wú)法終止進(jìn)程 {process.ProcessName}: {ex.Message}");

            }

            catch (InvalidOperationException)

            {

                // 進(jìn)程已退出,忽略

            }

            catch (Exception ex)

            {

                Console.WriteLine($"終止進(jìn)程 {process.ProcessName} 時(shí)出錯(cuò): {ex.Message}");

            }

            finally

            {

                process.Dispose();

            }

        }


        if (!found)

        {

            Console.WriteLine($"未找到運(yùn)行中的進(jìn)程: {Path.GetFileName(targetPath)}");

        }

    }


    // 使用示例

    public static void Main()

    {

        string exePath = @"C:\Program Files\MyApp\MyProgram.exe";

        

        if (IsProcessRunning(exePath))

        {

            Console.WriteLine("程序正在運(yùn)行,即將強(qiáng)制終止...");

            KillProcessByPath(exePath);

            

            // 二次驗(yàn)證

            if (!IsProcessRunning(exePath))

            {

                Console.WriteLine("程序已成功終止");

            }

            else

            {

                Console.WriteLine("程序終止失敗");

            }

        }

        else

        {

            Console.WriteLine("程序未運(yùn)行");

        }

    }

}

關(guān)鍵功能說(shuō)明:

1、進(jìn)程終止方法 KillProcessByPath()

  • 遍歷所有進(jìn)程,匹配目標(biāo)路徑的程序

  • 使用process.Kill()強(qiáng)制終止進(jìn)程

  • 調(diào)用WaitForExit(3000)等待進(jìn)程退出(最多3秒)

2、增強(qiáng)的錯(cuò)誤處理

  • Win32Exception:處理權(quán)限不足問(wèn)題

  • InvalidOperationException:處理進(jìn)程已退出的情況

  • 通用異常捕獲:確保程序不會(huì)意外崩潰

3、操作反饋

  • 顯示終止進(jìn)程的名稱和PID

  • 提供未找到進(jìn)程的提示

  • 包含權(quán)限錯(cuò)誤的詳細(xì)說(shuō)明

4、使用示例

  • 先檢查進(jìn)程是否運(yùn)行

  • 終止后二次驗(yàn)證確保操作成功

  • 提供清晰的狀態(tài)反饋

使用注意事項(xiàng):

1、管理員權(quán)限

// 在app.manifest中添加以下內(nèi)容

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

沒(méi)有管理員權(quán)限可能無(wú)法終止系統(tǒng)進(jìn)程或其他用戶進(jìn)程

2、路徑規(guī)范

  • 支持長(zhǎng)路徑和短路徑

  • 自動(dòng)處理路徑大小寫差異

  • 兼容不同格式的路徑分隔符

3、特殊場(chǎng)景處理

  • 會(huì)終止所有匹配路徑的進(jìn)程實(shí)例

  • 處理進(jìn)程樹(如需保留子進(jìn)程需額外處理)

  • 等待進(jìn)程完全退出后再繼續(xù)執(zhí)行

?4、替代方案建議(如果權(quán)限問(wèn)題無(wú)法解決):

// 使用進(jìn)程名終止(需確保進(jìn)程名唯一)

Process.GetProcessesByName("MyProgram")

    .ToList()

    .ForEach(p => p.Kill());

此代碼適用于需要強(qiáng)制終止指定應(yīng)用程序的場(chǎng)景,如安裝/更新程序前的清理操作,或解決程序卡死問(wèn)題。


該文章在 2025/6/2 16:55:50 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

色 国产 欧美 日韩| 麻豆产精国品免费一区| 开心刺激久久五月天| 日韩精品在线观看9| 亚洲日韩第一页一区视频| 久久青青草国产免费一区| 精品欧美一区二区三区| 欧美色爱日韩精品综合| 一区二区山区三级| 日韩欧美成人高清视频| 一品一二区| 亚洲无码在线天堂视频| 欧美国产丝袜综合| 久久综合AV免费观看| 久久亚洲区| 亚洲AV免播放器免费在线| 91老湿机福利在线观看| 欧洲日本久精品| 国产调教鞭打91Pron| 日韩二区一本道| 精品久久久久久麻豆| 亚亚洲AV男人天堂| 亚洲国产日韩av综合在线免费观看| 欧美日韩12www| cao porn 视频在线播放| 麻豆传媒 在线观看| 日本理论在线观看中文字幕| 不卡中文一区二区| 激情欧美五月视频| 爽爽爽爽爽成人网站| 久久久久婷婷婷| www123456精品久久久| 国产美女内扣流水| 成人区一区二区三区亚洲| 有基zz视频免费观看| 美女一区二区欧美| 婷婷色综合久久| 色天堂偷拍自拍| 亚洲欧美在线懂色| 成人精品不卡在线| 中文字幕轮里|