有什么方法可以得知電腦中有自己的程序在運行?


Windows平台
什么方法最可取?說說啊

還有免費開源的數據庫,並發強,效率高的有哪些?Window平台
我說的開源是完全開源,有的而是SDK,誰知道里面有沒有網絡連接代碼

33 个解决方案

#1


而服務器最忌諱就是額外網絡占用,所以才最好完全開源

#2


可以通過獲得自己程序的窗口句柄來得到進程,判斷進程是否在

#3


lz是否要判斷你的某個程序已經在運行?

#4


引用 3 樓 worldy 的回復:
lz是否要判斷你的某個程序已經在運行?

不是,因為服務器遠程更新程序,新運行的程序需要判斷程序是否已在運行

也就是要做到兼容后續的更新,也就是新程序能夠識別老程序已在運行

#5


引用 2 樓 lx624909677 的回復:
可以通過獲得自己程序的窗口句柄來得到進程,判斷進程是否在


不是這樣,我這里是,服務器遠程更新程序,新運行的程序需要判斷程序是否已在運行

也就是要做到兼容后續的更新,也就是新程序能夠識別老程序已在運行

#6


程序的運行一定都有個進程的吧,你找程序的進程應該沒問題吧?

#7


引用 6 樓 lx624909677 的回復:
程序的運行一定都有個進程的吧,你找程序的進程應該沒問題吧?

那用什么方法好?

#8


樓主是不是想做一個不能重復打開的軟件

#9


引用 8 樓 u011001084 的回復:
樓主是不是想做一個不能重復打開的軟件

可以說是這樣

#10


1、使用互斥 CreateMutex、按窗口類或標題搜索 FindWindow,這是最簡單的
2、沒有這類東西,服務器中你可以使用 SQLite,然后自己用 IOCP 進行網絡通訊

#11



//請參考<<windows核心編程>>
#include "StdAfx.h"
#include <iostream>
#include <windows.h>
using namespace std;

#define MUTEX_NAME     TEXT("Global//onename")//onename可以改別的

bool IsSingleProcess()
{
HANDLE hMutex = CreateMutex(NULL, FALSE, MUTEX_NAME);
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
::CloseHandle(hMutex);
return FALSE;
}
else
{
return TRUE;
}
}

int main()
{
if (!IsSingleProcess())
{
cout << "already exist" << endl;
}
Sleep(100000);
return 0;
}

#12


引用 10 樓 Sandrer 的回復:
1、使用互斥 CreateMutex、按窗口類或標題搜索 FindWindow,這是最簡單的
2、沒有這類東西,服務器中你可以使用 SQLite,然后自己用 IOCP 進行網絡通訊

還有就是,我想問,為什么那么多人都愛用mysql,你有沒有發現實際上myssql不是完全開源的,

#13


findwindw

#14


HANDLE m_hMutex = ::CreateMutex(NULL,TRUE,"程序名");
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
  AfxMessageBox("程序已經在運行中,不能重復啟動!");//彈出對話框確認不能運行第二個實例。
return FALSE;
}

#15


引用 12 樓 u012881352 的回復:
Quote: 引用 10 樓 Sandrer 的回復:

1、使用互斥 CreateMutex、按窗口類或標題搜索 FindWindow,這是最簡單的
2、沒有這類東西,服務器中你可以使用 SQLite,然后自己用 IOCP 進行網絡通訊

還有就是,我想問,為什么那么多人都愛用mysql,你有沒有發現實際上myssql不是完全開源的,


免費的

#16


可以在程序啟動的時候,檢查注冊表中的一個標記,如果標記沒有設置,則說明沒有運行,然后,設置運行標記,程序退出的時候,取消運行標記

#17


引用 14 樓 u011001084 的回復:
HANDLE m_hMutex = ::CreateMutex(NULL,TRUE,"程序名");
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
  AfxMessageBox("程序已經在運行中,不能重復啟動!");//彈出對話框確認不能運行第二個實例。
return FALSE;
}

當中的程序名是當前的程序名還是已運行的程序的名稱?
那如果程序名被用戶改了呢?這判斷還准確嗎?

#18


引用 16 樓 worldy 的回復:
可以在程序啟動的時候,檢查注冊表中的一個標記,如果標記沒有設置,則說明沒有運行,然后,設置運行標記,程序退出的時候,取消運行標記


