同一台机上的系统服务进程与应用进程通过csocket通信,当用"本地账户"登录并且打开了系统服务的"本地账户允许与桌面交互"选项时能才能相互通信外,但
把程序拷贝到另一机器上,用远程登录账户打开时,发现系统服务进程与应用进程无法进行通信,各进程本身运行都可以,好象是SESSION的问题,哪位兄弟做过这方面的。
后来在网上找到一遍文章:"VS与Win7共舞:系统服务的Session 0隔离",才真正明白了一点点,现在就是想如何最少改动用SOCKET来实现这两个进程通信.socket创建没有什么安全属性呀,不知从哪儿改, 命名管道虽可以但要改好多代码,
 各位仁兄,能指点一下老弟这种情况能SOCKET吗

解决方案 »

  1.   

    操作系统服务与应用进程通信与一般的两个进程通信是有不同,当用户远程登录或是快速切换用户是原先用本地账户能通信的都不能通信了,我后来是提升了应用进程的令牌:在用户程序的INITINSTANCE里国了如下代码
    HANDLE hToken;
    TOKEN_PRIVILEGES tkp; OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken); LookupPrivilegeValue(NULL, "SeInteractiveLogonRight", &tkp.Privileges[0].Luid);
    tkp.PrivilegeCount = 1;
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
    在服务里程里设置与桌面交互,最后就OK了,
    这是在WINXP WIN2003下,在WIN7 winvista下没测试,
      

  2.   

    通过socket应该可以的,我以前在win 7下 VS2008 ATL 服务器 + Delphi客户端 利用WinSock API 2.0通信完全没有问题,当时得到了programbbs.com上的一位大侠帮助