如题

解决方案 »

  1.   

    问题具体一点好..用ID标识进程本身就不是一个好的选择.因为这个进程ID不属于某一个进程,当这个进程消亡的时候,该ID有可能被操作系统分配给其他的进程,那么先前那个ID对应的进程就已经更换掉了..呵呵
      

  2.   

    我现在的问题是server做成了系统服务,运行起来后进程的会话id为0,客户端的会话id为1(客户端要在com库中查找server实现的一个com对象,貌似是由于会话id不同所以查找不到),访问不到服务器。
    所以我想让server创建进程时的会话id也变成1……有什么办法么?
      

  3.   


    BOOL CreateProcessAsUser(
      HANDLE hToken,
      LPCTSTR lpApplicationName,
      LPTSTR lpCommandLine,
      LPSECURITY_ATTRIBUTES lpProcessAttributes,
      LPSECURITY_ATTRIBUTES lpThreadAttributes,
      BOOL bInheritHandles,
      DWORD dwCreationFlags,
      LPVOID lpEnvironment,
      LPCTSTR lpCurrentDirectory,
      LPSTARTUPINFO lpStartupInfo,
      LPPROCESS_INFORMATION lpProcessInformation
    );
      

  4.   

    com对象本来就在不同进程之间可以通信,不需要会话id一样,客户端通过CoCreateInstance直接获得com对象
      

  5.   

    我的server在后台运行,运行过程中使用了CoRegisterClassObject对类厂进行了注册,当有client连接时就不会再创建一个server进程了,而是直接用已经注册的类厂对象创建com对象。可是当server以服务的形式运行时,client连接服务器还是会再创建一个server进程,这时任务管理器中有两个server进程,唯一区别就是会话id,一个是0一个是1。client进程的会话id为1,似乎是由于不在同一个会话中,所以会话id为0的server对client不可见。如果server不作为服务启动,而是以普通程序启动的话,server进程的会话id为1,这时无论多少个client连接server都不会创建新的server进程。不知道是不是这个原因……
      

  6.   

    我推断确实是会话id的问题,不过还没确定。至少我要达到的效果已经可以实现了,结帖先~
    如果和我有同样问题的可以参考下面这个链接
    http://www.codeproject.com/KB/vista-security/VistaSessions.aspx
    感谢sys0006和oyljerry
      

  7.   

    http://msdn.microsoft.com/zh-cn/library/ee663077.aspx
    参考Session 0阻隔详细说明