做了一套系统,一个是配置数据库程序:databaseSet.exe 窗体名称: 数据库配置
一个是主程序:         LifeManage.exe  窗体名称:日用管理系统完成功能:
当配置数据库程序启动时,检测如果发现"日用管理系统"现在运行,则提示“日用管理系统,请关闭后再运行本程序”如果使用FindWindow实现,是可以发现"日用管理系统"这样的窗体名称的,但是LifeManage.exe运行时作为父窗体,点了其他的功能后就会出现这样的窗体标题:日用管理系统-分类管理
日用管理系统-数据录入
日用管理系统-......
..................因为子模块有很多,能否很方便地实现上面这个功能呢,请大家帮助。

解决方案 »

  1.   

    使用Process的方法,按名称得到运行的进程,如果存在的话就说明在运行。
      

  2.   

    Process[] curProcesses = Process.GetProcesses();
    for(int i=0;i<curProcesses.Length;i++)
    {
      if(curProcesses[i].Name = "LifeManage")
       {
         MessageBox.Show("“日用管理系统,请关闭后再运行本程序”");
         return ;
       }
    }
      

  3.   

    不同应用程序域之间的问题可以使用:.net中的remoting技术...
      

  4.   

    //判断程序是否已启动
    public static Process RunningInstance() 

    Process current = Process.GetCurrentProcess(); 
    Process[] processes = Process.GetProcessesByName(current.ProcessName); 
    //判断进程里是否有该执行文件的进程
    foreach (Process process in processes) 

    if (process.Id != current.Id) 

    //确定不是当前exe的进程
    if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName) 

    //返回进程名
    return process; 



    //没有发现
    return null; 
    }
      

  5.   

    你说的是不是不允许打开同样的子窗体??可以这样子:
    写个打开子窗体的函数:
    /// <summary>
    /// 打开子窗体
    /// </summary>
    /// <param name="ChildTypeString"></param>
    private void OpenWindow( string ChildTypeString )
    {
    Form myChild = null;
    if( !ContainMDIChild( ChildTypeString ) )
    {
    // 获得当前进程集合
    Assembly assembly = Assembly.GetExecutingAssembly();
    // 用string类型来创建data类型
    Type typForm = assembly.GetType( ChildTypeString );
    // 用"InvokeMember"类型方法来创建对象
    Object obj = typForm.InvokeMember(
    null, 
    BindingFlags.DeclaredOnly | 
    BindingFlags.Public | BindingFlags.NonPublic | 
    BindingFlags.Instance | BindingFlags.CreateInstance, 
    null, 
    null,
    null );
    // show子窗体
    if( obj != null )
    {
    myChild = obj as Form;
    myChild.MdiParent = this;
    myChild.Show();
    myChild.Focus();
    }
    }

    /// <summary>
    /// 用特定字符串查询子窗体
    /// </summary>
    /// <param name="ChildTypeString"></param>
    /// <returns></returns>
    private bool ContainMDIChild( string ChildTypeString ) 
    {
    Form myMDIChild = null;
    foreach(Form f in this.MdiChildren) 

    if( f.GetType().ToString() == ChildTypeString ) 

    // 找到
    myMDIChild = f; 
    break; 

    }  // 显示已存在窗体
    if( myMDIChild != null) 

    myMDIChild.TopMost = true;
    myMDIChild.Show(); 
    myMDIChild.Focus(); 
    return true;

    else
    return false;
    }然后打开子窗体用:
    OpenWindow(typeof(你的子窗体名称).ToString());
      

  6.   

    可以参考:
    ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ja/cpref6/html/T_System_Diagnostics_Process_Members.htm