怎么使系统服务进程无法终止?就像某些Windows系统进程那样,或者显示“无法完成操作 禁止访问”
还有就是如何编程设置系统服务的之间的依存关系,比如要关闭Server进程必须要同时关闭Computer Browser进程...
还有就是如何编程设置系统服务的之间的依存关系,比如要关闭Server进程必须要同时关闭Computer Browser进程...
解决方案 »
- CCheckListBox 里面的checkbox方框如何变大
- 如果在一个消息之前处理一些事
- 严肃问题:用盗版vc2008做了写定制软件卖给了正规公司。如果以后打盗办,比如sohu公司啊,专业打盗版公司来找麻烦了,起诉了。
- 如何动态的改变对话框的窗口图标呢???急
- 现在软件注册要用到计算机的特征码?用什么特征的好呢?安全性高呢
- 没分了,好心人帮我看看程序错在哪
- 问一个简单的问题:我将一个*.ppt格式文件里的内容拷到我的*.doc文件里,在*.ppt里的文字有阴影,而*.doc里的文字无阴影,我怎样才能在*.
- outlook 邮件的正文和附件的提取
- CFontDlg在win7可选字体中没有Tahoma等常用西文字体?
- 如何不让某个程序出现在开始菜单里
- 请教在对话框中怎么加入全局变量(急盼)
- 抵制日本游戏<<三国志10>>希望大家不要玩,因为日本在游戏内加入了...(内详)
谁说"没有绝对结束不了的进程"的?system idle process就是不能结束的
试试看,我没有用过。
我这里讲的方法实际上是不能终止的两个进程。讲到这里相信很多人都明白了,就是两个进程相互监视,一旦发现对方被杀就立刻重启对方。这样,这两个进程就很难被杀死了,至少我认为用任务管理器是不可能杀死它们的。 我的例子中,每个进程建立一个线程专门用于监视,这样主线程还可以做其他的事情。另外,注意那个互斥对象的使用。当然,这个程序可能写的不是很完美。//test1.cpp#include <windows.h>DWORD WINAPI ThreadCheckProc(LPVOID lParam)
{
STARTUPINFO si={sizeof(si)};
PROCESS_INFORMATION pi={0};
HANDLE hMutex;
char *pName=(char *)lParam;
while(true)
{
hMutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,pName);
if(!hMutex)
{
CreateProcess(pName,
NULL,
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ); // Pointer to PROCESS_INFORMATION structure.
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
else
{
CloseHandle(hMutex);
}
Sleep(1);
}
}int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{
DWORD ThreadId;
CreateMutex(NULL,TRUE,"test1.exe");
CreateThread(NULL,0,ThreadCheckProc,(LPVOID *)"test2.exe",0,&ThreadId);
while(1)
{
Sleep(1000);
}
return 0;
}
//test2.cpp#include <windows.h>DWORD WINAPI ThreadCheckProc(LPVOID lParam)
{
STARTUPINFO si={sizeof(si)};
PROCESS_INFORMATION pi={0};
HANDLE hMutex;
char *pName=(char *)lParam;
while(true)
{
hMutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,pName);
if(!hMutex)
{
CreateProcess(pName,
NULL,
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ); // Pointer to PROCESS_INFORMATION structure.
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
else
{
CloseHandle(hMutex);
}
Sleep(1);
}
}int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{
DWORD ThreadId;
CreateMutex(NULL,TRUE,"test2.exe");
CreateThread(NULL,0,ThreadCheckProc,(LPVOID *)"test1.exe",0,&ThreadId);
while(1)
{
Sleep(1000);
}
return 0;
}