亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

進程里好像也找不到?。磕奈淮笪r知道怎么回事?

進程里好像也找不到???哪位大蝦知道怎么回事?

C PHP
飲歌長嘯 2023-03-03 14:10:17
有個問題:在關掉它之后再想運行,就會提示“同一目錄的程序,同時只能運行一個”。右下角也沒有顯示它的圖標啊,難道它在后臺運行?
查看完整描述

2 回答

?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

在進程中可以找到的,應該是程序的設置有什么問題吧。

查看完整回答
反對 回復 2023-03-06
?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

有時候需要只允許程序只能同時運行一個實例。實現方式有很多。
一. 進程互斥
原理:通過獲取系統進程列表,如果發現有重名的,則表示程序已經運行了,此時新運行的進程就退出;
實現:System.Diagnostics.Process類的靜態方法GetProcessesByName(string processName)
Process[] ps = Process.GetProcessesByName(Guo.exe);if(ps !=null&& ps.Length1){//發現重復進程}
寫在Main方法里;判斷Length大于1,是因為本身啟動之后也在進程列表里了,第一次啟動的時候Length==1;
優點:代碼簡單;
缺點:會把別的重名程序誤認為是自己(如很多軟件都有update.exe);可以通過復制多個exe并起不同名字來達到運行多個實例的目的;
二. 共享鎖(文件、注冊表)
原理:運行程序時,在一個公共的位置創建一個共享值(如在固定目錄創建一個文件,或者在固定的注冊表位置創建一個值),退出程序時刪除該值。若運行時發現值已經在,則表示程序已經在運行,此時新運行的進程就退出;實現:略;優點:邏輯好理解;
缺點:若程序沒有正常退出,共享值沒有被刪除,會導致程序無法再啟動;
三. 線程互斥
原理:通過一個唯一標識創建進程互斥體,啟動時判斷互斥體是否已經存在,若存在則表示是重復進程;
實現:使用System.Threading.MutexusingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Diagnostics;usingSystem.Reflection;usingSystem.Runtime.InteropServices;namespaceConsoleApplication1{classProgram{///<summary///需要定義為類變量,而非局部變量///</summarystaticSystem.Threading.Mutex _mutex;staticvoidMain(string[] args){//是否可以打開新進程boolcreateNew;//獲取程序集Guid作為唯一標識
Attribute guid_attr = Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(),
typeof(GuidAttribute));stringguid =((GuidAttribute)guid_attr).Value;_mutex=newSystem.Threading.Mutex(true
, guid,
outcreateNew);if(false==createNew){//發現重復進程}_mutex.ReleaseMutex();}}}優點:真正能做到同一個程序只允許運行一個進程。 


查看完整回答
反對 回復 2023-03-06
  • 2 回答
  • 0 關注
  • 146 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號