关于程序监测,程序重启

jax_lee 2011-09-05 04:15:05
服务器运行CLIENT、SERVER等程序

出现异常自动关闭

现在的问题就是 编写程序 对程序进行监测,监测到CLIENT、SERVER等程序是否关闭,如果关闭就自动重启。


每个程序不是都有一个唯一的进程标识符PID吗,
我得到它的PID ,然后判断是否在运行,如果没有运行就重启。。
这样行吗。。具体应该如何实现呢。。
求高手指点。。

思路是怎样的呢。。。
...全文
253 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
jax_lee 2011-09-06
  • 打赏
  • 举报
回复
哦 在那个OnInitDialog里面看到了
试试看先。。
[Quote=引用 17 楼 allenjiao 的回复:]
通过程序的名称查找进程PID ;这样就可以检查程序是否处于运行状态;
你可以看我的博客 资源里有相关的东西
[/Quote]
jax_lee 2011-09-06
  • 打赏
  • 举报
回复
谢谢诶,我进去下载了那个资源,但是里面说的那个
1.如果程序中调用该exe时:需要加入命令行参数
CString strCmdLine="-D:\\Release -Test.exe";
ShellExecute(NULL, _T("open"), "MMFCGuardProcess.exe", strCmdLine, "D:\\", SW_SHOWNORMAL);


Test.exe是你要重新启动的程序;
MMFCGuardProcess.exe重启功能的程序

加入命令行参数要在哪里添加啊,我想试一试。。。

[Quote=引用 17 楼 allenjiao 的回复:]
通过程序的名称查找进程PID ;这样就可以检查程序是否处于运行状态;
你可以看我的博客 资源里有相关的东西
[/Quote]
jax_lee 2011-09-06
  • 打赏
  • 举报
回复
咋这么悲催呢
说什么要搞个界面,可以选择程序名的。。
哎,。。。
还搞什么快捷键[Quote=引用 14 楼 arpnet99 的回复:]
引用 13 楼 jax_lee 的回复:

那如何重启呢。。。


C/C++ code
CreateProcess
ShellExecute
[/Quote]
jax_lee 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zwfgdlc 的回复:]
用OpenProcess()打开远程进程,然后用WaitForSingleObject()等待进程结束就行了,
没你的想象的那么复杂。
[/Quote]咋这么悲催呢
说什么要搞个界面,可以选择程序名的。。
哎,。。。
还搞什么快捷键
allenjiao 2011-09-06
  • 打赏
  • 举报
回复
通过程序的名称查找进程PID ;这样就可以检查程序是否处于运行状态;
你可以看我的博客 资源里有相关的东西
zhouzhipen 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wangningyu 的回复:]
引用楼主 jax_lee 的回复:
服务器运行CLIENT、SERVER等程序

出现异常自动关闭

现在的问题就是 编写程序 对程序进行监测,监测到CLIENT、SERVER等程序是否关闭,如果关闭就自动重启。


每个程序不是都有一个唯一的进程标识符PID吗,
我得到它的PID ,然后判断是否在运行,如果没有运行就重启。。
这样行吗。。具体应该如何实现呢。。
求高手指点。……
[/Quote]
说的对。

LZ你见过MS的服务程序有监护进程吗?
监护进程这种冶标不冶本的方法不可取,这只能说明你的应用程序还不够强健,还是找不其出错的原因吧
jax_lee 2011-09-06
  • 打赏
  • 举报
回复
没人了啊。。。额额
这不是鸭头 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 jax_lee 的回复:]

那如何重启呢。。。
[/Quote]
CreateProcess
ShellExecute
jax_lee 2011-09-06
  • 打赏
  • 举报
回复
那如何重启呢。。。[Quote=引用 12 楼 zwfgdlc 的回复:]
用OpenProcess()打开远程进程,然后用WaitForSingleObject()等待进程结束就行了,
没你的想象的那么复杂。
[/Quote]
zwfgdlc 2011-09-06
  • 打赏
  • 举报
回复

BOOL WINAPI EnablePrivileges()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;

