c – 使用Win API确定可执行文件的实例是否已在运行
我需要确保只运行我的C应用程序的一个实例.
使用Win API我该怎么做; >检索有关我当前申请的信息? 注意:我不能使用任何增强库,我对使用互斥锁不感兴趣,在类似的帖子中看到. 解决方法
您可以使用CreateMutex函数创建系统范围的名为mutex,以表示您的进程是否正在运行.如果进程已在运行,它将返回ERROR_ALREADY_EXISTS:
(void)::CreateMutex( NULL,TRUE,TEXT( "My_Special_Invokation_Test_Mutex" ) ); switch ( ::GetLastError() ) { case ERROR_SUCCESS: // Process was not running already break; case ERROR_ALREADY_EXISTS: // Process is running already break; default: // Error occured,not sure whether process is running already. break; } 现在,如果您坚持不使用互斥锁,则可以使用 LPCTSTR lockFileName = ...; (void)::CreateFile( lockFileName,GENERIC_READ,NULL,CREATE_NEW,FILE_FLAG_DELETE_ON_CLOSE,NULL ); switch ( ::GetLastError() ) { case ERROR_SUCCESS: // Process was not running already break; case ERROR_FILE_EXISTS: // Process is running already break; default: // Error occured,not sure whether process is running already. break; } 有关如何安全地处理临时文件,请参阅有关Temporary file generation and usage best practices的文章. 总而言之,肯定可以使用锁定文件来完成任务,但我认为这样做更难. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |