您的位置:首页 > 编程语言 > C#

C#代码实现,确保windows程序只有一个实例(instance)

2007-08-20 11:38 786 查看
[align=left] ///<summary>[/align]
[align=left] ///应用程序的主入口点。[/align]
[align=left] ///</summary>[/align]
[align=left] [STAThread][/align]
[align=left] staticvoid Main() [/align]
[align=left] {[/align]
[align=left] //防止程序多次运行[/align]
[align=left] if(!OneInstance.IsFirst("GetPayInfo"))[/align]
[align=left] {[/align]
[align=left] MessageBox.Show ("警告:程序正在运行中! 请不要重复打开程序!可在右下角系统栏找到!","程序错误提示:",MessageBoxButtons.OK,MessageBoxIcon.Stop);[/align]
[align=left] return;[/align]
[align=left] }[/align]
[align=left] Application.Run(new Form1());[/align]
[align=left] }[/align]
[align=left] // ******************* 防止程序多次执行 **************************[/align]
[align=left] publicabstractclass OneInstance [/align]
[align=left] { [/align]
[align=left] ///<summary>[/align]
[align=left] ///判断程序是否正在运行 [/align]
[align=left] ///</summary>[/align]
[align=left] ///<param name="appId">程序名称</param>[/align]
[align=left] ///<returns>如果程序是第一次运行返回True,否则返回False</returns>[/align]
[align=left] publicstaticbool IsFirst(string appId) [/align]
[align=left] { [/align]
[align=left] bool ret=false; [/align]
[align=left] if(OpenMutex(0x1F0001,0,appId)==IntPtr.Zero) [/align]
[align=left] { [/align]
[align=left] CreateMutex(IntPtr.Zero,0,appId); [/align]
[align=left] ret=true; [/align]
[align=left] } [/align]
[align=left] return ret; [/align]
[align=left] } [/align]
[align=left] [DllImport("Kernel32.dll",CharSet=CharSet.Auto)] [/align]
[align=left] privatestaticextern IntPtr OpenMutex( [/align]
[align=left] uint dwDesiredAccess, // access [/align]
[align=left] int bInheritHandle, // inheritance option [/align]
[align=left] string lpName // object name [/align]
[align=left] ); [/align]
[align=left] [/align]
[align=left] [DllImport("Kernel32.dll",CharSet=CharSet.Auto)] [/align]
[align=left] privatestaticextern IntPtr CreateMutex( [/align]
[align=left] IntPtr lpMutexAttributes, // SD [/align]
[align=left] int bInitialOwner, // initial owner [/align]
[align=left] string lpName // object name [/align]
[align=left] ); [/align]
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: