如何让标准EXE和WinService EXE相互通信?

时间:2012-03-23 20:31:46

标签: windows permissions windows-services uac

我们有一个标准EXE和部分WinService EXE的应用程序。标准EXE由注册表的“运行”部分生成,并在登录时以刚刚登录的用户的凭据生效.WinService EXE设置为“自动运行”,因此始终在运行并作为LocalSystem运行(本质上是管理员) )。

我们需要这两个程序通过将信息写入XML文件来共享数据。

当登录用户有权访问已安装的文件夹(C:\ Program Files \ ourApp)时,该应用程序正常工作。标准EXE写入数据,WinService EXE读取它没有问题,一切都很好。

但是,当登录用户无权写入已安装文件夹时,数据会被UAC虚拟化和数据重定向捕获并最终到达其他地方,并且WinService找不到也无法从已安装的文件中读取它夹。

为了避免这种情况,我们尝试将标准EXE和WinService EXE写入并读取%ProgramData%。除非标准用户没有写入%ProgramData%的权限,否则这样可以正常工作。

我们不能使用%LocalAppData%,因为对于登录用户,将是C:\ Users \ LoggedInUser \ AppData \ Local,对于winservice,它将是C:\ Users \ Administrator \ AppData \ Local。

在启用了UAC虚拟化的Vista和Win7中是否还有任何地方允许标准EXE仅运行用户权限和运行为LocalSystem的WinService相互通信。我们尝试过注册表,但问题更严重。最后但并非最不重要。我们需要这个与XP一起使用而不会有任何代码差异。含义XP还有%ProgramData%,%LocalAppData%等的环境变量,它可以同时工作。

1 个答案:

答案 0 :(得分:3)

两个想法:

  1. 让每个应用使用命名管道公开WCF端点 运输,让他们通过简单的界面互相交谈 你选择的。
  2. 使用Memory Mapped Files进行通信 你使用的是磁盘文件。