下面代码用来限制软件只运行一个实例:[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
public static extern int CreateMutex(int lpMutexAttributes, int bInitialOwner, string lpName);[DllImport("kernel32")]
public static extern int GetLastError();
/// <summary>
/// 检查是否已经运行了一个实例
/// </summary>
/// <param name="ID"></param>
/// <returns></returns>
public static bool Check(string ID)
{
int s=0;
s=GetLastError();//为什么一定要这一句
int ret=CreateMutex(0,1,ID);
if(ret!=0)
{
s=GetLastError();
if(s==(int)Socg.API.Constants.ERROR_ALREADY_EXISTS)
{
return true;
}
else
{
return false;
}
}
else
{
throw new Socg.ExceptionLog();
}
}
....static void Main()
{
if(Check("adsfadsf")==true)
{
MessageBox.Show("程序已运行");
return;
}....}
当运行第二个实例时会拒绝运行。
大家注意Check()中第二句,为什么我删除第二句后就不起中用了呢??
public static extern int CreateMutex(int lpMutexAttributes, int bInitialOwner, string lpName);[DllImport("kernel32")]
public static extern int GetLastError();
/// <summary>
/// 检查是否已经运行了一个实例
/// </summary>
/// <param name="ID"></param>
/// <returns></returns>
public static bool Check(string ID)
{
int s=0;
s=GetLastError();//为什么一定要这一句
int ret=CreateMutex(0,1,ID);
if(ret!=0)
{
s=GetLastError();
if(s==(int)Socg.API.Constants.ERROR_ALREADY_EXISTS)
{
return true;
}
else
{
return false;
}
}
else
{
throw new Socg.ExceptionLog();
}
}
....static void Main()
{
if(Check("adsfadsf")==true)
{
MessageBox.Show("程序已运行");
return;
}....}
当运行第二个实例时会拒绝运行。
大家注意Check()中第二句,为什么我删除第二句后就不起中用了呢??
解决方案 »
- 输出“金字塔”形的杨辉三角。
- 怎样在DBF文件中删除指定行?
- 如何显示我复制的字符串,尤其是符号比如"\r\n"
- 关于this.DialogResult = DialogResult.Cancel;和this.close();的区别问题
- 调试程序出错。。找高人解答!
- 高分求救一个:关于dudu的源代码CNBlogs DotText 1.0 Beta 2的问题,请高手指点啊!!
- 第一次请教 思归 大侠,亦望各路大侠帮忙
- 一直没有解决的问题,用WMI来关闭本地计算机时出现的错误!
- 如何把数值转为 ascii 字符??
- properties里的settings值无法保存
- c#的方法中动态选择变量是用哪个关键字???
- webclient和progressbar实现下载时显示进度条
if (!blnCreateNew)
{
//重复启动!
}