如果程序啟動后標記了注冊表,然后突然被用戶或其他軟件結束了當前進程。
那之后我再啟動新的程序,而注冊表標記仍然存在,
那我就錯誤的判斷為之前的程序仍然還在運行!
顯然,這種設計是錯誤的啊

#19


引用 13 樓 ren0065 的回復:
findwindw

那萬一有軟件的窗口名、類名和要判斷的都正好相同呢?這種可能性也是有的
那原本沒啟動的卻判斷為啟動

#20


引用 18 樓 u012881352 的回復:
Quote: 引用 16 樓 worldy 的回復:

可以在程序啟動的時候,檢查注冊表中的一個標記,如果標記沒有設置,則說明沒有運行,然后,設置運行標記,程序退出的時候,取消運行標記


如果程序啟動后標記了注冊表,然后突然被用戶或其他軟件結束了當前進程。
那之后我再啟動新的程序,而注冊表標記仍然存在,
那我就錯誤的判斷為之前的程序仍然還在運行!
顯然,這種設計是錯誤的啊


剩下一招:程序嘗試以獨占的方式打開文件,如果發現打不開,則斷言程序在運行

#21


看看如何解決。

#22


引用 20 樓 worldy 的回復:
Quote: 引用 18 樓 u012881352 的回復:

Quote: 引用 16 樓 worldy 的回復:

可以在程序啟動的時候,檢查注冊表中的一個標記,如果標記沒有設置,則說明沒有運行,然后,設置運行標記,程序退出的時候,取消運行標記


如果程序啟動后標記了注冊表,然后突然被用戶或其他軟件結束了當前進程。
那之后我再啟動新的程序,而注冊表標記仍然存在,
那我就錯誤的判斷為之前的程序仍然還在運行!
顯然,這種設計是錯誤的啊


剩下一招:程序嘗試以獨占的方式打開文件,如果發現打不開,則斷言程序在運行


我第一次就是這么想的 但這種設計其實是很容易出錯的 而且也不一定准確啊

#23


引用 22 樓 u012881352 的回復:
Quote: 引用 20 樓 worldy 的回復:

Quote: 引用 18 樓 u012881352 的回復:

Quote: 引用 16 樓 worldy 的回復:

可以在程序啟動的時候,檢查注冊表中的一個標記,如果標記沒有設置,則說明沒有運行,然后,設置運行標記,程序退出的時候,取消運行標記


如果程序啟動后標記了注冊表,然后突然被用戶或其他軟件結束了當前進程。
那之后我再啟動新的程序,而注冊表標記仍然存在,
那我就錯誤的判斷為之前的程序仍然還在運行!
顯然,這種設計是錯誤的啊


剩下一招:程序嘗試以獨占的方式打開文件,如果發現打不開,則斷言程序在運行


我第一次就是這么想的 但這種設計其實是很容易出錯的 而且也不一定准確啊


出錯的原因是什么呢?

#24


11樓貼的代碼不能實現么?

#25


引用 24 樓 wangyaninglm 的回復:
11樓貼的代碼不能實現么?


11樓中的MUTEX_NAME是指什么?

#26


打開進程管理器,有沒有一看就知道了

#27


引用 25 樓 u012881352 的回復:
Quote: 引用 24 樓 wangyaninglm 的回復:

11樓貼的代碼不能實現么?


11樓中的MUTEX_NAME是指什么?


就是你自己的程序名字啊,宏定義

#28


該回復於2015-03-17 13:05:25被管理員刪除

#29


tasklist+CRC32,MD5,……
MySQL據說是開源的。

#30


引用 29 樓 zhao4zhong1 的回復:
tasklist+CRC32,MD5,……
MySQL據說是開源的。


這方法就靠譜了,不愧是老手

你用的是什么數據庫?我打算用PostgreSql

#31


引用 30 樓 u012881352 的回復:
Quote: 引用 29 樓 zhao4zhong1 的回復:

tasklist+CRC32,MD5,……
MySQL據說是開源的。


這方法就靠譜了,不愧是老手

你用的是什么數據庫?我打算用PostgreSql


給點建議,用什么數據庫好

並發強,效率高,代碼健壯,尤其核心代碼

#32


雖說我是外行,但猜MySQL應該夠樓主用了.

#33


該回復於2015-04-04 11:20:09被管理員刪除

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com