if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return( FALSE );

LookupPrivilegeValue(NULL, SE_DEBUG_NAME,
&tkp.Privileges[0].Luid);

tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);

if (GetLastError() != ERROR_SUCCESS)
return FALSE;

return TRUE;
}

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd)
{
HANDLE hProcess = 0;
DWORD Pid = 2068;

EnablePrivileges(); //提权
hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, NULL, Pid); //打开进程。
::WaitForSingleObject(hProcess, INFINITE); //等待进程结束;
::ShellExecute(NULL, TEXT("open"), TEXT("NOTEPAD.EXE"), TEXT("1.txt"), NULL, SW_NORMAL); //执行自己的代码,我这以创建一个记事本为例

return 1;
}
Kaile 2011-09-06
  • 打赏
  • 举报
回复
通过窗口标题也可以找出进程,如果标题具有唯一性的话。

如楼上大牛们所说,监视进程不是好的解决之道
jax_lee 2011-09-06
  • 打赏
  • 举报
回复
可是具体的实现怎么弄呢。。
关键是我现在是第三方,连代码都没见着。。
就说写个监测程序,负责监测,然后重启。。
被搞晕了。。
[Quote=引用 22 楼 huqian2003 的回复:]
5楼 正解

QQ 2490152755
[/Quote]
huqian2003 2011-09-06
  • 打赏
  • 举报
回复
5楼 正解

QQ 2490152755
jax_lee 2011-09-06
  • 打赏
  • 举报
回复
你那个资源我试了一下,
每次我执行以下,它就把QQ关闭,然后重启QQ了。。
看来还是要修改一下,让它不关闭,或者让他判断是否还在。。。

[Quote=引用 17 楼 allenjiao 的回复:]
通过程序的名称查找进程PID ;这样就可以检查程序是否处于运行状态;
你可以看我的博客 资源里有相关的东西
[/Quote]
chenjiawei007 2011-09-06
  • 打赏
  • 举报
回复
搜索下进程守护就行。
zwfgdlc 2011-09-05
  • 打赏
  • 举报
回复
用OpenProcess()打开远程进程,然后用WaitForSingleObject()等待进程结束就行了,
没你的想象的那么复杂。
jax_lee 2011-09-05
  • 打赏
  • 举报
回复
我看了,进去那个网址看了。
这个是第三方的程序,我都没看到代码
连影子都没看到。。
就拿来一张纸,上面写着要求什么的。。
额额额

[Quote=引用 10 楼 wangningyu 的回复:]
这个程序有没有源代码?



我不知道你有没有仔细读5楼的内容,写了那么多,居然没有仔细看!太伤感了....
[/Quote]
汪宁宇 2011-09-05
  • 打赏
  • 举报
回复
这个程序有没有源代码?



我不知道你有没有仔细读5楼的内容,写了那么多,居然没有仔细看!太伤感了....
jax_lee 2011-09-05
  • 打赏
  • 举报
回复
能不能详细一点哦。谢谢。。
[Quote=引用 7 楼 wangningyu 的回复:]
里面有异常时自动重启程序(不需要再写监视的了)

图怎么挂了,补一下相关代码:

C/C++ code

class CTestDlg : public CDialog
{
// Construction
public:
CTestDlg(CWnd* pParent = NULL); // standard constructor

……
[/Quote]
jax_lee 2011-09-05
  • 打赏
  • 举报
回复
谢谢,
是这样的,刚刚组长拿来一个任务,(本人目前仍是试用期,刚毕业。菜鸟)
好像是以前的程序出现问题吧,
就是说对这些程序进行检测,然后异常的话
就让她重启。。
写个小程序来进行监测以及重启等等。。。



[Quote=引用 7 楼 wangningyu 的回复:]
里面有异常时自动重启程序(不需要再写监视的了)

图怎么挂了,补一下相关代码:

C/C++ code

class CTestDlg : public CDialog
{
// Construction
public:
CTestDlg(CWnd* pParent = NULL); // standard constructor

……
[/Quote]
加载更多回复(7)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