我们有一个标准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%等的环境变量,它可以同时工作。
答案 0 :(得分:3)
两个想法: